diff --git a/.recommenders/caches/identified-project-coordinates.json b/.recommenders/caches/identified-project-coordinates.json new file mode 100644 index 000000000..597351379 --- /dev/null +++ b/.recommenders/caches/identified-project-coordinates.json @@ -0,0 +1 @@ +[[{"location":"/usr/lib/jvm/java-7-openjdk-amd64","type":"JRE","hints":{"EXECUTION_ENVIRONMENT":"JavaSE-1.7"}},"jre:jre:1.7.0"],[{"location":"/home/martijn/Documents/Alitheia-Core/alitheia/core","type":"PROJECT","hints":{"PROJECT_NAME":"core"}},"eu.sqooss.alitheia:core:0.95.0"],[{"location":"/home/martijn/.m2/repository/org/apache/velocity/velocity/1.6/velocity-1.6.jar","type":"JAR","hints":{}},"org.apache.velocity:velocity:1.6.0"]] \ No newline at end of file diff --git a/.recommenders/caches/manual-mappings.json b/.recommenders/caches/manual-mappings.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/.recommenders/caches/manual-mappings.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fdt b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fdt new file mode 100644 index 000000000..049188e0c Binary files /dev/null and b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fdt differ diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fdx b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fdx new file mode 100644 index 000000000..9a66b2ad8 Binary files /dev/null and b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fdx differ diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fnm b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fnm new file mode 100644 index 000000000..a3b61047a --- /dev/null +++ b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.fnm @@ -0,0 +1,4 @@ + + +coordinate fingerprintssymbolic-names +classifiercallovrdselfcovrpselfmovrm \ No newline at end of file diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.frq b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.frq new file mode 100644 index 000000000..3fdfc9870 --- /dev/null +++ b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.frq @@ -0,0 +1,652 @@ +I!< /0 (;!6 '( +04D;' +(&    /914A #- ]ACYaG "K C7$O5>LG(5FINA22E.M36!7 +65CNB #.L+)08 , E +4D7!5+L $'2A +I-F(#"# #?=42O(E L"!: D7 +: OP -> ?/#<1)Bm!K= I=*A%) $1I)2;$A,@- I( 8;)@P09#7#KGOoc/15FO'CL&I=FME1y'F>05+K: DD8L;A "@ o%9" DH +9"C=_!=:E7 1 3 AFLB"N83?*'"*IBJDG49L*D<? P58)I)-7)BO/'C8?9-1*5&%K& < +6PM,9Jy)"%!#1Ig wKA0+:F3 D% +O G1B1.'K.BI[.?B= =/-@ ++*!!DG %+&"Ns%(7 +E +7&* .D8) 8 28& :A ) 0-(219F&."%( (U # 7$)D9J + +600  2 ! 3? )"!@E>8&$" D 6 K8,! 3:> +*: +1 &; Ko,!3 ;.5E-18.# +')( +*F! +#5/ B  ?(O/ A( !?$EG5 + H 2 +E,m) =3N*35+?I, '-+ #().@*  */ ? :k= *6$ >+D:M*68>+.K$ J 8 ;-#;<(A:KF0$ )/ 7 ?/)C L(0=-')(<,> & . %' : +I 1#!561<9N+E8*2 L6 5 2-3   ( ?#%#=$!1 !*? N+ B0 + +6%>OH ).6#%3/)?#E OFOD 8-PH64EPH<1 F@*-7B. E;E >#5-23. 5=N'2CKJAH!"4JL /F4& / )%!D0 C% "2M>96. .H5," ", &L8* &22G<3( (0&(!J :'<9M #<& +A 7;3) 1o!1LLL " D.60IF3 C*E> 9"5?N')@>C"/'* + !" 5 .1'&!"&648 8?* +)}'3B +&&G'-%& E! 1- ;0+A < + #D5#  !)# < 1% E,! .5 #%JK'#.'E-.6 %+0;39-8&=%2 ;9, %=L +.2*+EE%,O2 F B:E0K#PP,%- 7B# C G +&<#/ ++'' 4377(<4 !( C+?#4"EKJ::+9NO) +!-  0;B $*2I-IC-"#)MG&@& + %L;> "? &5 2;$/+$J)?O;/D6C6( 4C ,?{I +< / "6# 7 A>6@2GK333 CH*'1LLFPD): @*$3*K#6> $O?,;56 <:D @%E -'-N16F.!& KE -9? + 9 4 .! , * )'.=;-D&3I=A= '- L,9 +"  +< @ '= 4 (.a? 4<9 2  9+!>68>*"+%!! +;:: " F: +,*&"(%/ ;-55 32 / / +/@ 51= 0  +@ 2@! !":. + 6# $&IH  &'($81 +3 +#&I $=55?G'630H206'5"?,$+IF.{$  , 4F"K5#:C) )!% 4I 1 M/Cm)k? 8L.K22' *!G/* +>+!8= 6FG3 HG OL%%AN +; 6M'>: " @5,+,!J% 9!-%.2"<#*(/( +C"J06? ) =;+?P +M9;2 +( )- /< +0+D% E7 )+= C7'HH,! */K/?,%F,#F9>1NE5:E-CJB8 9!J# .$ /A & : 3,$G< ?I'B O51 QM$OG)-%%""104% 3HACN> /;A0$3N@2,@$ I$-77#K=0I8%i+HO3!AN-@B-C1 +D22=9HI 5/1,$5-:N&2F N 37%I $-E0M#CM 58(88FFE9A6$ +<K?GY/<F52&C7F=?1,8 ).6C+NF1O="-"0, AE& GCu >+$- +INI%0'GJ#= $P<=&$# +;H +72 < +. 74'; <;J,P>BBOME&-B =!$35(/; I0 +H!/*>(DB# LA.!$H?.8)B K6O%3";L%AMG$%KMI0G :97H-$25 .BK"" ;E! *E"('0@=6C" > 13*/+'37 /2 *M% =1F(;N8:CK/(EL 2-#5D&*HEH+/%F$00G954)M 9+.12. +FI,<'NBP4<>8I2/'8KO%$/ !(9,)%*#  + 1#?%.HB40 5 +>/7,8)0 OIHKIGI +@O ,2..*N+B 4A'!K32 ' $J$J.G +?+D&> $6GHN ?5> L*O<<?AJ< *F cO?DC%OGKH$ $- 8.A)9/(8M,01O=H + O;.D#>$+P0&21>A & C16 GNG/D< =% +" +;#J'7>0.- G+?7IO 8 % 5#3L6(KA!%- -9N%47@' +>( 8. +?9A-! +/:0@)G*D<*'  H&!H96S86*  9+= 9G&95D&&0 ( =9:&F4D <&ED $M/F & + BJ!> I%A +  O#)< +7,C'4#$"*<' $*,?1*4 /:#I70$O)  M?6 +#E74>7#MOD5>&461/,*;@%'C"1HA  ?JI, +:+$ L$E9 IDHI( H@=37.)$)3 +=6"4// '2'$+U!*I5$ |0`                                                                                                                        f0`"!! !                                                                                                                        f0`"!! !                                                                                                                        f0`"!! !                                                                                                                        f0`# !  #                                                                                           n0`"I7!H"L. +D28J@EG/F(('33N:;3HM/"B B?#&#%AG&)D{7 19P -PJ ,I;/ 'DK4!# ,MO +H #E- ]CD  "# (=C7$O5>LG(5FINA22E.M36!7 +A5CNB #.L+)08 ' ,@ OE&4D7!G+N% ;$'2A +I-5F(;#E#0 #)?=4E2O(E L."!:GD7 +N 0OP 7>"L /@05+K: DD8L;A "@ %9."DH' +9"C=_!=:E7 1 3 AFLB"N83?*'"*IBJDG49L*D<? P58)I)-7)BO/'C8?9-1*5&%K& < +APM1,9KJC"*->E!91II + KA0+:HC'D% +O G1B1.'KFBI/[?B>= K/-@J+*K%!GG C%(/;&;"BNO?%0H7EA +&?* .D@0)B 28:% :AKAG8EG(HCI9F(I+3N%7(H U+ EM$JD9M* + +AF0!0<; +82,' !5 GM)K)!@G>M98&J"8!M6 K8,! !KL> +4? % +1N 2C"K-o:M;K5GH-/D1JB#0C+'.+/( +4IF2! +-5/=F J (@O/ A( !!* H?<E,GO5@ OH 284 E,Jm)4=3N*35+?I, '(+57().@C% #*>8 K Gk=K*?6$ >+D:M*68>+.K$ J 8 ;-#;<(A:KF0$ )/ 7 ?/)C L(&$%;6BIOAL3" -N@#@24&O!M 3;. /'2N6 9,+J+> E#L56IJ1$E717!*DOH7 5.6#%3/)?4#E OFOD 8FPH64HEJPH@16 F@*-7B. E;E >#5-23. 5=N'2CKJAH!"4JL /F4:& 5. 4 ,&=DDGP %."NM>96. .HN3,6 !))D"&LM8*2 7KEG<9< (J0-)<?J =:'A 9"5DN:>@>C=/B(G*4 <",K I9D @0*.51<6D4M8: 5>I#2JKG'(B.'L-F<+.1C67%2?060 #;KDB-8G&?8%7 -;;,8=>-N +92*'+EE%?,O2 F B:E0K#PP,,- 7:"B#,C G1'.<#&9/?85'4F43778(<4* ( C$+"?#&4"EKJ::+9NO) +!7-& 02;B $*2I4L-.C-"#)MG&@1&"OAL"F J"9>%JID&?B5CON+NN::< %*=B +CDM46G(9 +@:L +3 +N==3(&   +A-"+<( 6 >0A 2E= 0I<@+ .:JF-' +=8"?%M77M!1 )K)- D1J<*F N3.$32*K! A+D? %L0M=$B- 479A17I, +=;<% g8 B0;:A:J?&-4);3E=M(O," +C*AO:DG @LM(K;E -L?B&:5; ;K$/+$J)?O;/D6C6(6KHC) 0?@IJF + ;) ,0:D6@B %A>6@2GK333 CH*'1LLFPD): @*$3*K6G>L$O?,;96 <:D @%E -'-N16F.!& !K E""K9?J E N4 H.!B:,< BBD.=;->H@&3I=A= '9-;PLI9D/*"  +H<"J@?N4O*(B. H+B5!N>E6>C*M+?%F:! +>:8:G">!FG:A6 +DI&M(/4" P;-H68E57 '3B?2;/<9/#L/.@G - B31=PP0) &@LED@8!84":O.8" 6:# ,$>CIH  >&-'P68L <1=3#,7&L8()$=5=?G'6340JHB56F(>3"?,O$KNF/.$0*8,4F"KKA#:C))K%/9"> /1C*)%%?0 8L.K22'( L*L6/, +I46:8=?LG3 HG OL%%AN +; 6M*'>:F(1K HEEN,NJ%2=3-) .62E)1NE5:E-CJB8 9!J# .$ /A & : 3,$G< ?I'B O51 QM$OG)-%%""104% 3HACN> /;A0$3N@2,@$ I$-77#K=0I8%i+HO3!AN-@B-C1 +D22=9HI 5/1,$5-:N&2F N 37%I $-E0M#CM 58(88FFE9A6$ +<K?GY/<F52&C7F=?1,8 ).6C+NF1O="-"N7,AELBBOME&-B =!$35(/; I0 +H!/*>(DB# LA.!$H?.8)B K6O%3";L%AMG$%KMI0G!:=7H-'25 .BK"" ;E! *E"('0@=6C" > 13*/+'37B/2 **0%=1F(;N8:CK/(EL 2-#5D&*HEH+/%F$00G954)M 9+.12. +FI,<'NBP4<>8I2/'8KO%$/ !*9,)%@*=)1" +( L#?:.HB40 5 9>/7,98)0 OIHKIGI +@O ,2..*N+B 4A'!K32 ' $J$J.G +?+D&C> $6GHN ?5> L*O<<?AJ< *F cO?DC%OGKH$ $- 8.A)9/(8M,01O=H + O;.D#>$+P0&21>A & C16 GNG/D< =% +; +;#J'7>0.- )E!E:LC2:3)$F05A=31"751.J ; +O5W6DP&81H3B;#:)HH< 5%B$H81K!" 320A$ M#+?;+BM C?8#JDO6IIC:6 F A,9 K$H+6<&;MO+6(1$:,3J=%P=7@/G? 3JF&G& +!=L4D/O8+3./ +2L/A>G+?7IO 8 % 5#3L6(KA%% 9N447@' +>+ J87 +J49A-N,9 +?I@')2%H0*CGDB,* !#K&6!HK(?6=S966* &9@+= 9G&95D-&0=(F 9>:&>FDDH &ED 0MEF &0O O=J> I8%=MA4!O3#)I<=9'>7,C<'44#$9M"K'-!O$@??$*A4F:#I7G0,1O)G: 4 M2?6 . +E)74>F7#@MOML5>74621,*;@%'C01HMAH  ?JI, +:@:L$E9 IDHI( H@.=N37P-L.>B$<)3+ >6N1" "4;/?+5/B9'D*L'K+,!*I5%$1,0(#>< J3L/H#,AA +F"-8GK&OB">4<'K G7*PNABO=H!3L*@E/@ &!&>5%:+ 5/ADQ@!0H9F 2AK(o;- #3K-OH 2"D-/J17$MFD+K80B!LA.E3L/NP.5%!D.5F:9, ,LF,?O) ;9%(47N*9I) '.J<<4L"BF07.g$O +"M #@"H8 @.4(.L20 +,6$;2-&( #% :*.4!'NMK#07/N. +@! *19-O22B'N=YL'H C<$D7? AEC.7'F(,I +8B 9 O2E KK# =AN,B;0+8I +B 'FO:U>( +7( +J0H 0D>K ; A7>C* ;FE6B<.(O!-5/D%6/ )C9 2H==':75F-GC-F> (,EJ>"3"%<%@%   =8$6;N;";A 11079*$FC;&G&AD21F8&7%(4 N%,/ /#N98M 4NAGC7KIDHD"C7G**>D< L *2*>N3(K%K/<-+K%F( +%<4*@ 5! +@D O1&NNH M=B !+< /*D: H3$L: 1?$ +@-34$33E4;? ?EJ#D?-5@ <3$#= ";2"JHB:OL @69IA"6L9 DG15*$ )A'$;#OD57A9N *?+.F*,O9N+): P@@O F) #+ +8) ; +!O8=6 +HO3+<7O>@,;L33H.J7-/M*C=! +6AI # $"@ ?D63I 31 ++!F8I60F,(@CMI5 $+3B/PE F8O; ,  >G4PD7<$I":(#6=-I2H."(6G4:<+JID)D*>ML$BG?BCA=5H %: )->!.,,'< -=C=7H -@9.N=K=9!JKA58-1 J + )81 E@A:D&+.;KGI 8!I$< FN/2A3DM&J=+A2=4A)>#99$@0( !' O.91)2:GBI3C 4H6=/H/N?<(?B/ ))$N5@LGID7- 'E O"9IJ!CJ;<6+ GL,6@3J *K'H.I #L#1 +!?&*)/' =M*8 J'O=4N-2#:-E%M7<N8C<6L 5%58(>@9$L4:%0LH5 +>'?/KC6?)&6+#"G:%& +?M0O*0"M'.&4=B'3# .6CE7Bu -LHM +1H$4,B!"2K:6:@9MaHD094JM>C.&8&3;AD08$ +2:027%8>MN/+?2FS*;9<,>M(B>14MK: I 6L A5<>#L8"N(F/A7IK(13 N<7G +CP5.+M?FH*<CJ;+L)>F71'COHJE5 AF"@ $ /.H1!56 "*%A8J.HE$!; 8K?F0JF5&E"+"1 D?G$4)  A6BO.'1<E,0A75IM=/*OO1-O-:8N2@"I:MI* 1FM1-E 9:F2 ,;#( $LG + : +G752;:%4;"%D,2?'& 8:OE0M00O="@O= & 3 <-+&F674B5D3G - 396D%A#:*/)7%22J9 2L,8)&D(M+.1JC# #&C0K9!<4N M&IG7CFMI 1#JF*/4%I:8J,G B, =J(D(--%(<$'/@1?04"C-L03I4@2G/G -M8AM3+!/1LH#)E!J9;'O.L;76?;M&;>E I'2C5?,* CJ!GJ+AB6B/DF;=H:8:' "+MB'3? & +$=8(H c O9 +-6&D: @ N@' +K J2FJ3DMEBK;J -!)E='9)" A /M7@#F& :"I0P<,7P +#AJP'  MN6!HB +;>.H8&w9&;/D58/@K*F9I);)FD$25D0>!21)M4!(9:O+/3><%9-/OJ4EB3E#K;G %(.'C*&- (7CNDLN?/E<,K(4 CJ;)B( +N;NB:&4 I8?G5. N,3C;@0:09 +&=&@&FI#L96 +B7J$%#28!>3& 0 9- 06* ?#@I)#?#09)L 5&/H!7GJ2$$=1/P!NN+G/NC/2BL ,7 ?7.1,7%>$B>B/%, -H5?665$GMA:? H9/73*(9M@"KIG8+2F=:*1 AI10[E2.& 5 JE>$E@2"#0 /G@=CF$,P(O@E:': ";IK*1B! C<0 M8" ?G3>)@ 1@*DI6J=16)L?;' 4.%*" 94D7OM7; +CL2;J/" B)>,(4G3>GB18K/-OOC># J BM KF.EL % +,#4!) +IIF(90C$@ K .%)%B NFBJ>M +:>=B +!DL GF5 'F>@6B A1H" H84'B:6<>2;, )9!6)'3LJNL%1>9"#,7 /I=I!/;5)O> +"3+N:D,2 3<41)8KF #2C.3?(MI?= 6@*.+.E5$KDA4PA)3K8910! K*0(IDML54! %14)(M "(!L ),FC9;D7/ +GFA*K E:@*CM44 .G +:*OE= ;+9=7E7 '%H?2)PH=DG)N 1=AK6,=+ *N51->GJ$'6#P":2N 3+C,=159@EOAA ;H???"P+$#P 9 8.$8D!/):2CH0F&>B(A ,$I--C!')%7A +?'!NH=O-2P40H3C0M&$!0-N)1,L(-=_3 E?' +D ()N0 +OD'%eAI5*+ML$< P!>8G% 3'O%3 # "--LG??G+*.#1'O0+%M8#G!= >@ <.L,O-5:& C$K914?? B$K?H9:6767LF,F2AD6J0@. +A-4+L=MLBKP(*/<II MI;=<2 ;8$6=K9  + K K25G D8C +-)! m7@+ 00-D5*5 M#*BO*7%0 E E>4OE"'AC40' =>0J$@:A& 6.L+?($#*?D#KM7*"8 -KEAA3 i4A,#<N+G5 !*'HH3&;,H +FL J!&;B. +G,OAOG2F&J/';F*L +BBB= "H 6EJ$ 2F$2< -OE@'>% .OC 0K5LK%(=?/;" >'/C0M6NM8(?%83%">NL%2K #JL&') )(-5F%*C EH:&;M,1 A,I&%1 8 +7J#? ; @1%2FA67F! +!7 +608 + 44$/ +?)/M-E%118'(783 B! *GH &-- +L +*4IOEE>>=,34 .&4=A.0ND, 0 +&6=( 2 +;' G&+"I 8 /*GN# ++ #%L +5C8kI qD(BJ&6"CI=67KB&NK3.(9>;L1I/0 (;6 '4;(&   14A<!? :+/ +*! ;:N;<7 C7L9F.5< )"6'BN-76$)"F #- ]A "7O5>G(5FN2E.M3!7 +65B #. ,E +475+L $2A-F(#"# #?2L"!: D7 +: OP ->/#<1)Bm!K= I*A%$1I)2;$A,@- ( ;)P09#7KOocCL&I=FME1y'F>5K:DD8L;A "@ o%9" DH_!=:E7 1 3 AFL"NIBDLD<? P58I)-7)'C9-1*5&%K&< +6M,Jy)"%!#1 wK+:F3 D%OB1.B=/-@ +D %%(7 +E&* .8 88& :A  0-(21&"%( (U 79J + 0  2!3)" D6 K! 3:> +*1 &;! ;.5E-8.+')( +*! +#5/ B  ?(  !G5 + H +,m) =3N*35+?I '-#.@  * :k= *6$>+D68>K$ J 8 (A:KF$)/ ?)L(<(9L N&JM'07'DK4! +'  NA #6B +MA "@#@24&CqO =#?3;18;&%11=')<, & %' :  1#!61<9+8* 5 -  ( ?#=$!1!*?N 0 6%O ).6#%/)?#EF 8-64EH<1 F@-B. EE523. 5=N2JH"4J F4& / )!DM>965,"", L8* &22G<(0&!:'9M #< +A 7;31o1LLL " D.60IF3 C*E "?N')@>C"* +!" 5 .1&!"&648 8?* +)}'3 +&G'-%&  1 ;0A < +D5 !) 1% .#%J'E-%+98=%2, %=L +.2*EE%,O F :K#P,%-7BC  +&<#/ ++' 4377(<4 !( C+?#4"EKJ:N) +!-  0; $*2I-I)&@ < :9%;D0*5 N: :8 %A + @=2( +5 : +( + +=)   + +(6 0 2 10 @ $J6-%M4#/3 +*!) 4< L."-41 +=<% g B0;::)=,# +A >%L& 2$+$J?;/66C,?{# A>6@333HLFP): @*K#> ?,;56 <: %E -'N1! E -9? + 4.*)'.=-D&A=',9 +" +< @ '= 4a? 9 2  9+!>68>*"+%!! +;:" F*&"(% ;-5 2 /   0 ! . +6# $&IH  &'($1 +3 +#I =55'30206'5"?F$  , 4F"K:C) 4 1 M/m)k8L.K22 *!/*+!8= 6FG3HG OL%%AN +; 6M>:  @,,!J% 9!."<( +C"J06? ) +?P +M92 +( )< +0+D% E7 )+= C'H,! *//,%F#95:E-CJB 9J . /A & :3,G ?I'B 51 /;A032,$ I$-7#K=0I8%HO3!AN@B1 +=9HI 5/1$5-:N&2 N 7I-M#CM58(88FFE9 +<K?GY/<F52&C7F=?6CNF1O="-"0, AE& GCu >$- +INI0J==&$# +; +72< +.74';J,PB =!$5(/;0 +*>(DB!BKO"LAG%G :9H$25 K"" ;*"('0@=6C" > 13*/'37 *M% =F(N8:CK/(E&*H/%FG954) 92FI,'4I2'8KO$(%*# 1#?% +>/7,80IHIGI,2..*N+4A'!K ' $J$J.G +? $6GHN 5> <?AJ< *F c?DC%OGKH$-)9(8M,01O= + O;.#$01>A C1 G/ =% +" +J'7>0.-  I%A  #)<,C'#$<' $*,/:#I70$O)  6 +#E74>7#OD5>&61/,*;%'C"1A  ?,+$$E9 II(H@37.)$)3 +=6"// '2'$+U*5$I/0 (;6 '4;(&   14A<!? :+/ +*! ;:N;<7 C7L9F.5< )"6'BN-76$)"F #- ]A "7O5>G(5FN2E.M3!7 +65B #. ,E +475+L $2A-F(#"# #?2L"!: D7 +: OP ->/#<1)Bm!K= I*A%$1I)2;$A,@- ( ;)P09#7KOocCL&I=FME1y'F>5K:DD8L;A "@ o%9" DH_!=:E7 1 3 AFL"NIBDLD<? P58I)-7)'C9-1*5&%K&< +6M,Jy)"%!#1 wK+:F3 D%OB1.B=/-@ +D %%(7 +E&* .8 88& :A  0-(21&"%( (U 79J + 0  2!3)" D6 K! 3:> +*1 &;! ;.5E-8.+')( +*! +#5/ B  ?(  !G5 + H +,m) =3N*35+?I '-#.@  * :k= *6$>+D68>K$ J 8 (A:KF$)/ ?)L(<(9L N&JM'07'DK4! +'  NA #6B +MA "@#@24&CqO =#?3;18;&%11=')<, & %' :  1#!61<9+8* 5 -  ( ?#=$!1!*?N 0 6%O ).6#%/)?#EF 8-64EH<1 F@-B. EE523. 5=N2JH"4J F4& / )!DM>965,"", L8* &22G<(0&!:'9M #< +A 7;31o1LLL " D.60IF3 C*E "?N')@>C"* +!" 5 .1&!"&648 8?* +)}'3 +&G'-%&  1 ;0A < +D5 !) 1% .#%J'E-%+98=%2, %=L +.2*EE%,O F :K#P,%-7BC  +&<#/ ++' 4377(<4 !( C+?#4"EKJ:N) +!-  0; $*2I-I)&@ < :9%;D0*5 N: :8 %A + @=2( +5 : +( + +=)   + +(6 0 2 10 @ $J6-%M4#/3 +*!) 4< L."-41 +=<% g B0;::)=,# +A >%L& 2$+$J?;/66C,?{# A>6@333HLFP): @*K#> ?,;56 <: %E -'N1! E -9? + 4.*)'.=-D&A=',9 +" +< @ '= 4a? 9 2  9+!>68>*"+%!! +;:" F*&"(% ;-5 2 /   0 ! . +6# $&IH  &'($1 +3 +#I =55'30206'5"?F$  , 4F"K:C) 4 1 M/m)k8L.K22 *!/*+!8= 6FG3HG OL%%AN +; 6M>:  @,,!J% 9!."<( +C"J06? ) +?P +M92 +( )< +0+D% E7 )+= C'H,! *//,%F#95:E-CJB 9J . /A & :3,G ?I'B 51 /;A032,$ I$-7#K=0I8%HO3!AN@B1 +=9HI 5/1$5-:N&2 N 7I-M#CM58(88FFE9 +<K?GY/<F52&C7F=?6CNF1O="-"0, AE& GCu >$- +INI0J==&$# +; +72< +.74';J,PB =!$5(/;0 +*>(DB!BKO"LAG%G :9H$25 K"" ;*"('0@=6C" > 13*/'37 *M% =F(N8:CK/(E&*H/%FG954) 92FI,'4I2'8KO$(%*# 1#?% +>/7,80IHIGI,2..*N+4A'!K ' $J$J.G +? $6GHN 5> <?AJ< *F c?DC%OGKH$-)9(8M,01O= + O;.#$01>A C1 G/ =% +" +J'7>0.-  I%A  #)<,C'#$<' $*,/:#I70$O)  6 +#E74>7#OD5>&61/,*;%'C"1A  ?,+$$E9 II(H@37.)$)3 +=6"// '2'$+U*5$I/0 (;6 '4;(&   14A<!? :+/ +*! ;:N;<7 C7L9F.5< )"6'BN-76$)"F #- ]A "7O5>G(5FN2E.M3!7 +65B #. ,E +475+L $2A-F(#"# #?2L"!: D7 +: OP ->/#<1)Bm!K= I*A%$1I)2;$A,@- ( ;)P09#7KOocCL&I=FME1y'F>5K:DD8L;A "@ o%9" DH_!=:E7 1 3 AFL"NIBDLD<? P58I)-7)'C9-1*5&%K&< +6M,Jy)"%!#1 wK+:F3 D%OB1.B=/-@ +D %%(7 +E&* .8 88& :A  0-(21&"%( (U 79J + 0  2!3)" D6 K! 3:> +*1 &;! ;.5E-8.+')( +*! +#5/ B  ?(  !G5 + H +,m) =3N*35+?I '-#.@  * :k= *6$>+D68>K$ J 8 (A:KF$)/ ?)L(<(9L N&JM'07'DK4! +'  NA #6B +MA "@#@24&CqO =#?3;18;&%11=')<, & %' :  1#!61<9+8* 5 -  ( ?#=$!1!*?N 0 6%O ).6#%/)?#EF 8-64EH<1 F@-B. EE523. 5=N2JH"4J F4& / )!DM>965,"", L8* &22G<(0&!:'9M #< +A 7;31o1LLL " D.60IF3 C*E "?N')@>C"* +!" 5 .1&!"&648 8?* +)}'3 +&G'-%&  1 ;0A < +D5 !) 1% .#%J'E-%+98=%2, %=L +.2*EE%,O F :K#P,%-7BC  +&<#/ ++' 4377(<4 !( C+?#4"EKJ:N) +!-  0; $*2I-I)&@ < :9%;D0*5 N: :8 %A + @=2( +5 : +( + +=)   + +(6 0 2 10 @ $J6-%M4#/3 +*!) 4< L."-41 +=<% g B0;::)=,# +A >%L& 2$+$J?;/66C,?{# A>6@333HLFP): @*K#> ?,;56 <: %E -'N1! E -9? + 4.*)'.=-D&A=',9 +" +< @ '= 4a? 9 2  9+!>68>*"+%!! +;:" F*&"(% ;-5 2 /   0 ! . +6# $&IH  &'($1 +3 +#I =55'30206'5"?F$  , 4F"K:C) 4 1 M/m)k8L.K22 *!/*+!8= 6FG3HG OL%%AN +; 6M>:  @,,!J% 9!."<( +C"J06? ) +?P +M92 +( )< +0+D% E7 )+= C'H,! *//,%F#95:E-CJB 9J . /A & :3,G ?I'B 51 /;A032,$ I$-7#K=0I8%HO3!AN@B1 +=9HI 5/1$5-:N&2 N 7I-M#CM58(88FFE9 +<K?GY/<F52&C7F=?6CNF1O="-"0, AE& GCu >$- +INI0J==&$# +; +72< +.74';J,PB =!$5(/;0 +*>(DB!BKO"LAG%G :9H$25 K"" ;*"('0@=6C" > 13*/'37 *M% =F(N8:CK/(E&*H/%FG954) 92FI,'4I2'8KO$(%*# 1#?% +>/7,80IHIGI,2..*N+4A'!K ' $J$J.G +? $6GHN 5> <?AJ< *F c?DC%OGKH$-)9(8M,01O= + O;.#$01>A C1 G/ =% +" +J'7>0.-  I%A  #)<,C'#$<' $*,/:#I70$O)  6 +#E74>7#OD5>&61/,*;%'C"1A  ?,+$$E9 II(H@37.)$)3 +=6"// '2'$+U*5$I/0 (;6 '4;(&   14A<!? :+/ +*! ;:N;<7 C7L9F.5< )"6'BN-76$)"F #- ]A "7O5>G(5FN2E.M3!7 +65B #. ,E +475+L $2A-F(#"# #?2L"!: D7 +: OP ->/#<1)Bm!K= I*A%$1I)2;$A,@- ( ;)P09#7KOocCL&I=FME1y'F>5K:DD8L;A "@ o%9" DH_!=:E7 1 3 AFL"NIBDLD<? P58I)-7)'C9-1*5&%K&< +6M,Jy)"%!#1 wK+:F3 D%OB1.B=/-@ +D %%(7 +E&* .8 88& :A  0-(21&"%( (U 79J + 0  2!3)" D6 K! 3:> +*1 &;! ;.5E-8.+')( +*! +#5/ B  ?(  !G5 + H +,m) =3N*35+?I '-#.@  * :k= *6$>+D68>K$ J 8 (A:KF$)/ ?)L(<(9L N&JM'07'DK4! +'  NA #6B +MA "@#@24&CqO =#?3;18;&%11=')<, & %' :  1#!61<9+8* 5 -  ( ?#=$!1!*?N 0 6%O ).6#%/)?#EF 8-64EH<1 F@-B. EE523. 5=N2JH"4J F4& / )!DM>965,"", L8* &22G<(0&!:'9M #< +A 7;31o1LLL " D.60IF3 C*E "?N')@>C"* +!" 5 .1&!"&648 8?* +)}'3 +&G'-%&  1 ;0A < +D5 !) 1% .#%J'E-%+98=%2, %=L +.2*EE%,O F :K#P,%-7BC  +&<#/ ++' 4377(<4 !( C+?#4"EKJ:N) +!-  0; $*2I-I)&@ < :9%;D0*5 N: :8 %A + @=2( +5 : +( + +=)   + +(6 0 2 10 @ $J6-%M4#/3 +*!) 4< L."-41 +=<% g B0;::)=,# +A >%L& 2$+$J?;/66C,?{# A>6@333HLFP): @*K#> ?,;56 <: %E -'N1! E -9? + 4.*)'.-D&A=',9 +" +< @ '= 4a? 9 2  9+!>68>*"+%!! +;:" F*&"(% ;-5 2 /   0 ! . +6# $&IH  &'($1 +3 +#I =55'30206'5"?F$  , 4F"K:C) 4 1 M/m)k8L.K22 *!/*+!8= 6FG3HG OL%%AN +; 6M>:  @,,!J% 9!."<( +C"J06? ) +?P +M92 +( )< +0+D% E7 )+= C'H,! *//,%F#95:E-CJB 9J . /A & :3, ?I'B 51 /;A032,$ I$-7#K=0I8%HO3!AN@B1 +=9HI 5/1$5-:N&2 N 7I-M#CM58(88FFE9 +<K?GY/<F52&C7F=?6CNF1O="-"0, AE& GCu >$- +INI0J==&$# +; +72< +.74';J,PB =!$5(/;0 +*>(DB!BKO"LAG%G :9H$25 K"" ;*"('0@=6C" > 13*/'37 *M% =F(N8:CK/(E&*H/%FG954) 92FI,'4I2'8KO$(%*# 1#?% +>/7,80IHIGI,2..*N+4A'!K ' $J$J.G +? $6GHN 5> <?AJ< *F c?DC%OGKH$-)9(8M,01O= + O;.#$01>A C1 G/ =% +" +J'7>0.-  I%A  #)<,C'#$<' $*,/:#I70$O)  6 +#E74>7#OD5>&61/,*;%'C"1A  ?,+$$E9 II(H@37.)$)3 +=6"// '2'$+U*5$/0 (;6 '4;(&    14A<!? :+@ / +*! ;:N;<7 C7L9F.5< )"6'BN-76)"F #-]A "7O>G(FN2E.M3!7 +65B #.) ,E +4D7!5+L $2A-F(#"# #?2OL"!: +: OP ->/#<1)Bm= I*A%$1I)2;$A,@- ( ;)P09#7KOocCL&I=FME1y'F>5+K:DD8L;A "@ o%9" DH +9"=_!=:E7 1 3FL"N8IBDLD<? P58I)-7)/'C8?9-1*5&%K& +6PM,9Jy)"%!#1Ig wKA+:F3 D%O1B1.BIB=/-@ +DG %+%(7 +E&* .8) 828& :A  0-(21&"%( (U 79J + 0  2!3)"&$ D6 K! 3:> +*1 &;! ;.5E-8.+')( +*! +#5/ B ?(O  !G5 + H +,m) =3N*35+?I '-+ #.@  * :k= *6$>+D68>K$ J 8 <(A:KF$ )/ 7 ?)L(<(9L9 N&J M'07'DK4! +  NA # 6B +MA "@#@24&CqO =#:?3;181;E +&%&1 1=')<, & %' :  1#!61<9+E8*2 L 5 -  ( ?#=$!1!*?N 0 6%O ).6#%3/)?#EFD 8-64EPH<1 @-.EE535=N'2H!"4JL F& / )%!D% "2M>96H5,"", L8* &22<3((0&!J:'9M #<& +A 7;3)1o1LLL " D.60IF3 C*E 9"?N')@>C"'* +!" 5 .1&!"&648 8?* +)}'3 +&G'-%&  1 ;0A < +D5 !)< 1% .#%JK'E-%+98=%2, %=L +.2*EE%,O2 F :EK#PP,%-7BC +&#/ ++' 4(< !( C+?#4"EKJ:N) +!-  0;B $*-I)&@ < :9%;D0*5 LNN: :8 %A + @=2( +5 : +( + +=)   + (6 0 52 10 @ $5J6-%44##/3 +*!) 4< ."-4A1, +=<% g B0;:A:)=,# +A >%L& 2$+$J;/66C ,?{ +< 6# 7 A>6@333H'LFP): @*K#6> O?,;56 <: %E -'N1F!E -9? + 4.*)'.=-D&A='," +< @ '= 4 a? 9 2  9+!>68>*"+%!! +;:" F*&"(% ;-5 /   0 2! ". +6# $&IH  &'($1 +3 +#I =55'30206'5"?F$  , 4F"K:C 4 1 M/m)k8L.K22 *!/*+!8= 6FG3HG OL%%AN +; 6M>:  @,,!J% 9!%."<#*(/( +C"J06? ) +?P +M92 +( )< +0+D% E7 )+= C'H,! *//?,%F#9NE5:E-CJB8 9J# .$ /A & :3,< ?I'B 51 /;A032,$ I$-7#K=0I8%i+HO3!AN@B1 +=9HI 5/1,$5-:N&2 N 7I-M#CM58(88FFE9A +<K?GY/<F52&C7F=?,6CNF1O="-0, E& GCu >+$- +NI0J=&$# +;H +72 < +.74';J,P>B =!$5(/; +*(DB#!8BKO%3";LAG$%0G :9H-$25 K"" ;!*"('0@=6C" > 13*/'37 2*M% =F(N8:CK/(EL2&*H+/%F0G954) 92. +I,<'4<>I2/'8KO$(,)%*#  + 1#?% +>/7,8)0 OIHIGI,2..*N+4A'!K ' $JJ.G +?+&> $6GHN 5> L<<?AJ< *F c?DC%OGKH$ $-8.)9M,01 + O.D$021>A 1G/ =% +"'7>0.-  I%A + #)< +7C'#$"*<' $*,?1/7$)6 +#4>7#OD5>&61/,*;%'C"1A  ?,+$ $E9 II(H@=37.)$)3 +=6"// '2'$+U*5$!/< 0 (6;! '( +04D;(' +&   1 9/4JA={6 P ; D.  ,M -# ]ACYaG "K C7$O5>GL(52FINA2E.M36!7 +650;># + L+)08 , E +54D7!$ +L'A2 +I-F(#"# #?=42O(LE "!:: D7 + >OP - ?#/<1)Bm!K= - I=*2A% )$1I);$@A,I; (8@)0P#79K#OoGc/1F5'OCIL&=FMEy1'F>05+KD: D8;L A@" o%9" DH"!9)_ *: +  5F",+2*"B9D4F*#= B01 E)) / 4'8** %&$  +6MP,9Jy)"%!#1 wIgD"%+3F & +1O G.B'K.[.B?= =-@ +(+*!!DG% +&"%Ns'7 +E +7&D !8) 82 8 A :)( 0-219F"&.%(J (U  7#$)9D + +60 0 2 ! ?3)" E!@> 8&$" D ?,  5 +:3>8; & +*:1 + Ko,.! 3;5E-1.# +')(! +*F( +#5/ B ?O/ (A !?$EG , +H2 E) mN=3*35+?I ,'-#+ @(.)* * k*/ ? := 8$6+ 2$*#6+.K J8 ;-#;<F(KA: 0/) 7 ?/)C L((0'=-)'  (<,> & %. : +I1 1#!569<N+E8*2 L6 5  -2#3 (  ?%#1=$!?!*N  +0B+ +6%>O )H#6.#%/3?) EO FDO-8E6PH4HP<1 F@*-7B. E;E> 5#-23. 5=N'2CKJAH!"4J L/F4&/  )%!D0" C% 2M9>6. .H5," ", &L8*& 22G<3(!( 0&(J: '9< 9?"5N'@)C>" /'5* +! " .41'&!"&6 88?* +}')3B& +&'G-%&1 E !- ;A 0+< + #D5)#  !# < % 1E,! .5 #%JK'#'.E-6 .%+09;38-&=%L2;9 , %= +.*2,+0?%O2 F B:E0K#PP,%- 7# BC G& +<#/ ++4'' 3(77 <4 !(C5+# "EJ::N+9O) +! ;B-I $2*I&C-"# G& + <A + :"'9%;D0*5 LN NN: :( 8 %A + =@=M2 +( +5 : + +=)  + -(+ 620 5 10 @+ $56J-%8 +"%"44!, # +#)" /+* %3 +$*!), 4< L.B( 4 9717 +,=;%: +%L;> "? &5;0+$J)?O;/6 C4( C ,?{ +  #7?5,6 <:D @% %-'-1 6F. E K-? +9 94 . ! , *)' .=;-D&=3IA=- 'L, 9 + " +< @  '=4 (a?. 4< +; 29  9+>!68*">+%!!:: " F: +,*&"(%/- ; 55/ 32 0 / +/ @ 5 =1 + 2@ @! !. +": 6# $&HI & '($81 +3 +#&I $=55?G3'60H0256'"?I,$+$ F.{ , 4"(5#'0) )!% 4I 1 M/Cm)k? 8.22' *!G/* +>+!8= 6F3D3 G .%'+ +C66M!: '>"5 @,,!+9J% -%.2"<#*( +(/C"! 0J 6 +=;?P +9M +(;2 )< +- /0+D E% 7+) C=7,**,/K?/% 9!B1 NE5:EC-JB98 !J# .$ A/ , /  6$#<'" 1<1H&89J*#$ J44+!@! +!9K!7A 0F+C;#&&.+ 7:w;&7-JFQ $7$OG)-"%%"0}4% 3KA (97 #'0@$3N,@I$ )#/0 /F%i*3! K- @-$152+=71 )/1,$-:&14 . 37%IE#*0CH 5!("69 Fk>$- +1Y?G/-& 5)7 %#,#8 ,1K'#O=" , "0EA& GCu >+$- +INI%0'=GJ# $P<=#&$ +;H +72 < +. 4' 0;8,#-!0BOBME&- 3( /; I0 +H!/*(B# L =.!$H?8.)B K6O%3 ;K AGA %KMI0G (97H-$25 .B") E! *E("'0@=C6 " >1 /3*+'3 /%M 1=F%;8N:/(EL &2-#5DEH.+F%0$0G954)M 9.+12. +FI,<'NBP4<>8I2/'8OK$%/ !(,9)%* #  +1#?%.HB40 5 +/>7,8)0O I +0/*G C +6.,+#( &A!)%2)  J.G +4 H6GN5 ?> L*O<$+0P&21A> & C16 GNG/D< =%" +J +;#7'>.0-  (8. +?9A-!0 +/:*@)GH J!I%A +  #O)<7 +,'C#4$<"* '/$*,?1*4 #:7I$0O) M ? + 6E747>#MOD5&>41/6,*;@% "'A 1HA  ?JI, +/+$ L$ 9  )(!DE&+U3=)7.$)3= +"6/4/ ''$25!*I$ \ No newline at end of file diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.nrm b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.nrm new file mode 100644 index 000000000..f75600139 --- /dev/null +++ b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.nrm @@ -0,0 +1 @@ +NRM|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||vvvvv|vw|yvvyyv|v|||v|vvy|vvyvvvvv|v||vvvvvv|vvvvvvyvv|v|vyv|vvvv|vv|vvvvvvvvvv|||yv|v||vv|v|vvvwvvvy|vv|vvvvvvvvv|vv|vvvvv|vvv||vvvvvvyyvvvv|vvvv|vvvvv|vvv|vv|v|v|v||||vvvvvvvv|v|vv|vvv|vvv||vvvy||vw||yvyvvvvvvvvvvvvv||vvv||v|vvvv|yyv||vvyvvvvvvvvyv||vvyvv|vv|vvvv|vvvvvv|vyvvv||v|vvvvvv|||y|v|vvvvv|||v|yvv|v|wvvy|vvvvvv|||yv|vvyvv|vv|vvvv|vv|vvvv||w|vv|vvyv|vyvvvvvvvvvvvv|vv||vvvvvyv|xvv|vv|yv|vv|vvvvvv|vvvyvyv|vv|vvvvvvvv|v|vvv|v|yvvv|vvvvvvv|vvvv||yvvvvvvvwvw||v|y|vyv||vvvvvvvvyv|||vv|vvvvvyy|vvvvv|vvvvvv|vv|v|yv|vvvwvv|v|vvv|vvv|vvvvvvv|vyvvvvvwv|vyvvv||v|vv|vvvvvvvvv|wvvv|vvvvv||v|vvvvvvvvvyv|v||wvvvvv|vyvvv|||vv||vvvvwvvvvvvvv||vvvvwvvvvvv|yv|vv|vv|vv|vvvvyvvvv|vvvyyyvvv|vv|vvvvvv||vvvv|vvv|v|||v|v||vv|vvvvvvvv||vv|vvv|vvvvvvy|vvv|vyvvvv||v||v|vvwvv||vv|v|v|vvyvv|vv||vvv||vvvv||vvv||||vwvvvvv|vvvvvvvv|v|v|||vvvyvvv|vvvv|||vv|vvvvvwvv|vvwv|v|v|vvyyvvvvv|v|v|||vyvv|vvv|vwvwvvvv|v|v|vvvvvv||vvvyv|vvvv|vvvvvvv|||vvvvvy|yv|v||vvv|vvvv||vv|v||vvv|||v|vvvv||vv|vvvvv|vvvvvv|vv|vvvv|||vvvv|vvvyvv||vvvv||v|vvvvvvvy|y|vv||vvv|v|v|v|yvvvvvvvv|||v||vvv||v||vv|vvvv|||v||v||v|vvvyv|vvvvwvv|||v|vv||vv|vvvvvvvv||v|vvvv|yvvvvv|yvvvy|v|vvvv|vvvvvvvv|||vvvvvvvyv|vvvvvv||vvvvvvvvvvvvvvvvv|vvyv|vwwvvv|vvvvvvyvv|v|vvvy|||vvvv||vwvwv|vvvvvvyyy|vvwvvvvvv|vvy|w|vvvvvvvvv||vvv|vv||vv|vvyv|v||vvyvv|v|v|vvvwvvvvyv|vvvxvvvv|vv|vv|vvv|vvv||vvv|yvvwvvwvvvvvv|vv|vwvvvvvvvvv||vvv|vy||v||v|vyvvvvvvvwvy|vvwv|v||vvvv|vvv|v||vvyvv|v|v|v||v|vvv||vvvv|yvv|vywwvvvvvvwvvvvvv||v|vvvv|v|v|vvv|yvv|v|v|vvvvv|y|||vvvvvvvvvvvvvvvvvy|yy|vvvvvyvvvvvvvvvvvv|y||v|vvvvvvvvvvvwv|vvv|vvv|vvvvvv|v||vvv|vvvv|y|vvyvvvvy|vvvvv||vvvvv|vvvvvvvy||vvvv|vvvyvvv|vvyv|yv|v|vwv|v|vvvv|v|vvvv||v|vv|vvvv||vvvvvwvvv|v|vvv||vv|vv|vvvyvv|wvvvv|||||vvvv|yv|vv||vvv|vvv|yvvyvv|v|vvvvvvvvvvyvvvvvyvv||vvv|vvy|vvv|vvwv|vvvvvv|vvvvvvv|v|vvvv|vvvvv||yvvvvvvvvv|y||vvvvvvvvvv|vv|vvv|||vv|vwyvvvv|wvvv|vvv|vwvy|v|w|v|vvyv|v|vwyv|yvv|v|vvvvvvw||v||vv|vvv|vvvvvvvvvwvvvv||||v|||||v|yv|vvv|vv|yv|v|vvvv||vvyvvv|||vvvv|v|vvy|v|vwvv|v|yv|vv||v|v|y|vvvv|v|v|v|v|vvvv|vvvvy|vv||y|vw||vvw|v|vvvvv|vvwv|vv|vy|vvvvvvvvvv|yvwv||vv|vvvv|vvvvwv||v|vy|v|v|vvv|vvv|vvvv||y|vvvv|vvv|vv|v|||vvvvv|wy|vvvvvv||vvvyvvvvvy||v||vv|||v||vvvvyvvvvvvvvwv|v||yv||vvvv|v||vvvy|vv||vyyvyvv||vvv|vvvv|vvv|vvvvv|v|v|vv||vvvv|vvv|vvvvvvvyv|||vvvy|vvvvy|v|vvv||vyvvvvvyvvvv|vwvvw||vvvvvvvvvyvwvv|v|vvvvvv|vv||y|vv||vvv|y||vvv||||vvvy|vvv|vwyv|yvvvv|y|vv|||vvvvv|vvyvvv|v|||vvvvvvvvvvvvvvvv|vyvvvvv|v|vvvvv|v|vvvvvvvvvvvv|yw|wyvvv||vv|||vv||vyvv|v|vv|vv|vvvyvvvvvvvyvv|vvvvvvvvvvw|v||v||v|vvv|vvv||vvv|vvv|vvvv|vyvyvvyvvv|vvvvvvv||vvvvv|vv|vvvvvv|v||vvvvvvv||vwvvvvvvvvv|vvvyv|vv|vv||vvvv|v|v|yv|vvvwvyvv|vvvvv|w||vvyvv|vy|vvyvyvv|vvvvy|wv|vyyvvvv|v|vvy|vvv|yy|vv|vv||wvv|vvvvvvvv|||yvv||vv|v|vvy|vvvvvvvv||vvvvvv|vvv|vvv|v|vvvvv|vvv|vvv||w|vv|v||yv|v|v|vv|yvvvvv|vyyvvvv|vvyvvv|vvw|vv|vwyvy|vv|vvvvvvwvvv|yvvvvvvv|vvyvvvvvvvv|vvvwv|vv|yvvvvvvwvyv||vvvvv|y||||v|vvvvvvvvvv||yv|vv|||||||vv|vvv|||vvvvvv|vvvvvv|yvvvvvv|vvvvvvvvvyvyv||v|v|v|v|vvvv|vv||||v|v||vwvvv|v|v|||vv|vvvv|||v|vvyv|||vyvvvvvyv|vv||vvvvyvvvv||||v|vy||v|v|vv|||vvvvvvv|vvv|vvv||vvwvvvv||yv|vvv||y|v|vvv|vvvv|vvvvvvv||vv|vvv||v|vyvyv|vwv|v|v|vv|vv|yvvvv|v|vvv|vv|vv|vvyvvvvvvvvv|vyvyyvvvv|vvvvvv||vvv|vvvv||v||wvvvvvvvvvvvvvvvvvvv|vy|vyv|y|wvyw|||vw|vvv|vvvvv||vvyvv|vv|vv|||vvvvy|vv||v|vv||v||vvw|vvv|vvvvv|||vvvvvv|vv|v|vv||v||vvwvvvvvvvvv|vvvvvv|yv||vv|vvv|v|v||wvw|vw|vv|vvvv|vv|yvvvvvvvvv|vvv|vvvvvvvwvvvv|vv||v||wvvvvvv|vvvvvvvvv|y|vv|vvvvv|vvwv||v|vv|vvvv|v|vvvvvv|vyv|v|vvvvvvyv|vvy|vv|vvvvvvv|vvvv|||v||vvvvvvvvv|vvvvvvvvvwvv|v|yyw|vv|wvv|v|yvvx|vvy|vvvvyvvwvvvyvvvvvv|vvvvvvvvvvv|v|v||v|vvvyvvvvvv|||vvyw|y|v|v|v||vv|vv|v|vvvyvyvvvv|vvvv|yyv|vvvvvyvvvvvv|vvvv|vvyvvvvvvvvvvv|yvvvy|vvvv|yv|||yw|v|vv|vv|vwvyvvvvvv|v|vvvyvv||yvvvvv|vvvvvvvvwvvvv|vvvvv|vvvwyvvvvv|v|yvvvvvvvvv|v||v|vv||w||vvvv|v||||vv|v||vv|vv|v||v|v|vvv|vvvvv||v||vvvv|vvvv||v|v|vvvvvyvvyvvvv|||v|vvvvvvwv|vvy|vvvvwvvv|v|vvvyvvvvvvvvvy|y|vvwwyvvvvv|v||vvwvvvv|vvvvvvvvv|vvwvv|v|vvvv|vvvvv|vvvvv|vvyvvvvvvvyvvvyvvv|vv|v|vvvvvvvv|vvv|vvvv|vvvvvyv|wvvvvvv|vvv|yvvvvv|||v|vvv|vvvyyv||vvvvvvvvv|yvvv|vv||vvvvvv|w|vvvvv|y|v|vvvvw|vvvvvvvvvv|v|vvv||v|vv|vvvyvvyv|v||vvyvvvv|vvvvvv||v|vv|vwv|vv|y|vvvv|v|vw||v|vyvy|v|vyvvvvvvv|vvvv||vvvvvyvvvvv|vv|y||v||vvvvv|v|ywvvv|vvv|v|vvvwvv|vvv|vvvvvy|vyvvvvv|||v|vv|y|v|v|vvvv|vy||v|||vv|||vv|vvvvvvvvvvvv|vv|vvvvvwvvvvv|v||vvvvvvv|vvvv|||vv|||vvvvvvv||v|vwvv|vwv||vvy||vy||||vv|ywvvvv|||vvwv||v||vyvyvvvv|vvvv|v||vv|wvvv|v|vvvv|vyvvvvwvvvyvy||||v|yvv|vyv||yvvvvv|vvv|v|vvv||vvvvv|vvv|vvvvvwvv|y|vvvvvvv|vv|vvvvwvvvvvvvvvvv|vvvyvvv|vwv|vvv|yw|vv|yyv|yvvvvvvv|y|vvvvv|vvvv|vyvy||||v|vwv|yvv|vvvvvwxvv||vvw|v|vvv|vvvv|v|vv|vvvvvvvv||||vv|vvv|v|vy|vvvv|vvvvvvvvv|v|vvvwvvv|y|vvvvvyvvvvv|wyyvvvv|v|vvvvvv||||vvv|||vvvvvvvv|vwvwvy|vwv|yvy|v|yvvvvvv|v|vvvvvvvvv|vvvv|wvvvvvv|vvvvvvvv|vvv|v|yvvvv|vw|v||vvyv|vv|vvvvv|y|wy|v|vvvv|||vvvvyvvvvv|vvv|vvvv|vv|vv||v|||||vv|vvvv|vvv|w|v|vvv|vvvvvv|vvvv|vvvvvvvvv|v|yyv|vv||vvv|w|y|v|y|vvv|vvvvvvvv|vvvvvwvvv|vvyvvv|yv|v|vvv|vvv|v|v|v|v|||v|vv||v||vy|vvvv|||vvvyvvvvyv|vvvv|vvvvvv|||vvvvvvvvvv||vvvv|vv|vvvv|vv|yv|vvvvvvvvvy|vv|vy|vvvv|v|vvvvw||vv||y|wv||v|vvvvv|y||v|vvvvv|vyyyvyvv||vv|v|v|v|vv|vvv|vv|vyv|v|vyyvv|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| \ No newline at end of file diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.prx b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.prx new file mode 100644 index 000000000..37b83ae77 Binary files /dev/null and b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.prx differ diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.tii b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.tii new file mode 100644 index 000000000..a21e151e8 Binary files /dev/null and b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.tii differ diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.tis b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.tis new file mode 100644 index 000000000..cec602b70 Binary files /dev/null and b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/_2.tis differ diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/segments.gen b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/segments.gen new file mode 100644 index 000000000..e9fa6008b Binary files /dev/null and b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/segments.gen differ diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/segments_3 b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/segments_3 new file mode 100644 index 000000000..cb248d091 Binary files /dev/null and b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/segments_3 differ diff --git a/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/write.lock b/.recommenders/index/http___download_eclipse_org_recommenders_models_luna_/write.lock new file mode 100644 index 000000000..e69de29bb diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/_remote.repositories b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/_remote.repositories new file mode 100644 index 000000000..9f96774a8 --- /dev/null +++ b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/_remote.repositories @@ -0,0 +1,3 @@ +#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice. +#Sat Jan 17 18:37:01 CET 2015 +jre-1.0.0-20140604.182326-1-call.zip>models= diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/jre-1.0.0-20140604.182326-1-call.zip b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/jre-1.0.0-20140604.182326-1-call.zip new file mode 100644 index 000000000..1723aaa38 Binary files /dev/null and b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/jre-1.0.0-20140604.182326-1-call.zip differ diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/maven-metadata-models.xml b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/maven-metadata-models.xml new file mode 100644 index 000000000..df7ebb998 --- /dev/null +++ b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/maven-metadata-models.xml @@ -0,0 +1,45 @@ + + + jre + jre + 1.0.0-SNAPSHOT + + + 20140604.182659 + 5 + + 20140604182659 + + + ovrm + zip + 1.0.0-20140604.182659-5 + 20140604182659 + + + ovrp + zip + 1.0.0-20140604.182646-4 + 20140604182646 + + + ovrd + zip + 1.0.0-20140604.182632-3 + 20140604182632 + + + selfc + zip + 1.0.0-20140604.182613-2 + 20140604182613 + + + call + zip + 1.0.0-20140604.182326-1 + 20140604182326 + + + + diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/resolver-status.properties b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/resolver-status.properties new file mode 100644 index 000000000..bad1f2eb5 --- /dev/null +++ b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/jre/jre/1.0.0-SNAPSHOT/resolver-status.properties @@ -0,0 +1,3 @@ +#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice. +#Sat Jan 17 23:08:37 CET 2015 +maven-metadata-models.xml.lastUpdated=1421532517658 diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/_remote.repositories b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/_remote.repositories new file mode 100644 index 000000000..bf0d1d36b --- /dev/null +++ b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/_remote.repositories @@ -0,0 +1,3 @@ +#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice. +#Sat Jan 17 18:35:31 CET 2015 +index-0.0.0-20140605.014212-1.zip>models= diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/index-0.0.0-20140605.014212-1.zip b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/index-0.0.0-20140605.014212-1.zip new file mode 100644 index 000000000..1bd4917fc Binary files /dev/null and b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/index-0.0.0-20140605.014212-1.zip differ diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/maven-metadata-models.xml b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/maven-metadata-models.xml new file mode 100644 index 000000000..9f95b90cf --- /dev/null +++ b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/maven-metadata-models.xml @@ -0,0 +1,20 @@ + + + org.eclipse.recommenders + index + 0.0.0-SNAPSHOT + + + 20140605.014212 + 1 + + 20140605014212 + + + zip + 0.0.0-20140605.014212-1 + 20140605014212 + + + + diff --git a/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/resolver-status.properties b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/resolver-status.properties new file mode 100644 index 000000000..4f70d0b75 --- /dev/null +++ b/.recommenders/repository/http___download_eclipse_org_recommenders_models_luna_/org/eclipse/recommenders/index/0.0.0-SNAPSHOT/resolver-status.properties @@ -0,0 +1,3 @@ +#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice. +#Sat Jan 17 21:52:02 CET 2015 +maven-metadata-models.xml.lastUpdated=1421527922980 diff --git a/4143760-4167562/.gitignore b/4143760-4167562/.gitignore new file mode 100644 index 000000000..e00cc298c --- /dev/null +++ b/4143760-4167562/.gitignore @@ -0,0 +1,2 @@ +assignment1.html +assignment2.html diff --git a/4143760-4167562/assignment1.md b/4143760-4167562/assignment1.md new file mode 100644 index 000000000..139eb1197 --- /dev/null +++ b/4143760-4167562/assignment1.md @@ -0,0 +1,131 @@ +# IN4189 Software Reengineering - Reverse Engineering and Detection Report +By Martijn den Hoedt - 4143760, Anton Bouter - 4167562 + +## Introduction +[Alitheia Core](http://www.sqo-oss.org/) is a platform for automatic evaluation of software that is designed to simplify software engineering research. It can produce a broad picture of the quality of an Open Source project by analysing both hard project artifacts (source code) and soft project artifacts (mailing list, bug tracker entries). +We performed a software analysis on the Alitheia Core to find shortcoming such as design flaws and code smells. The first chapter of this report will describe the system and its structure, while the second chapter is dedicated to pinpointing shortcomings of the Alitheia Core. The focus is on detecting violations of the S.O.L.I.D. object-oriented design principles. These include the following five principles: + + * Single responsibility principle + * Open/closed principle + * Liskov substitution principle + * Interface segregation principle + * Dependency inversion principle + +To simplify the detection procedure, the following software evaluation tools have been used: + + * [SonarQube](http://www.sonarqube.org/) + - Open platform to manage code quality, which covers criteria such as complexity, potential bugs, duplications, architecture & design. + * [inCode](https://www.intooitus.com/products/incode) + - Detects design flaws automatically and helps you resolve them. + * [X-Ray](http://xray.inf.usi.ch/xray.php) + - Software visualization tool that provides e.g. a system complexity form and a class and package dependency view. + * [UMLGraph](http://www.umlgraph.org/) + - Allows automatic drawing of UML class and sequence diagrams. + +## Initial Understanding and Detailed Model Capture + +To find certain shortcomings in the design of the system, we must first understand it. This chapter is dedicated to the process of understanding the model and displaying its properties clearly by using reverse engineering tools to create models. + +### Main features +What makes Alitheia Core stand out is that it not only evaluates the final product, but also the developing process. This is done by evaluating the so called soft project artifacts, such as mailing lists and bug tracker entries, which leads to a broader picture of the quality of the software project. The different aspects of that are analysed are aggregated through a [multilevel quality model](http://www.dmst.aueb.gr/dds/pubs/conf/2008-OSS-qmodel/html/SGSS08.htm) [[1]](http://www.sqo-oss.org/about). + +The Alitheia Core can also be used to automate and parallellize the execution of custom experiments. Studies on empirical data can easily be performed and the Alitheia Core can also be extended to produce any measurement you are interested in. + +### Important source code entities + +The main class of the Alitheia Core is `AlitheiaCore`, in the `eu.sqooss.core` package, which initializes the core components of the system and provides a static instance of AlitheiaCore. All services of the `AlitheiaCore` class can then be called by using the methods defined in the `AlitheiaCoreService` interface, which is present in the same package as the `AlitheiaCore` class. These services are implemented in the `eu.sqooss.service` package and divided into a large number of packages, such as `admin`, `db`, `scheduler`, `updater` and `util`. Each package can also contain classes that the service depends on. + +### Impression of design and implementation + +We think that the Alitheia Core system looks well structured, because the classes seem to be properly distributed among packages with names that provide useful information. The core is properly isolated from the classes that provide services. Many classes also contain javadoc comments and additional comments to clarify functions when needed. However, the number of tests is very limited. We therefore have a relatively good first impression of the design and implementation of the system. Although the test suite should be expanded, we think reengineering the Alitheia Core is feasible, because the javadoc documentation makes it much easier. + +### Exceptional entities + +To study the exceptional entities, such as packages, classes and methods, a UML diagram can be very useful. Such a diagram shows which classes are related and in what way. A UML diagram can also be reverse engineered by a tool such as [UMLGraph](http://www.umlgraph.org/). The diagram in figure 1 displays all database objects and was created by Georgios Gousios using the UMLGraph tool on the Alitheia Core system [[2]](http://www.umlgraph.org/doc/ceg-er.html). From this diagram we can clearly see that many classes depend on the StoredProject class. The same goes for the Metric, ProjectVersion and Bug classes. All of these classes are part of the eu.sqooss.service.db package, which definitely is an exceptional entity, because it contains a very large number of classes. + +
+ +*Figure 1: UML Diagram of the concrete database entities of Alitheia Core*
+ +### Inheritance structure + +As described earlier, the system is composed of many service interfaces that extend the `AlitheiaCoreService` interface, such as `DBService`, `AdminService`, `LogManager` and `RestService`. The implementations of all these classes must also implement the basic functions of the `AlitheiaCoreService` class. + +The inheritance structure is also displayed in Figure 2, which was created using X-Ray. A dark blue block is a concrete class, a light blue block is an abstract class and a white block is an interface. The length of each block denotes its number of lines of code, while the width denotes the number of methods. We can clearly see the structure of the database in the middle, with a large number of concrete classes that extend the abstract class DAObject. + +
+ +*Figure 2: X-Ray Diagram that displays the inheritance structure.*
+ + +## Problem Detection +After familiarizing ourselves with the system through the first chapter, we can now thoroughly look at the system to identify design flaws and/or code smells. We will first focus on the S.O.L.I.D. design principles, which were already named in the introduction. The meaning of each of these principles will first be explained, after which an example is shown from the Alitheia Core system. After the five basic S.O.L.I.D. principles, we will also try to find pieces of code that violate the Acyclic Dependencies Principle and lines of duplicated code. + +### Single Responsibility Principle (SRP) +This principle states that every software entity (class, function, variable, etc.) should have a single purpose and only one reason to change. If it is violated, the violating entity should be split into two or more entities that satisfy the Single Responsibility Principle. + +A very large class is the most likely to break this principle, so we used the tool [inCode](https://www.intooitus.com/products/incode) to give a nice overview of properties such as number of methods and lines of code for each class. A screenshot of the overview of inCode is shown in Figure 3. This tool found nine so-called God classes, where two of them are scoring a 10 out of 10 (`GitUpdater` and `ContributionMetricImpl`). The `GitUpdater` has 767 lines of code, but another bigger class called `SVNUUpdaterImpl` has 993 lines of code. + +
+ +*Figure 3: An overview of the design flaws that inCode has found.*
+ +Both the `ContributionMetricImpl` and the `GitUpdater` classes have many methods, use many attributes from many external classes. The `ContributionMetricImpl` class has methods such as `cleanupResource`, `run` and `updateField`. This implies that this class has multiple responsibilities, because cleaning up, running and updating a field should be considered separate tasks/responsibilities. The violation of the Single Responsibility Principle can possibly be fixed by splitting this class into multiple classes, each with their own unique responsibility. In this case, we should consider creating three separate classes that are responsible for cleaning up the resource, running the contribution metric and for updating the database. Because `ContributionMetricImpl` is such a large class, it might very well need to be split up in more than three classes to completely adhere to the Single Responsibility Principle. + +The first couple of methods of the `GitUpdater` class are `setUpdateParams`, `update` and `updateFromTo`. Up to this point, this class adheres to the Single Responsibility Principle, because its only responsibility is updating. However, later on we encounter the methods `processOneRevision`, `getAuthor` and `processCopiedFiles`, which seemingly involve other responsibilities than just updating. Again, this violation should be resolved by splitting the `GitUpdater` class into multiple classes that all have a single responsibility. This class also contains multiple to-do's and code that is commented out, which should also be fixed when the code is being reengineered. + +Finally, the definition of `DecreasingLongComparator` and `RandomizedCompatator` within the `MetricActivatorImpl` class also violates the Single Responsibility Principle, because the implementation of comparators should not be a responsibility of this class. + +Violations of the Single Responsibility Principle can cause code to be hard to locate, because it might be placed in a class that is mainly used for something completely different. This in turn causes the code to be more difficult to understand and to maintain. + +### Open/Closed Principle (OCP) or Liskov Substitution Principle (LSP) + +According to the Open/Closed principle, software entities should be open for extension, but closed for modification. This means that the software must be extensible without modifications to its source code. Also, an extension may not lead to a change in behaviour of the code that is extended. + +Secondly, the Liskov Substitution principle really underlines the principles of object oriented programming. It states that subtypes must be substitutable for their base types. Therefore, if a method expects some object A as a parameter, this method should also accept any class that is a subclass of A. The post-conditions of the method should still hold after such a substitution. This principle is strictly related to the Open/Closed Principle, because every violation of LSP is also a violation of OCP. + +During the search for violations of the Acyclic Dependency Principle, which will be discussed later, we encountered a couple of `enum`s that violate the OCP. These `enum`s, `BugStatus.Status` and `BugSeverity.Severity`, are a violation of OCP, because they are not open to extension at runtime. This is always the case with `enum`s and they should not be used unless you are absolutely sure they do not have to be extended at runtime. This problem can be solved by changing these `enum`s into classes, which will cause them to be extensible at runtime. + +### Interface Segregation Principle (ISP) +According to this principle, no client should be forced to depend on methods it does not use. When the superclass of some class A contains methods that are not applicable to A, the Interface Segregation Principle is violated. When this happens, the superclass should be split such that its children do not have access to methods that are not applicable. + +At this time, we have not searched for violations of this principle, but we might do this in the future if necessary. + +### Dependency Inversion Principle (DIP) + +This principle states that high-level modules should not depend on low-level modules. Additionally, abstractions should not depend on details, but details should depend on abstractions. This means that the high-level modules cannot simply use low-level modules to perform some task. An interface should be used that implements the functions of the low-level module. The high-level class then calls the methods of the interface and the low-level class implements the interface. + +The STAN Eclipse plugin marks the following depedencies between the `AlitheiaCore` class and `AdminServiceImpl`, `ClusterNodeServiceImpl`, `DBServiceImpl`, `FDSServiceImpl`, `MetricActivatorImpl`, `PAServiceImpl`, `ResteasyServiceImpl`, `SchedulerServiceImpl`, `TDSServiceImpl`, `UpdaterServiceImpl` and `WebadminServiceImpl` classes. These classes that end with "Impl" have an interface class, but the `AlitheiaCore` class depends on the concrete class instead. There is also a dependency between the `RestServiceApp` and `RestServiceRegistery` classes, and between the `DiffFactory` and `UnifiedDiffParser` classes. The `DiffFactory` class instantiates a `UnifiedDiffParser` object and is not using the interface class. The `AlitheiaCore` class is also instantiating a `LogManagerImpl` object instead of using its interface. + +These examples above are violations of the Dependency Inversion Principle, because the the high-level class (e.g. `AlitheiaCore`) directly depends on the low-level class (e.g. `AdminServiceImpl`). This can easily be fixed, because interfaces already exist for all classes. Simply changing each reference to an abstract class to a reference to the interface should work, but it should still be tested before we can implement these changes. + +
+ +*Figure 4: Package dependencies*
+ +### Acyclic Dependencies Principle (ADP) + +This very simple principle states that software entities should not have cyclic dependencies. This is the case when some entity `A` depends on some entity `B`, but `B` also (indirectly) depends on `A`. Dependency cycles of more than two classes also violate the principle and should therefore be avoided. + +There are two cases of a violation of the Acyclic Dependencies Principle detected by X-Ray. There is a cycle between the `Status` and `BugStatus` class. There is also a cycle between the `Severity`and the `BugSeverity` class. Both `Status` and `Severity` are `enum`s within `BugStatus` and `Severity` respectively. Therefore we don't see them as actual ADP violations. + +STAN4J gave a better overview of all classes, packages and dependencies between those in the project. Within the `.service.db` package a lot of cyclic dependencies can be found. One of these is the cyclic dependency between the `Plugin` and the `Metric` class. There are also cyclic dependencies between packages (*see figure 5 and 6*). + +
![Cycle 1](./img/cycle1.png "package cycle 1") + +*Figure 5: Cyclic dependency between packages*
+ +
![Cycle 2](./img/cycle2.png "package cycle 2") + +*Figure 6: Cyclic dependency between packages*
+ +### Don't Repeat Yourself (DRY) + +Another very simple principle is the DRY principle, which states that duplicate code must be avoided. This principle is violated when the modification of one element requires the modification of another unrelated element. + +We have looked for duplicated code with [SonarQube](http://www.sonarqube.org/). This tool found 313 lines of code (LOC) in a total of 31,760 LOC. Thus only 1% of the Alitheia Core project is duplicate code. The project contains 15,688 LOC with Java, the rest is comments or whitespace. We investigated a few instances of code duplication. One of them is `BugResolution` (lines 121-135) and `BTSEntry` (lines 203-216). + +### Simple shortcomings +SonarQube is also able to detect a lot of other issues. In Alitheia Core are 1770 issues. These issues can point out confusing code formatting, like inconsistently placing curly braces. Also more important issues like never throwing generic exceptions, such as `Exception`, are detected in the Alitheia Core project. + +SonarQube is also able to calculate the complexicity of the code. The [complexity metrics](http://docs.codehaus.org/display/SONAR/Metrics+-+Complexity) used by SonarQube count every `if`, `for`, `while`, `case`, `catch`, `throw` and `return` statement. The `PluginsView` has the highest complexity per function, but also a high amount of code per method. The inCode tool also found classes and methods with a high complexity. diff --git a/4143760-4167562/assignment2.md b/4143760-4167562/assignment2.md new file mode 100644 index 000000000..a7b28da44 --- /dev/null +++ b/4143760-4167562/assignment2.md @@ -0,0 +1,112 @@ +# IN4189 Software Reengineering - Testing and Refactoring Report +By Martijn den Hoedt - 4143760 and Anton Bouter - 4167562 + +## Introduction + +In order to improve the maintainability of the Alitheia Core system, we have performed a number of refactorings. These refactorings include the removal of cyclic dependencies and violations of the Single Responsibility Principle, as well as some minor fixes. To ensure that the refactorings did not break the system, we have created unit tests for the involved classes. Reports of the test coverage is added to illustrate the newly added tests. + +## Tests + +The first major issue with the system is its lack of test cases. Before the refactorings, the line coverage of the core package was only 1.7%, which is shown in the figure below. Subpackages with 0% coverage were omitted. + + + +To facilitate refactoring, unit tests must be present. Therefore we have created tests for the classes which we have refactored. This slightly increased the coverage, but the total coverage is still incredibly low. The classes for which we have made unit tests are listed below. These tests can be found in packages with corresponding names in the `src/test/java` folder: + + - `SchedulerStats` in package `eu.sqooss.service.scheduler` + - `InMemoryDirectory` in package `eu.sqooss.service.fds` + - `InMemoryCheckoutImpl` in package `eu.sqooss.impl.service.fds` + - `ProjectsView` in package `eu.sqooss.impl.service.webadmin` + - `WebAdminRenderer` in package `eu.sqooss.impl.service.webadmin` + +The line coverage of the core package after adding new tests is displayed in the figure below. It was increased considerably to a line coverage of 11% for the core package. This time, subpackages with a coverage less than 10% were omitted. + + + +## Refactoring + +### Single Responsibility Principle + +As pointed out in the previous report, the `GitUpdater` class in the `eu.sqooss.plugins.updater.git` package was a very large file of 841 lines of code that had many different and unrelated methods. This class violates the Single Responsibility, because this method does not have a single responsibility, because it is responsible for many more things, since its methods are unrelated. This violation causes the code to be more difficult to understand, and therefore to maintain. Splitting the `GitUpdater` class in more classes, such that each class only has related methods, and therefore a single responsibility, will resolve the violation. + +We have split this class into four separate classes: `GitUpdater`, `GitProcessor`, `GitFileManager` and `GitMessageHandler`. The `GitUpdater` class contains the high-level methods responsible for updating the database, while `GitProcessor` is responsible for processing revisions to find e.g. branching info. Finally, the `GitFileManager` contains all methods that involve moving/copying files or directories and the `GitMessageHandler` prints info, warnings and debug output to the log. The dependencies between these classes are shown in the figure below, where the number on each dependency denotes the number of references. + + + +Even though a few tests were present for the `GitUpdater` class, they would not even run on a fresh copy of the Alitheia Core system. After a number of modifications, we ended up with the error that the system was unable to find the JDBC driver org.h2.Driver, which we were unable to resolve. This means we were not able to actually execute any tests for `GitUpdater` and any of the new classes. Having example tests that also require an active database session would certainly have helped us. This emphasizes the importance of test cases when refactoring a system. However, we have created a number of tests for the four new classes, but these will not function without a working database session. + + +### Package Dependency Cycle +When packages depend on eachother in a cycle they violate the Acyclic Dependency Principle (ADP). Such a cyclic dependency existed between the `.service.abstractmetric` and the `.service.metricactivator` packages. Another existed between the `.service.abstractmetric` and the `.service.pa` packages. These cycles can also be seen in the image below. + + + +To fix these cycles we have merged the `.service.abstractmetric` and the `.service.metricactivator` packages and moved `PluginAdmin` interface and `PluginInfo` class to the `.service.abstractmetric` package. The result can be seen in the image below. + + + +These changes are a good idea, because now the amount of cyclic dependencies is reduced. With is fix we didn't introduce new cyclic dependencies and there are no cyclic dependencies in the `.service.abstractmetric` package. The package did become larger, but the four added files have a lot to do with the most important class `AbstractMetric`. + +### Class Dependency Cycle in `.service.fds` +Cyclic dependencies can also exist between classes, which also violates the ADP. The dependency between the `InMemoryDireectory` class and the `InMemoryCheckout` interface was a cyclic one. All the dependencies in the `.service.fds` package are visible in the image below. + + + +In order to break the cycle we have removed the dependency from `InMemoryDirectory` to `InMemoryCheckout`. To make this possible we have removed some functionality from `InMemoryDirectory`, which is now available in the `InMemoryCheckoutImpl` class which implements the `InMemoryCheckout` interface. The resulting package structure, after the changes to its structure, is displayed in the image below. + + + +### Class Dependency Cycles in `.service.db` + +In the `.service.db` a very large tangle of classes can be found, as many as 38 classes depend on each other. To untangle these classes we have removed some dependencies between classes. + +Between `Tag` and `StoredProject` was a cyclic dependency, this was due a two static methods in `Tag` that were called from `StoredProject` and needed a `StoredProject` as parameter. These two methods have been moved to `StoredProject` and are now non-static. This also follows the Object Oriented Programming way of programming better. + +In order to remove yet another cyclic dependency, we moved two static methods from the `PluginConfigurator` to the `Plugin` class. This solves a part of the dependency between the two. `PluginConfigurator` still has a getter and setter for a `Plugin` object. This getter is never called, the setter is only called once and `PluginConfigurator` never uses the `Plugin` object in one of its methods. Therefore we removed the getter and setter and the variable declaration. Now the `PluginConfigurator` class doesn't depend on `Plugin`, thus the cyclic dependency is solved. + +### Don't Repeat Yourself (DRY) + +With Google CodePro AnalytiX we found several instances of violations of the DRY princliple. On should not copy past code, because you will introduce the same bug on multiple places and it's hard to maintain. In `FDSSerivceImpl` the methods `getInMemoryCheckout(ProjectVersion pv, Pattern pattern)` and `getCheckout(ProjectVersion pv, String path)` have more than 10 lines of code exactly the same. We extracted a part of the method to a new method called `getSCNAccesor(ProjectVersion pv)`. Also in `WebAdminRenderer` we reduced the amount of duplicate code. The methods `renderJobFailStats()` and `renderJobWaitStats()` had about 20 lines of code in common. This time we made to methods which are now both called instead of those 20 lines of code. The method `createFrom(.., ..)`, wich was around 250 LOC, has been reduced 40 LOC in size. This is done by exacting duplicate code in a new method called `addButtonSet(....)` which adds two buttons to the HTML code. This new method is called twice from the `createFrom(.., ..)` method. + +## Bug Fixes + +### SchedulerStats +In `eu.sqooss.service.scheduler.SchedulerStats.java` we found a few bugs in the `removeWaitingJob(String classname)` method. The old code, which included these bugs, is visible below. + + public synchronized void removeWaitingJob(String classname) { + this.waitingJobs --; + if (waitingJobTypes.containsKey(classname)) { + int jobs = waitingJobTypes.get(classname) - 1; + if (jobs == 0) { + waitingJobTypes.remove(classname); + } + + waitingJobTypes.put(classname, jobs); + } + } + +This code does not make much sense, because now the amount of waiting jobs (`waitingJobs`) can become negative. Also the check "`if (jobs == 0)`" is completely useless, because what will be removed from the map will be put back right away. Therefore we changed it to the following, which will change the behavior of the code, but makes much more sense. + + public synchronized void removeWaitingJob(String classname) { + if (waitingJobTypes.containsKey(classname)) { + this.waitingJobs--; + int jobs = waitingJobTypes.get(classname) - 1; + if (jobs <= 0) { + waitingJobTypes.remove(classname); + } else { + waitingJobTypes.put(classname, jobs); + } + } + } + +## Recommendations + +To further improve the maintainability of the system, we recommend some further refactorings. However, to perform refactorings, unit and integration tests are very much required to not break the system. With a coverage of only 1.7% of the core, these were severely lacking. Even after the refactorings, a coverage of 11% is still very low. + +Therefore our first recommendation is to build a complete test suite for the system. This will be quite a large investment, but it will definitely pay off in the long run, because it will make refactorings much less time consuming. Units tests would have prevented bugs as the ones described in the "Bug Fixes" section. Additionally, tests will make it easier to extend the system, especially after many of the developers that originally designed the system will have departed. + +The system consists of many very large methods, this make testing very hard. Especially classes with HTML code generation consist of much code duplication. We have already fixed a few instances of code duplication, but there are many more. When methods are split up in smaller ones, it will also become easier to remove duplicated code. Therefore we recommend to split up methods where possible. The `PluginsView` class, with a method of almost 900 lines of code and multiple instances of DRY violations, is a good one to start with. + +## Conclusions + +Even though the maintainability of the Alitheia Core system has been improved, it is still far from optimal, mainly because of the lack of tests. Therefore we recommend to invest in creating a test suite that covers a very large part of the project, because this will pay off in the long run. diff --git a/4143760-4167562/coverage/.resources/branchfc.gif b/4143760-4167562/coverage/.resources/branchfc.gif new file mode 100644 index 000000000..989b46d30 Binary files /dev/null and b/4143760-4167562/coverage/.resources/branchfc.gif differ diff --git a/4143760-4167562/coverage/.resources/branchnc.gif b/4143760-4167562/coverage/.resources/branchnc.gif new file mode 100644 index 000000000..1933e07c3 Binary files /dev/null and b/4143760-4167562/coverage/.resources/branchnc.gif differ diff --git a/4143760-4167562/coverage/.resources/branchpc.gif b/4143760-4167562/coverage/.resources/branchpc.gif new file mode 100644 index 000000000..cbf711b70 Binary files /dev/null and b/4143760-4167562/coverage/.resources/branchpc.gif differ diff --git a/4143760-4167562/coverage/.resources/bundle.gif b/4143760-4167562/coverage/.resources/bundle.gif new file mode 100644 index 000000000..fca9c53e6 Binary files /dev/null and b/4143760-4167562/coverage/.resources/bundle.gif differ diff --git a/4143760-4167562/coverage/.resources/class.gif b/4143760-4167562/coverage/.resources/class.gif new file mode 100644 index 000000000..eb348fb0d Binary files /dev/null and b/4143760-4167562/coverage/.resources/class.gif differ diff --git a/4143760-4167562/coverage/.resources/down.gif b/4143760-4167562/coverage/.resources/down.gif new file mode 100644 index 000000000..440a14db7 Binary files /dev/null and b/4143760-4167562/coverage/.resources/down.gif differ diff --git a/4143760-4167562/coverage/.resources/greenbar.gif b/4143760-4167562/coverage/.resources/greenbar.gif new file mode 100644 index 000000000..0ba656725 Binary files /dev/null and b/4143760-4167562/coverage/.resources/greenbar.gif differ diff --git a/4143760-4167562/coverage/.resources/group.gif b/4143760-4167562/coverage/.resources/group.gif new file mode 100644 index 000000000..a4ea580d2 Binary files /dev/null and b/4143760-4167562/coverage/.resources/group.gif differ diff --git a/4143760-4167562/coverage/.resources/method.gif b/4143760-4167562/coverage/.resources/method.gif new file mode 100644 index 000000000..7d24707ee Binary files /dev/null and b/4143760-4167562/coverage/.resources/method.gif differ diff --git a/4143760-4167562/coverage/.resources/package.gif b/4143760-4167562/coverage/.resources/package.gif new file mode 100644 index 000000000..131c28da4 Binary files /dev/null and b/4143760-4167562/coverage/.resources/package.gif differ diff --git a/4143760-4167562/coverage/.resources/prettify.css b/4143760-4167562/coverage/.resources/prettify.css new file mode 100644 index 000000000..be5166e0f --- /dev/null +++ b/4143760-4167562/coverage/.resources/prettify.css @@ -0,0 +1,13 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #2A00FF; } +.kwd { color: #7F0055; font-weight:bold; } +.com { color: #3F5FBF; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +.dec { color: #606; } diff --git a/4143760-4167562/coverage/.resources/prettify.js b/4143760-4167562/coverage/.resources/prettify.js new file mode 100644 index 000000000..ab2788211 --- /dev/null +++ b/4143760-4167562/coverage/.resources/prettify.js @@ -0,0 +1,1510 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + *

+ * + * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Walks the DOM returning a properly escaped version of innerHTML.
    +  * @param {Node} node
    +  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    +  */
    +window['PR_normalizedHtml']
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +  = window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    +window['_pr_isIE6'] = function () {
    +  var ieVersion = navigator && navigator.userAgent &&
    +      navigator.userAgent.match(/\bMSIE ([678])\./);
    +  ieVersion = ieVersion ? +ieVersion[1] : false;
    +  window['_pr_isIE6'] = function () { return ieVersion; };
    +  return ieVersion;
    +};
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  // Define regexps here so that the interpreter doesn't have to create an
    +  // object each time the function containing them is called.
    +  // The language spec requires a new object created even if you don't access
    +  // the $1 members.
    +  var pr_amp = /&/g;
    +  var pr_lt = /</g;
    +  var pr_gt = />/g;
    +  var pr_quot = /\"/g;
    +  /** like textToHtml but escapes double quotes to be attribute safe. */
    +  function attribToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;')
    +        .replace(pr_quot, '&quot;');
    +  }
    +
    +  /** escapest html special characters to html. */
    +  function textToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;');
    +  }
    +
    +
    +  var pr_ltEnt = /&lt;/g;
    +  var pr_gtEnt = /&gt;/g;
    +  var pr_aposEnt = /&apos;/g;
    +  var pr_quotEnt = /&quot;/g;
    +  var pr_ampEnt = /&amp;/g;
    +  var pr_nbspEnt = /&nbsp;/g;
    +  /** unescapes html to plain text. */
    +  function htmlToText(html) {
    +    var pos = html.indexOf('&');
    +    if (pos < 0) { return html; }
    +    // Handle numeric entities specially.  We can't use functional substitution
    +    // since that doesn't work in older versions of Safari.
    +    // These should be rare since most browsers convert them to normal chars.
    +    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    +      var end = html.indexOf(';', pos);
    +      if (end >= 0) {
    +        var num = html.substring(pos + 3, end);
    +        var radix = 10;
    +        if (num && num.charAt(0) === 'x') {
    +          num = num.substring(1);
    +          radix = 16;
    +        }
    +        var codePoint = parseInt(num, radix);
    +        if (!isNaN(codePoint)) {
    +          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    +                  html.substring(end + 1));
    +        }
    +      }
    +    }
    +
    +    return html.replace(pr_ltEnt, '<')
    +        .replace(pr_gtEnt, '>')
    +        .replace(pr_aposEnt, "'")
    +        .replace(pr_quotEnt, '"')
    +        .replace(pr_nbspEnt, ' ')
    +        .replace(pr_ampEnt, '&');
    +  }
    +
    +  /** is the given node's innerHTML normally unescaped? */
    +  function isRawContent(node) {
    +    return 'XMP' === node.tagName;
    +  }
    +
    +  var newlineRe = /[\r\n]/g;
    +  /**
    +   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    +   */
    +  function isPreformatted(node, content) {
    +    // PRE means preformatted, and is a very common case, so don't create
    +    // unnecessary computed style objects.
    +    if ('PRE' === node.tagName) { return true; }
    +    if (!newlineRe.test(content)) { return true; }  // Don't care
    +    var whitespace = '';
    +    // For disconnected nodes, IE has no currentStyle.
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      // Firefox makes a best guess if node is disconnected whereas Safari
    +      // returns the empty string.
    +      whitespace = window.getComputedStyle(node, null).whiteSpace;
    +    }
    +    return !whitespace || whitespace === 'pre';
    +  }
    +
    +  function normalizedHtml(node, out, opt_sortAttrs) {
    +    switch (node.nodeType) {
    +      case 1:  // an element
    +        var name = node.tagName.toLowerCase();
    +
    +        out.push('<', name);
    +        var attrs = node.attributes;
    +        var n = attrs.length;
    +        if (n) {
    +          if (opt_sortAttrs) {
    +            var sortedAttrs = [];
    +            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    +            sortedAttrs.sort(function (a, b) {
    +                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    +              });
    +            attrs = sortedAttrs;
    +          }
    +          for (var i = 0; i < n; ++i) {
    +            var attr = attrs[i];
    +            if (!attr.specified) { continue; }
    +            out.push(' ', attr.name.toLowerCase(),
    +                     '="', attribToHtml(attr.value), '"');
    +          }
    +        }
    +        out.push('>');
    +        for (var child = node.firstChild; child; child = child.nextSibling) {
    +          normalizedHtml(child, out, opt_sortAttrs);
    +        }
    +        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    +          out.push('<\/', name, '>');
    +        }
    +        break;
    +      case 3: case 4: // text
    +        out.push(textToHtml(node.nodeValue));
    +        break;
    +    }
    +  }
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union o the sets o strings matched d by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +
    +      // Expand letters to groupts to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +
    +      return parts.join('');
    +    }
    +
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +  var PR_innerHtmlWorks = null;
    +  function getInnerHtml(node) {
    +    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    +    // an html description of well formed XML and the containing tag is a PRE
    +    // tag, so we detect that case and emulate innerHTML.
    +    if (null === PR_innerHtmlWorks) {
    +      var testNode = document.createElement('PRE');
    +      testNode.appendChild(
    +          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    +      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    +    }
    +
    +    if (PR_innerHtmlWorks) {
    +      var content = node.innerHTML;
    +      // XMP tags contain unescaped entities so require special handling.
    +      if (isRawContent(node)) {
    +        content = textToHtml(content);
    +      } else if (!isPreformatted(node, content)) {
    +        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    +            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    +      }
    +      return content;
    +    }
    +
    +    var out = [];
    +    for (var child = node.firstChild; child; child = child.nextSibling) {
    +      normalizedHtml(child, out);
    +    }
    +    return out.join('');
    +  }
    +
    +  /** returns a function that expand tabs to spaces.  This function can be fed
    +    * successive chunks of text, and will maintain its own internal state to
    +    * keep track of how tabs are expanded.
    +    * @return {function (string) : string} a function that takes
    +    *   plain text and return the text with tabs expanded.
    +    * @private
    +    */
    +  function makeTabExpander(tabWidth) {
    +    var SPACES = '                ';
    +    var charInLine = 0;
    +
    +    return function (plainText) {
    +      // walk over each character looking for tabs and newlines.
    +      // On tabs, expand them.  On newlines, reset charInLine.
    +      // Otherwise increment charInLine
    +      var out = null;
    +      var pos = 0;
    +      for (var i = 0, n = plainText.length; i < n; ++i) {
    +        var ch = plainText.charAt(i);
    +
    +        switch (ch) {
    +          case '\t':
    +            if (!out) { out = []; }
    +            out.push(plainText.substring(pos, i));
    +            // calculate how much space we need in front of this part
    +            // nSpaces is the amount of padding -- the number of spaces needed
    +            // to move us to the next column, where columns occur at factors of
    +            // tabWidth.
    +            var nSpaces = tabWidth - (charInLine % tabWidth);
    +            charInLine += nSpaces;
    +            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    +              out.push(SPACES.substring(0, nSpaces));
    +            }
    +            pos = i + 1;
    +            break;
    +          case '\n':
    +            charInLine = 0;
    +            break;
    +          default:
    +            ++charInLine;
    +        }
    +      }
    +      if (!out) { return plainText; }
    +      out.push(plainText.substring(pos));
    +      return out.join('');
    +    };
    +  }
    +
    +  var pr_chunkPattern = new RegExp(
    +      '[^<]+'  // A run of characters other than '<'
    +      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    +      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    +      // a probable tag that should not be highlighted
    +      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    +      + '|<',  // A '<' that does not begin a larger chunk
    +      'g');
    +  var pr_commentPrefix = /^<\!--/;
    +  var pr_cdataPrefix = /^<!\[CDATA\[/;
    +  var pr_brPrefix = /^<br\b/i;
    +  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    +
    +  /** split markup into chunks of html tags (style null) and
    +    * plain text (style {@link #PR_PLAIN}), converting tags which are
    +    * significant for tokenization (<br>) into their textual equivalent.
    +    *
    +    * @param {string} s html where whitespace is considered significant.
    +    * @return {Object} source code and extracted tags.
    +    * @private
    +    */
    +  function extractTags(s) {
    +    // since the pattern has the 'g' modifier and defines no capturing groups,
    +    // this will return a list of all chunks which we then classify and wrap as
    +    // PR_Tokens
    +    var matches = s.match(pr_chunkPattern);
    +    var sourceBuf = [];
    +    var sourceBufLen = 0;
    +    var extractedTags = [];
    +    if (matches) {
    +      for (var i = 0, n = matches.length; i < n; ++i) {
    +        var match = matches[i];
    +        if (match.length > 1 && match.charAt(0) === '<') {
    +          if (pr_commentPrefix.test(match)) { continue; }
    +          if (pr_cdataPrefix.test(match)) {
    +            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    +            sourceBuf.push(match.substring(9, match.length - 3));
    +            sourceBufLen += match.length - 12;
    +          } else if (pr_brPrefix.test(match)) {
    +            // <br> tags are lexically significant so convert them to text.
    +            // This is undone later.
    +            sourceBuf.push('\n');
    +            ++sourceBufLen;
    +          } else {
    +            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    +              // A <span class="nocode"> will start a section that should be
    +              // ignored.  Continue walking the list until we see a matching end
    +              // tag.
    +              var name = match.match(pr_tagNameRe)[2];
    +              var depth = 1;
    +              var j;
    +              end_tag_loop:
    +              for (j = i + 1; j < n; ++j) {
    +                var name2 = matches[j].match(pr_tagNameRe);
    +                if (name2 && name2[2] === name) {
    +                  if (name2[1] === '/') {
    +                    if (--depth === 0) { break end_tag_loop; }
    +                  } else {
    +                    ++depth;
    +                  }
    +                }
    +              }
    +              if (j < n) {
    +                extractedTags.push(
    +                    sourceBufLen, matches.slice(i, j + 1).join(''));
    +                i = j;
    +              } else {  // Ignore unclosed sections.
    +                extractedTags.push(sourceBufLen, match);
    +              }
    +            } else {
    +              extractedTags.push(sourceBufLen, match);
    +            }
    +          }
    +        } else {
    +          var literalText = htmlToText(match);
    +          sourceBuf.push(literalText);
    +          sourceBufLen += literalText.length;
    +        }
    +      }
    +    }
    +    return { source: sourceBuf.join(''), tags: extractedTags };
    +  }
    +
    +  /** True if the given tag contains a class attribute with the nocode class. */
    +  function isNoCodeTag(tag) {
    +    return !!tag
    +        // First canonicalize the representation of attributes
    +        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    +                 ' $1="$2$3$4"')
    +        // Then look for the attribute we want.
    +        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    +  }
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    if (options['hashComments']) {
    +      if (options['cStyleComments']) {
    +        // Stop C preprocessor declarations at an unclosed open comment
    +        shortcutStylePatterns.push(
    +            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +             null, '#']);
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /** Breaks {@code job.source} around style boundaries in
    +    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    +    * and leaves the result in {@code job.prettyPrintedHtml}.
    +    * @param {Object} job like {
    +    *    source: {string} source as plain text,
    +    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    +    *                   html preceded by their position in {@code job.source}
    +    *                   in order
    +    *    decorations: {Array.<number|string} an array of style classes preceded
    +    *                 by the position at which they start in job.source in order
    +    * }
    +    * @private
    +    */
    +  function recombineTagsAndDecorations(job) {
    +    var sourceText = job.source;
    +    var extractedTags = job.extractedTags;
    +    var decorations = job.decorations;
    +
    +    var html = [];
    +    // index past the last char in sourceText written to html
    +    var outputIdx = 0;
    +
    +    var openDecoration = null;
    +    var currentDecoration = null;
    +    var tagPos = 0;  // index into extractedTags
    +    var decPos = 0;  // index into decorations
    +    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    +
    +    var adjacentSpaceRe = /([\r\n ]) /g;
    +    var startOrSpaceRe = /(^| ) /gm;
    +    var newlineRe = /\r\n?|\n/g;
    +    var trailingSpaceRe = /[ \r\n]$/;
    +    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    +
    +    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    +    var isIE678 = window['_pr_isIE6']();
    +    var lineBreakHtml = (
    +        isIE678
    +        ? (job.sourceNode.tagName === 'PRE'
    +           // Use line feeds instead of <br>s so that copying and pasting works
    +           // on IE.
    +           // Doing this on other browsers breaks lots of stuff since \r\n is
    +           // treated as two newlines on Firefox.
    +           ? (isIE678 === 6 ? '&#160;\r\n' :
    +              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    +           // IE collapses multiple adjacent <br>s into 1 line break.
    +           // Prefix every newline with '&#160;' to prevent such behavior.
    +           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    +           : '&#160;<br />')
    +        : '<br />');
    +
    +    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    +    // number of the first line.
    +    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    +    var lineBreaker;
    +    if (numberLines) {
    +      var lineBreaks = [];
    +      for (var i = 0; i < 10; ++i) {
    +        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    +      }
    +      var lineNum = numberLines[1] && numberLines[1].length 
    +          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    +      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    +      if (lineNum) {
    +        html.push(' value="', lineNum + 1, '"');
    +      }
    +      html.push('>');
    +      lineBreaker = function () {
    +        var lb = lineBreaks[++lineNum % 10];
    +        // If a decoration is open, we need to close it before closing a list-item
    +        // and reopen it on the other side of the list item.
    +        return openDecoration
    +            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    +      };
    +    } else {
    +      lineBreaker = lineBreakHtml;
    +    }
    +
    +    // A helper function that is responsible for opening sections of decoration
    +    // and outputing properly escaped chunks of source
    +    function emitTextUpTo(sourceIdx) {
    +      if (sourceIdx > outputIdx) {
    +        if (openDecoration && openDecoration !== currentDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        if (!openDecoration && currentDecoration) {
    +          openDecoration = currentDecoration;
    +          html.push('<span class="', openDecoration, '">');
    +        }
    +        // This interacts badly with some wikis which introduces paragraph tags
    +        // into pre blocks for some strange reason.
    +        // It's necessary for IE though which seems to lose the preformattedness
    +        // of <pre> tags when their innerHTML is assigned.
    +        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    +        // and it serves to undo the conversion of <br>s to newlines done in
    +        // chunkify.
    +        var htmlChunk = textToHtml(
    +            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    +            .replace(lastWasSpace
    +                     ? startOrSpaceRe
    +                     : adjacentSpaceRe, '$1&#160;');
    +        // Keep track of whether we need to escape space at the beginning of the
    +        // next chunk.
    +        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    +        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    +        outputIdx = sourceIdx;
    +      }
    +    }
    +
    +    while (true) {
    +      // Determine if we're going to consume a tag this time around.  Otherwise
    +      // we consume a decoration or exit.
    +      var outputTag;
    +      if (tagPos < extractedTags.length) {
    +        if (decPos < decorations.length) {
    +          // Pick one giving preference to extractedTags since we shouldn't open
    +          // a new style that we're going to have to immediately close in order
    +          // to output a tag.
    +          outputTag = extractedTags[tagPos] <= decorations[decPos];
    +        } else {
    +          outputTag = true;
    +        }
    +      } else {
    +        outputTag = false;
    +      }
    +      // Consume either a decoration or a tag or exit.
    +      if (outputTag) {
    +        emitTextUpTo(extractedTags[tagPos]);
    +        if (openDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        html.push(extractedTags[tagPos + 1]);
    +        tagPos += 2;
    +      } else if (decPos < decorations.length) {
    +        emitTextUpTo(decorations[decPos]);
    +        currentDecoration = decorations[decPos + 1];
    +        decPos += 2;
    +      } else {
    +        break;
    +      }
    +    }
    +    emitTextUpTo(sourceText.length);
    +    if (openDecoration) {
    +      html.push('</span>');
    +    }
    +    if (numberLines) { html.push('</li></ol>'); }
    +    job.prettyPrintedHtml = html.join('');
    +  }
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var sourceCodeHtml = job.sourceCodeHtml;
    +    var opt_langExtension = job.langExtension;
    +
    +    // Prepopulate output in case processing fails with an exception.
    +    job.prettyPrintedHtml = sourceCodeHtml;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndExtractedTags.source;
    +      job.source = source;
    +      job.basePos = 0;
    +
    +      /** Even entries are positions in source in ascending order.  Odd entries
    +        * are tags that were extracted at that position.
    +        * @type {Array.<number|string>}
    +        */
    +      job.extractedTags = sourceAndExtractedTags.tags;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +      // Integrate the decorations and tags back into the source code to produce
    +      // a decorated html string which is left in job.prettyPrintedHtml.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    +    var job = {
    +      sourceCodeHtml: sourceCodeHtml,
    +      langExtension: opt_langExtension
    +    };
    +    applyDecorator(job);
    +    return job.prettyPrintedHtml;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        // [JACOCO] 'prettyprint' -> 'source' 
    +        if (cs.className && cs.className.indexOf('source') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR_registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                // [JACOCO] 'prettyprint' -> 'source' 
    +                p.className && p.className.indexOf('source') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // fetch the content as a snippet of properly escaped HTML.
    +            // Firefox adds newlines at the end.
    +            var content = getInnerHtml(cs);
    +            content = content.replace(/(?:\r\n?|\n)$/, '');
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              sourceCodeHtml: content,
    +              langExtension: langExtension,
    +              sourceNode: cs
    +            };
    +            applyDecorator(prettyPrintingJob);
    +            replaceWithPrettyPrintedHtml();
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    function replaceWithPrettyPrintedHtml() {
    +      var newContent = prettyPrintingJob.prettyPrintedHtml;
    +      if (!newContent) { return; }
    +      var cs = prettyPrintingJob.sourceNode;
    +
    +      // push the prettified html back into the tag.
    +      if (!isRawContent(cs)) {
    +        // just replace the old html with the new
    +        cs.innerHTML = newContent;
    +      } else {
    +        // we need to change the tag to a <pre> since <xmp>s do not allow
    +        // embedded tags such as the span tags used to attach styles to
    +        // sections of source code.
    +        var pre = document.createElement('PRE');
    +        for (var i = 0; i < cs.attributes.length; ++i) {
    +          var a = cs.attributes[i];
    +          if (a.specified) {
    +            var aname = a.name.toLowerCase();
    +            if (aname === 'class') {
    +              pre.className = a.value;  // For IE 6
    +            } else {
    +              pre.setAttribute(a.name, a.value);
    +            }
    +          }
    +        }
    +        pre.innerHTML = newContent;
    +
    +        // remove the old
    +        cs.parentNode.replaceChild(pre, cs);
    +        cs = pre;
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['PR_normalizedHtml'] = normalizedHtml;
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'combinePrefixPatterns': combinePrefixPatterns,
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/4143760-4167562/coverage/.resources/redbar.gif b/4143760-4167562/coverage/.resources/redbar.gif
    new file mode 100644
    index 000000000..c2f71469b
    Binary files /dev/null and b/4143760-4167562/coverage/.resources/redbar.gif differ
    diff --git a/4143760-4167562/coverage/.resources/report.css b/4143760-4167562/coverage/.resources/report.css
    new file mode 100644
    index 000000000..08eba7929
    --- /dev/null
    +++ b/4143760-4167562/coverage/.resources/report.css
    @@ -0,0 +1,243 @@
    +body, td {
    +  font-family:sans-serif;
    +  font-size:10pt;
    +}
    +
    +h1 {
    +  font-weight:bold;
    +  font-size:18pt;
    +}
    +
    +.breadcrumb {
    +  border:#d6d3ce 1px solid;
    +  padding:2px 4px 2px 4px;
    +}
    +
    +.breadcrumb .info {
    +  float:right;
    +}
    +
    +.breadcrumb .info a {
    +  margin-left:8px;
    +}
    +
    +.el_report {
    +  padding-left:18px;
    +  background-image:url(report.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_group {
    +  padding-left:18px;
    +  background-image:url(group.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_bundle {
    +  padding-left:18px;
    +  background-image:url(bundle.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_package {
    +  padding-left:18px;
    +  background-image:url(package.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_class {
    +  padding-left:18px;
    +  background-image:url(class.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_source {
    +  padding-left:18px;
    +  background-image:url(source.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_method {
    +  padding-left:18px;
    +  background-image:url(method.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_session {
    +  padding-left:18px;
    +  background-image:url(session.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +pre.source {
    +  border:#d6d3ce 1px solid;
    +  font-family:monospace;
    +}
    +
    +pre.source ol {
    +  margin-bottom: 0px;
    +  margin-top: 0px;
    +}
    +
    +pre.source li {
    +  border-left: 1px solid #D6D3CE;
    +  color: #A0A0A0;
    +  padding-left: 0px;
    +}
    +
    +pre.source span.fc {
    +  background-color:#ccffcc;
    +}
    +
    +pre.source span.nc {
    +  background-color:#ffaaaa;
    +}
    +
    +pre.source span.pc {
    +  background-color:#ffffcc;
    +}
    +
    +pre.source span.bfc {
    +  background-image: url(branchfc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bfc:hover {
    +  background-color:#80ff80;
    +}
    +
    +pre.source span.bnc {
    +  background-image: url(branchnc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bnc:hover {
    +  background-color:#ff8080;
    +}
    +
    +pre.source span.bpc {
    +  background-image: url(branchpc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bpc:hover {
    +  background-color:#ffff80;
    +}
    +
    +table.coverage {
    +  empty-cells:show;
    +  border-collapse:collapse; 
    +}
    +
    +table.coverage thead {
    +  background-color:#e0e0e0;
    +}
    +
    +table.coverage thead td {
    +  white-space:nowrap;
    +  padding:2px 14px 0px 6px;
    +  border-bottom:#b0b0b0 1px solid;
    +}
    +
    +table.coverage thead td.bar {
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr1 {
    +  text-align:right;
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr2 {
    +  text-align:right;
    +  padding-left:2px;
    +}
    +
    +table.coverage thead td.sortable {
    +  cursor:pointer;
    +  background-image:url(sort.gif);
    +  background-position:right center;
    +  background-repeat:no-repeat;
    +}
    +
    +table.coverage thead td.up {
    +  background-image:url(up.gif);
    +}
    +
    +table.coverage thead td.down {
    +  background-image:url(down.gif);
    +}
    +
    +table.coverage tbody td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +  border-bottom:#d6d3ce 1px solid;
    +}
    +
    +table.coverage tbody tr:hover { 
    +  background: #f0f0d0 !important;
    +}
    +
    +table.coverage tbody td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +table.coverage tfoot td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +}
    +
    +table.coverage tfoot td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +.footer {
    +  margin-top:20px;
    +  border-top:#d6d3ce 1px solid;
    +  padding-top:2px;
    +  font-size:8pt;
    +  color:#a0a0a0;
    +}
    +
    +.footer a {
    +  color:#a0a0a0;
    +}
    +
    +.right {
    +  float:right;
    +}
    diff --git a/4143760-4167562/coverage/.resources/report.gif b/4143760-4167562/coverage/.resources/report.gif
    new file mode 100644
    index 000000000..8547be50b
    Binary files /dev/null and b/4143760-4167562/coverage/.resources/report.gif differ
    diff --git a/4143760-4167562/coverage/.resources/session.gif b/4143760-4167562/coverage/.resources/session.gif
    new file mode 100644
    index 000000000..0151bad8a
    Binary files /dev/null and b/4143760-4167562/coverage/.resources/session.gif differ
    diff --git a/4143760-4167562/coverage/.resources/sort.gif b/4143760-4167562/coverage/.resources/sort.gif
    new file mode 100644
    index 000000000..6757c2c32
    Binary files /dev/null and b/4143760-4167562/coverage/.resources/sort.gif differ
    diff --git a/4143760-4167562/coverage/.resources/sort.js b/4143760-4167562/coverage/.resources/sort.js
    new file mode 100644
    index 000000000..b43e83fee
    --- /dev/null
    +++ b/4143760-4167562/coverage/.resources/sort.js
    @@ -0,0 +1,147 @@
    +/*******************************************************************************
    + * Copyright (c) 2009, 2014 Mountainminds GmbH & Co. KG and Contributors
    + * All rights reserved. This program and the accompanying materials
    + * are made available under the terms of the Eclipse Public License v1.0
    + * which accompanies this distribution, and is available at
    + * http://www.eclipse.org/legal/epl-v10.html
    + *
    + * Contributors:
    + *    Marc R. Hoffmann - initial API and implementation
    + *    
    + *******************************************************************************/
    +
    +(function () {
    +
    +  /**
    +   * Sets the initial sorting derived from the hash.
    +   *
    +   * @param linkelementids
    +   *          list of element ids to search for links to add sort inidcator
    +   *          hash links   
    +   */  
    +  function initialSort(linkelementids) {
    +    window.linkelementids = linkelementids;
    +    var hash = window.location.hash;
    +    if (hash) {
    +      var m = hash.match(/up-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, true);
    +        }
    +        return;
    +      }
    +      var m = hash.match(/dn-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, false);
    +        }
    +        return
    +      }
    +    }
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header dependening on the current sort state.
    +   */  
    +  function toggleSort(header) {
    +    var sortup = header.className.indexOf('down ') == 0;
    +    sortColumn(header, sortup);
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header in the given direction.
    +   */  
    +  function sortColumn(header, sortup) {
    +    var table = header.parentNode.parentNode.parentNode;
    +    var body = table.tBodies[0];
    +    var colidx = getNodePosition(header);
    +    
    +    resetSortedStyle(table);
    +    
    +    var rows = body.rows;
    +    var sortedrows = [];
    +    for (var i = 0; i < rows.length; i++) {
    +      r = rows[i];
    +      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    +    }
    +    
    +    var hash;
    +    
    +    if (sortup) {
    +      for (var i = sortedrows.length - 1; i >= 0; i--) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'up ' + header.className;
    +      hash = 'up-' + header.id;
    +    } else {
    +      for (var i = 0; i < sortedrows.length; i++) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'down ' + header.className;
    +      hash = 'dn-' + header.id;
    +    }
    +    
    +    setHash(hash);
    +  }
    +
    +  /**
    +   * Adds the sort indicator as a hash to the document URL and all links.
    +   */
    +  function setHash(hash) {
    +    window.document.location.hash = hash;
    +    ids = window.linkelementids;
    +    for (var i = 0; i < ids.length; i++) {
    +        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    +    }
    +  }
    +
    +  /**
    +   * Extend all links within the given tag with the given hash.
    +   */
    +  function setHashOnAllLinks(tag, hash) {
    +    links = tag.getElementsByTagName("a");
    +    for (var i = 0; i < links.length; i++) {
    +        var a = links[i];
    +        var href = a.href;
    +        var hashpos = href.indexOf("#");
    +        if (hashpos != -1) {
    +            href = href.substring(0, hashpos);
    +        } 
    +        a.href = href + "#" + hash;
    +    }
    +  }
    +
    +  /**
    +   * Calculates the position of a element within its parent.
    +   */  
    +  function getNodePosition(element) {
    +    var pos = -1;
    +    while (element) {
    +      element = element.previousSibling;
    +      pos++;
    +    }
    +    return pos;
    +  }
    +
    +  /**
    +   * Remove the sorting indicator style from all headers.
    +   */
    +  function resetSortedStyle(table) {
    +    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    +      if (c.className) {
    +        if (c.className.indexOf('down ') == 0) {
    +          c.className = c.className.slice(5);
    +        }
    +        if (c.className.indexOf('up ') == 0) {
    +          c.className = c.className.slice(3);
    +        }
    +      }
    +    }
    +  }
    +  
    +  window['initialSort'] = initialSort;
    +  window['toggleSort'] = toggleSort;
    +
    +})();
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/.resources/source.gif b/4143760-4167562/coverage/.resources/source.gif
    new file mode 100644
    index 000000000..b226e41c5
    Binary files /dev/null and b/4143760-4167562/coverage/.resources/source.gif differ
    diff --git a/4143760-4167562/coverage/.resources/up.gif b/4143760-4167562/coverage/.resources/up.gif
    new file mode 100644
    index 000000000..58ed21660
    Binary files /dev/null and b/4143760-4167562/coverage/.resources/up.gif differ
    diff --git a/4143760-4167562/coverage/.sessions.html b/4143760-4167562/coverage/.sessions.html
    new file mode 100644
    index 000000000..7af38fa22
    --- /dev/null
    +++ b/4143760-4167562/coverage/.sessions.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href=".resources/report.css" type="text/css"/><link rel="shortcut icon" href=".resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href=".sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">anton-Aspire-5750G-8e5052b8</span></td><td>Jan 15, 2015 3:49:06 PM</td><td>Jan 15, 2015 3:49:07 PM</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">com.sun.proxy..Proxy1</span></td><td><code>f7553b42294540c4</code></td></tr><tr><td><span class="el_class">com.sun.proxy..Proxy2</span></td><td><code>75a091971a812416</code></td></tr><tr><td><span class="el_class">com.sun.proxy..Proxy3</span></td><td><code>1d6f959b2ec97829</code></td></tr><tr><td><a href="core/src_test_java/eu.sqooss.admin.test/AdminServiceImplTest.html" class="el_class">eu.sqooss.admin.test.AdminServiceImplTest</a></td><td><code>e37e4120462c2dd0</code></td></tr><tr><td><a href="core/src_test_java/eu.sqooss.admin.test/FailingAction.html" class="el_class">eu.sqooss.admin.test.FailingAction</a></td><td><code>a9c6ea77603f2a0d</code></td></tr><tr><td><a href="core/src_test_java/eu.sqooss.admin.test/SucceedingAction.html" class="el_class">eu.sqooss.admin.test.SucceedingAction</a></td><td><code>53fdaf269d81bd9d</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.core/AlitheiaCore.html" class="el_class">eu.sqooss.core.AlitheiaCore</a></td><td><code>b06a67511613e06b</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl.html" class="el_class">eu.sqooss.impl.service.admin.AdminServiceImpl</a></td><td><code>7c0bf099dae5d873</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl$ActionContainer.html" class="el_class">eu.sqooss.impl.service.admin.AdminServiceImpl.ActionContainer</a></td><td><code>0e5c5fe2b3d5152e</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.impl.service.scheduler/JobPriorityComparator.html" class="el_class">eu.sqooss.impl.service.scheduler.JobPriorityComparator</a></td><td><code>b7f01ea648a5c84f</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.impl.service.scheduler/SchedulerServiceImpl.html" class="el_class">eu.sqooss.impl.service.scheduler.SchedulerServiceImpl</a></td><td><code>639db92527a509de</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl.html" class="el_class">eu.sqooss.impl.service.scheduler.WorkerThreadImpl</a></td><td><code>bbd177f2900f09dd</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.service.admin/AdminAction$AdminActionStatus.html" class="el_class">eu.sqooss.service.admin.AdminAction.AdminActionStatus</a></td><td><code>0f6b824e6838acf7</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.service.admin/AdminActionBase.html" class="el_class">eu.sqooss.service.admin.AdminActionBase</a></td><td><code>e3ce0ad4c924c545</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.service.admin.actions/RunTimeInfo.html" class="el_class">eu.sqooss.service.admin.actions.RunTimeInfo</a></td><td><code>e3e759549481e2ca</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.service.scheduler/Job.html" class="el_class">eu.sqooss.service.scheduler.Job</a></td><td><code>2289fdb9702f9487</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.service.scheduler/Job$State.html" class="el_class">eu.sqooss.service.scheduler.Job.State</a></td><td><code>6d88b1159acd40db</code></td></tr><tr><td><a href="core/src_main_java/eu.sqooss.service.scheduler/SchedulerStats.html" class="el_class">eu.sqooss.service.scheduler.SchedulerStats</a></td><td><code>efb5b0d2cccdcccb</code></td></tr><tr><td><a href="core/src_test_java/eu.sqooss.test.service.scheduler/SchedulerTests.html" class="el_class">eu.sqooss.test.service.scheduler.SchedulerTests</a></td><td><code>dac2f106897b6857</code></td></tr><tr><td><a href="core/src_test_java/eu.sqooss.test.service.scheduler/TestJob.html" class="el_class">eu.sqooss.test.service.scheduler.TestJob</a></td><td><code>2b2f4441a0f1acd7</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit.runner.DefaultClassifier</span></td><td><code>4484a9a59adb3361</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit.runner.FirstRunExecutionListener</span></td><td><code>b4131ab1cf51c9dd</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit.runner.RemoteTestRunner</span></td><td><code>0806b04d936face5</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.ReaderThread</span></td><td><code>b178f2452a3665d3</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit.runner.TestExecution</span></td><td><code>e652a18f68b6d4d4</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit.runner.TestIdMap</span></td><td><code>92a1552568c37473</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit4.runner.JUnit4Identifier</span></td><td><code>594205fb27f73919</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference</span></td><td><code>e20c5e5a9511a68a</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener</span></td><td><code>2a7658cee04f69e3</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader</span></td><td><code>d99b2ef43e443a2c</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference</span></td><td><code>eab92aebde27b204</code></td></tr><tr><td><span class="el_class">org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.1</span></td><td><code>ad95a94a0e1977d9</code></td></tr><tr><td><span class="el_class">org.junit.Assert</span></td><td><code>bb0b89a51655f358</code></td></tr><tr><td><span class="el_class">org.junit.internal.builders.AllDefaultPossibilitiesBuilder</span></td><td><code>9f0b6651e0a6143c</code></td></tr><tr><td><span class="el_class">org.junit.internal.builders.AnnotatedBuilder</span></td><td><code>e290acf2d6f2a6e3</code></td></tr><tr><td><span class="el_class">org.junit.internal.builders.IgnoredBuilder</span></td><td><code>f160483bac2daa44</code></td></tr><tr><td><span class="el_class">org.junit.internal.builders.JUnit3Builder</span></td><td><code>1d0b71c73d0a1824</code></td></tr><tr><td><span class="el_class">org.junit.internal.builders.JUnit4Builder</span></td><td><code>590adc31cb3b5187</code></td></tr><tr><td><span class="el_class">org.junit.internal.builders.SuiteMethodBuilder</span></td><td><code>f1b9a8fdf76a7079</code></td></tr><tr><td><span class="el_class">org.junit.internal.requests.ClassRequest</span></td><td><code>e25907b0dee0f359</code></td></tr><tr><td><span class="el_class">org.junit.internal.runners.model.EachTestNotifier</span></td><td><code>303c6371cfb22d9f</code></td></tr><tr><td><span class="el_class">org.junit.internal.runners.model.ReflectiveCallable</span></td><td><code>bcde50243a1f3296</code></td></tr><tr><td><span class="el_class">org.junit.internal.runners.statements.InvokeMethod</span></td><td><code>b4a4a7dfc9a2edd0</code></td></tr><tr><td><span class="el_class">org.junit.internal.runners.statements.RunAfters</span></td><td><code>1c0447f041cff036</code></td></tr><tr><td><span class="el_class">org.junit.internal.runners.statements.RunBefores</span></td><td><code>9cf6a334df748340</code></td></tr><tr><td><span class="el_class">org.junit.runner.Description</span></td><td><code>b374aaac44d9ef66</code></td></tr><tr><td><span class="el_class">org.junit.runner.Request</span></td><td><code>c40ddcc4cd52e0ed</code></td></tr><tr><td><span class="el_class">org.junit.runner.Result</span></td><td><code>58ae0b317f237c53</code></td></tr><tr><td><span class="el_class">org.junit.runner.Result.Listener</span></td><td><code>7dacea15e65b2013</code></td></tr><tr><td><span class="el_class">org.junit.runner.Runner</span></td><td><code>481d75e3922ecb57</code></td></tr><tr><td><span class="el_class">org.junit.runner.manipulation.Sorter</span></td><td><code>2395c8986220cd8c</code></td></tr><tr><td><span class="el_class">org.junit.runner.manipulation.Sorter.1</span></td><td><code>6c1c83c1cb4eee24</code></td></tr><tr><td><span class="el_class">org.junit.runner.notification.RunListener</span></td><td><code>c0d4529bc131da1b</code></td></tr><tr><td><span class="el_class">org.junit.runner.notification.RunNotifier</span></td><td><code>704ef606d02af779</code></td></tr><tr><td><span class="el_class">org.junit.runner.notification.RunNotifier.1</span></td><td><code>fe081c17bd793cac</code></td></tr><tr><td><span class="el_class">org.junit.runner.notification.RunNotifier.2</span></td><td><code>5e4b6e26fbbbf93c</code></td></tr><tr><td><span class="el_class">org.junit.runner.notification.RunNotifier.3</span></td><td><code>34c7595f8dfa9dab</code></td></tr><tr><td><span class="el_class">org.junit.runner.notification.RunNotifier.7</span></td><td><code>f41bb0ee958ebf54</code></td></tr><tr><td><span class="el_class">org.junit.runner.notification.RunNotifier.SafeNotifier</span></td><td><code>d377b314a001b096</code></td></tr><tr><td><span class="el_class">org.junit.runners.BlockJUnit4ClassRunner</span></td><td><code>a883db3f0b32cab4</code></td></tr><tr><td><span class="el_class">org.junit.runners.BlockJUnit4ClassRunner.1</span></td><td><code>9b27c5400bae0ac6</code></td></tr><tr><td><span class="el_class">org.junit.runners.ParentRunner</span></td><td><code>3761e9a1b599c850</code></td></tr><tr><td><span class="el_class">org.junit.runners.ParentRunner.1</span></td><td><code>11ca8a582792ae39</code></td></tr><tr><td><span class="el_class">org.junit.runners.ParentRunner.2</span></td><td><code>c78a9a603058beeb</code></td></tr><tr><td><span class="el_class">org.junit.runners.model.FrameworkMethod</span></td><td><code>4b4719550a662796</code></td></tr><tr><td><span class="el_class">org.junit.runners.model.FrameworkMethod.1</span></td><td><code>da0b01a57b964485</code></td></tr><tr><td><span class="el_class">org.junit.runners.model.RunnerBuilder</span></td><td><code>bfc3ed3da097923e</code></td></tr><tr><td><span class="el_class">org.junit.runners.model.Statement</span></td><td><code>f119da5de27bf584</code></td></tr><tr><td><span class="el_class">org.junit.runners.model.TestClass</span></td><td><code>4e6e82196ba540d2</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/index.html b/4143760-4167562/coverage/before/core/index.html
    new file mode 100644
    index 000000000..11682da55
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../.resources/report.gif" type="image/gif"/><title>core</title><script type="text/javascript" src="../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../.sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <span class="el_group">core</span></div><h1>core</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">38,020 of 39,544</td><td class="ctr2">4%</td><td class="bar">2,898 of 2,962</td><td class="ctr2">2%</td><td class="ctr1">3,001</td><td class="ctr2">3,102</td><td class="ctr1">8,389</td><td class="ctr2">8,768</td><td class="ctr1">1,517</td><td class="ctr2">1,606</td><td class="ctr1">153</td><td class="ctr2">170</td></tr></tfoot><tbody><tr><td id="a0"><a href="src_main_java/index.html" class="el_bundle">src/main/java</a></td><td class="bar" id="b0"><img src="../.resources/redbar.gif" width="116" height="10" title="37,980" alt="37,980"/><img src="../.resources/greenbar.gif" width="3" height="10" title="1,200" alt="1,200"/></td><td class="ctr2" id="c1">3%</td><td class="bar" id="d0"><img src="../.resources/redbar.gif" width="117" height="10" title="2,895" alt="2,895"/><img src="../.resources/greenbar.gif" width="2" height="10" title="61" alt="61"/></td><td class="ctr2" id="e1">2%</td><td class="ctr1" id="f0">2,995</td><td class="ctr2" id="g0">3,075</td><td class="ctr1" id="h0">8,376</td><td class="ctr2" id="i0">8,660</td><td class="ctr1" id="j0">1,513</td><td class="ctr2" id="k0">1,582</td><td class="ctr1" id="l0">153</td><td class="ctr2" id="m0">165</td></tr><tr><td id="a2"><a href="src_test_java/index.html" class="el_bundle">src/test/java</a></td><td class="bar" id="b1"/><td class="ctr2" id="c0">89%</td><td class="bar" id="d1"/><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">27</td><td class="ctr1" id="h1">13</td><td class="ctr2" id="i1">108</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">24</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">5</td></tr><tr><td id="a1"><a href="src_main_resources/index.html" class="el_bundle">src/main/resources</a></td><td class="bar" id="b2"/><td class="ctr2" id="c2">n/a</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">0</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">0</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">0</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">0</td></tr><tr><td id="a3"><a href="src_test_resources/index.html" class="el_bundle">src/test/resources</a></td><td class="bar" id="b3"/><td class="ctr2" id="c3">n/a</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">0</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">0</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">0</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m3">0</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/AlitheiaCore.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/AlitheiaCore.html
    new file mode 100644
    index 000000000..d1e2a42c5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/AlitheiaCore.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AlitheiaCore</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.core</a> &gt; <span class="el_class">AlitheiaCore</span></div><h1>AlitheiaCore</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">361 of 474</td><td class="ctr2">24%</td><td class="bar">20 of 20</td><td class="ctr2">0%</td><td class="ctr1">31</td><td class="ctr2">33</td><td class="ctr1">77</td><td class="ctr2">104</td><td class="ctr1">21</td><td class="ctr2">23</td></tr></tfoot><tbody><tr><td id="a17"><a href="AlitheiaCore.java.html#L225" class="el_method">initService(Class)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="109" height="10" title="101" alt="101"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">20</td><td class="ctr2" id="i1">20</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a16"><a href="AlitheiaCore.java.html#L200" class="el_method">init()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="96" height="10" title="89" alt="89"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">16</td><td class="ctr2" id="i2">16</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a19"><a href="AlitheiaCore.java.html#L262" class="el_method">shutDown()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="41" height="10" title="38" alt="38"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h2">10</td><td class="ctr2" id="i3">10</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="AlitheiaCore.java.html#L137" class="el_method">AlitheiaCore(BundleContext)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="19" height="10" title="18" alt="18"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i4">7</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a18"><a href="AlitheiaCore.java.html#L176" class="el_method">registerService(Class, Class)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="18" height="10" title="17" alt="17"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="AlitheiaCore.java.html#L419" class="el_method">err(String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="10" height="10" title="10" alt="10"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="AlitheiaCore.java.html#L322" class="el_method">canLee(boolean)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="8" height="10" title="8" alt="8"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a21"><a href="AlitheiaCore.java.html#L161" class="el_method">testInstance()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="7" height="10" title="7" alt="7"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="AlitheiaCore.java.html#L283" class="el_method">getLogManager()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a15"><a href="AlitheiaCore.java.html#L292" class="el_method">getWebadminService()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a10"><a href="AlitheiaCore.java.html#L301" class="el_method">getPluginAdmin()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a6"><a href="AlitheiaCore.java.html#L334" class="el_method">getFDSService()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a11"><a href="AlitheiaCore.java.html#L346" class="el_method">getScheduler()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a12"><a href="AlitheiaCore.java.html#L358" class="el_method">getSecurityManager()</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a13"><a href="AlitheiaCore.java.html#L370" class="el_method">getTDSService()</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a14"><a href="AlitheiaCore.java.html#L382" class="el_method">getUpdater()</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a4"><a href="AlitheiaCore.java.html#L394" class="el_method">getClusterNodeService()</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a9"><a href="AlitheiaCore.java.html#L406" class="el_method">getMetricActivator()</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a3"><a href="AlitheiaCore.java.html#L415" class="el_method">getAdminService()</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a22"><a href="AlitheiaCore.java.html#L189" class="el_method">unregisterService(Class)</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="5" height="10" title="5" alt="5"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a5"><a href="AlitheiaCore.java.html#L311" class="el_method">getDBService()</a></td><td class="bar" id="b20"><img src="../../../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a20"><a href="AlitheiaCore.java.html#L86" class="el_method">static {...}</a></td><td class="bar" id="b21"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="111" alt="111"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">0</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">0</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j21">0</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a7"><a href="AlitheiaCore.java.html#L156" class="el_method">getInstance()</a></td><td class="bar" id="b22"><img src="../../../.resources/greenbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">0</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">0</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">0</td><td class="ctr2" id="k22">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/AlitheiaCore.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/AlitheiaCore.java.html
    new file mode 100644
    index 000000000..e5d15fea2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/AlitheiaCore.java.html
    @@ -0,0 +1,424 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AlitheiaCore.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.core</a> &gt; <span class="el_source">AlitheiaCore.java</span></div><h1>AlitheiaCore.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.core;
    +
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.HashMap;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Vector;
    +
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.impl.service.admin.AdminServiceImpl;
    +import eu.sqooss.impl.service.cluster.ClusterNodeServiceImpl;
    +import eu.sqooss.impl.service.db.DBServiceImpl;
    +import eu.sqooss.impl.service.fds.FDSServiceImpl;
    +import eu.sqooss.impl.service.logging.LogManagerImpl;
    +import eu.sqooss.impl.service.metricactivator.MetricActivatorImpl;
    +import eu.sqooss.impl.service.pa.PAServiceImpl;
    +import eu.sqooss.impl.service.rest.ResteasyServiceImpl;
    +import eu.sqooss.impl.service.scheduler.SchedulerServiceImpl;
    +import eu.sqooss.impl.service.tds.TDSServiceImpl;
    +import eu.sqooss.impl.service.updater.UpdaterServiceImpl;
    +import eu.sqooss.impl.service.webadmin.WebadminServiceImpl;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
    +import eu.sqooss.service.admin.AdminService;
    +import eu.sqooss.service.cluster.ClusterNodeService;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.fds.FDSService;
    +import eu.sqooss.service.logging.LogManager;
    +import eu.sqooss.service.rest.RestService;
    +import eu.sqooss.service.scheduler.Scheduler;
    +import eu.sqooss.service.tds.TDSService;
    +import eu.sqooss.service.updater.UpdaterService;
    +import eu.sqooss.service.webadmin.WebadminService;
    +
    +/**
    + * Startup class of the Alitheia framework's core. Its main goal is to
    + * initialize all core components and be able to provide them upon request.
    + * There is one AlitheiaCore instance which may be retrieved statically
    + * through getInstance(); after that you can use the get*Service() methods
    + * to get each of the other core components as needed.
    + */
    +public class AlitheiaCore {
    +
    +    /** The Logger component's instance. */
    +    private LogManagerImpl logger;
    +    
    +    /** The parent bundle's context object. */
    +    private BundleContext bc;
    +    
    +    /** The Core is singleton-line because it has a special instance */
    +<span class="fc" id="L86">    private static AlitheiaCore instance = null;</span>
    +    
    +    /** Holds initialised service instances */
    +    private HashMap&lt;Class&lt;? extends AlitheiaCoreService&gt;, Object&gt; instances;
    +    
    +    /* Service Configuration */
    +    private static Vector&lt;Class&lt;? extends AlitheiaCoreService&gt;&gt; services;
    +    private static Map&lt;Class&lt;? extends AlitheiaCoreService&gt;, Class&lt;?&gt;&gt; implementations;
    +
    +    static {
    +<span class="fc" id="L96">        services = new Vector&lt;Class&lt;? extends AlitheiaCoreService&gt;&gt;();</span>
    +<span class="fc" id="L97">        implementations = new HashMap&lt;Class&lt;? extends AlitheiaCoreService&gt;, Class&lt;?&gt;&gt;();</span>
    +
    +    	/* 
    +    	 * Order matters here as services are initialised 
    +    	 * in the order they appear in this list
    +    	 */
    +    	//The following two services are started manually
    +    	//services.add(LogManager.class); 
    +    	//services.add(DBService.class);	
    +    	//All services after this point are guaranteed to have access to the DB 
    +<span class="fc" id="L107">    	services.add(PluginAdmin.class);</span>
    +<span class="fc" id="L108">    	services.add(Scheduler.class);</span>
    +<span class="fc" id="L109">    	services.add(TDSService.class);</span>
    +<span class="fc" id="L110">    	services.add(ClusterNodeService.class);</span>
    +<span class="fc" id="L111">    	services.add(FDSService.class);</span>
    +<span class="fc" id="L112">    	services.add(MetricActivator.class);</span>
    +<span class="fc" id="L113">    	services.add(UpdaterService.class);</span>
    +<span class="fc" id="L114">    	services.add(WebadminService.class);</span>
    +<span class="fc" id="L115">    	services.add(RestService.class);</span>
    +<span class="fc" id="L116">    	services.add(AdminService.class);</span>
    +
    +<span class="fc" id="L118">    	implementations.put(LogManager.class, LogManagerImpl.class);</span>
    +<span class="fc" id="L119">    	implementations.put(DBService.class, DBServiceImpl.class);	 </span>
    +<span class="fc" id="L120">    	implementations.put(PluginAdmin.class, PAServiceImpl.class);</span>
    +<span class="fc" id="L121">    	implementations.put(Scheduler.class, SchedulerServiceImpl.class);</span>
    +<span class="fc" id="L122">    	implementations.put(TDSService.class, TDSServiceImpl.class);</span>
    +<span class="fc" id="L123">    	implementations.put(ClusterNodeService.class, ClusterNodeServiceImpl.class);</span>
    +<span class="fc" id="L124">    	implementations.put(FDSService.class, FDSServiceImpl.class);</span>
    +<span class="fc" id="L125">    	implementations.put(MetricActivator.class, MetricActivatorImpl.class);</span>
    +<span class="fc" id="L126">    	implementations.put(UpdaterService.class, UpdaterServiceImpl.class);</span>
    +<span class="fc" id="L127">    	implementations.put(WebadminService.class, WebadminServiceImpl.class);</span>
    +<span class="fc" id="L128">        implementations.put(RestService.class, ResteasyServiceImpl.class);</span>
    +<span class="fc" id="L129">    	implementations.put(AdminService.class, AdminServiceImpl.class);</span>
    +<span class="fc" id="L130">    }</span>
    +   
    +    /**
    +     * Simple constructor.
    +     * 
    +     * @param bc The parent bundle's context object.
    +     */
    +<span class="nc" id="L137">    public AlitheiaCore(BundleContext bc) {</span>
    +<span class="nc" id="L138">        this.bc = bc;</span>
    +<span class="nc" id="L139">        instance = this;</span>
    +<span class="nc" id="L140">        err(&quot;Instance Created&quot;);</span>
    +        
    +<span class="nc" id="L142">        instances = new HashMap&lt;Class&lt;? extends AlitheiaCoreService&gt;, Object&gt;();</span>
    +<span class="nc" id="L143">        init();</span>
    +<span class="nc" id="L144">    }</span>
    +
    +    /**
    +     * The core has a blessed instance which you can get from here;
    +     * that instance in turn will give you the DB service and others
    +     * that it holds on to. So code that needs a particular service
    +     * can use AlitheiaCore.getInstance().get*Service() to get
    +     * a reference to specific services.
    +     * 
    +     * @return Instance, or null if it's not initialized yet
    +     */
    +    public static AlitheiaCore getInstance() {
    +<span class="fc" id="L156">        return instance;</span>
    +    }
    +    
    +    /*Create a temp instance to use for testing.*/
    +    public static AlitheiaCore testInstance() {
    +<span class="nc" id="L161">        instance = new AlitheiaCore(null);</span>
    +<span class="nc" id="L162">        return instance;</span>
    +    }
    +    
    +    /**
    +     * Register an external implementation of an AlitheiaCore service. It
    +     * will override any internally defined implementation.
    +     *
    +     * @param service The service interface to register an implementation for
    +     * @param clazz The class that implements the registered service
    +     */
    +    public synchronized void registerService(
    +            Class&lt;? extends AlitheiaCoreService&gt; service,
    +            Class&lt;?&gt; clazz) {
    +
    +<span class="nc bnc" id="L176" title="All 2 branches missed.">        if (!services.contains(service))</span>
    +<span class="nc" id="L177">            services.add(service);</span>
    +<span class="nc" id="L178">        implementations.put(service, clazz);</span>
    +<span class="nc" id="L179">        initService(service);</span>
    +<span class="nc" id="L180">    }</span>
    +
    +    /**
    +     * Unregisters an external implementation of an Alitheia Core service. 
    +     * This method does not check if external entities hold references to the
    +     * service to be unregistered.
    +     */
    +    public synchronized void unregisterService(
    +            Class&lt;? extends AlitheiaCoreService&gt; service) {
    +<span class="nc" id="L189">        implementations.remove(service);</span>
    +<span class="nc" id="L190">    }</span>
    +
    +    /**
    +     * This method performs initialization of the &lt;code&gt;AlitheiaCore&lt;/code&gt;
    +     * object by instantiating the core components, by calling the 
    +     * method on their service interface. Failures are reported but do not 
    +     * block the instatiation process).
    +     */
    +    private void init() {
    +
    +<span class="nc" id="L200">        err(&quot;Required services online, initialising&quot;);</span>
    +
    +<span class="nc" id="L202">        logger = new LogManagerImpl();</span>
    +<span class="nc" id="L203">        logger.setInitParams(bc, null);</span>
    +<span class="nc bnc" id="L204" title="All 2 branches missed.">        if (!logger.startUp()) {</span>
    +<span class="nc" id="L205">            err(&quot;Cannot start the log service, aborting&quot;);</span>
    +        }
    +<span class="nc" id="L207">        instances.put(LogManager.class, logger);</span>
    +<span class="nc" id="L208">        err(&quot;Service &quot; + LogManagerImpl.class.getName() + &quot; started&quot;);</span>
    +
    +<span class="nc" id="L210">        DBService db = DBServiceImpl.getInstance();</span>
    +<span class="nc" id="L211">        db.setInitParams(bc, logger.createLogger(&quot;sqooss.db&quot;));</span>
    +<span class="nc bnc" id="L212" title="All 2 branches missed.">        if (!db.startUp()) {</span>
    +<span class="nc" id="L213">            err(&quot;Cannot start the DB service, aborting&quot;);</span>
    +        }
    +<span class="nc" id="L215">        instances.put(DBService.class, db);</span>
    +<span class="nc" id="L216">        err(&quot;Service &quot; + DBServiceImpl.class.getName() + &quot; started&quot;);</span>
    +
    +<span class="nc bnc" id="L218" title="All 2 branches missed.">        for (Class&lt;? extends AlitheiaCoreService&gt; s : services) {</span>
    +<span class="nc" id="L219">            initService(s);</span>
    +        }
    +
    +<span class="nc" id="L222">    }</span>
    +
    +    private synchronized void initService(Class&lt;? extends AlitheiaCoreService&gt; s) {
    +<span class="nc" id="L225">        Class&lt;?&gt; impl = implementations.get(s);</span>
    +
    +<span class="nc bnc" id="L227" title="All 2 branches missed.">        if (impl == null) {</span>
    +<span class="nc" id="L228">            err(&quot;No implementation found for service &quot; + s);</span>
    +<span class="nc" id="L229">            return;</span>
    +        }
    +
    +        try {
    +<span class="nc" id="L233">            Object o = impl.newInstance();</span>
    +
    +<span class="nc bnc" id="L235" title="All 2 branches missed.">            if (o == null) {</span>
    +<span class="nc" id="L236">                err(&quot;Service object for service &quot; + s</span>
    +<span class="nc" id="L237">                        + &quot; could not be created&quot;);</span>
    +<span class="nc" id="L238">                return;</span>
    +            }
    +
    +            //Extract the unique service portion of the class FQN.
    +            //e.g. from eu.sqooss.service.db.DBService -&gt; db
    +<span class="nc" id="L243">            String[] paths = s.getCanonicalName().split(&quot;\\.&quot;);</span>
    +
    +            /* Logger names are constructed as per */
    +<span class="nc" id="L246">            s.cast(o).setInitParams(bc,</span>
    +<span class="nc" id="L247">                    logger.createLogger(&quot;sqooss.&quot; + paths[3]));</span>
    +
    +<span class="nc bnc" id="L249" title="All 2 branches missed.">            if (!s.cast(o).startUp()) {</span>
    +<span class="nc" id="L250">                err(&quot;Service &quot; + s + &quot; could not be started&quot;);</span>
    +<span class="nc" id="L251">                return;</span>
    +            }
    +
    +<span class="nc" id="L254">            instances.put(s, s.cast(o));</span>
    +<span class="nc" id="L255">            err(&quot;Service &quot; + impl.getName() + &quot; started&quot;);</span>
    +<span class="nc" id="L256">        } catch (Exception e) {</span>
    +<span class="nc" id="L257">            e.printStackTrace();</span>
    +        }
    +<span class="nc" id="L259">    }</span>
    +
    +    public void shutDown() {
    +<span class="nc" id="L262">    	List&lt;Class&lt;? extends AlitheiaCoreService&gt;&gt; revServices = </span>
    +<span class="nc" id="L263">    		new ArrayList&lt;Class&lt;? extends AlitheiaCoreService&gt;&gt;(services);</span>
    +<span class="nc" id="L264">    	Collections.reverse(revServices);</span>
    +    	
    +<span class="nc bnc" id="L266" title="All 2 branches missed.">    	for (Class&lt;? extends AlitheiaCoreService&gt; s : revServices) {</span>
    +<span class="nc" id="L267">    		Object o = instances.get(s);</span>
    +    		try	{
    +<span class="nc" id="L269">    			s.cast(o).shutDown();</span>
    +<span class="nc" id="L270">    			instances.remove(s);</span>
    +<span class="nc" id="L271">    		} catch (Throwable t) {</span>
    +<span class="nc" id="L272">    			t.printStackTrace();</span>
    +			}    		
    +    	}
    +<span class="nc" id="L275">	}</span>
    +
    +    /**
    +     * Returns the locally stored Logger component's instance.
    +     * 
    +     * @return The Logger component's instance.
    +     */
    +    public LogManager getLogManager() {
    +<span class="nc" id="L283">        return (LogManager)instances.get(LogManager.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored WebAdmin component's instance.
    +     * 
    +     * @return The WebAdmin component's instance.
    +     */
    +    public WebadminService getWebadminService() {
    +<span class="nc" id="L292">        return (WebadminService)instances.get(WebadminService.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored Plug-in Admin component's instance.
    +     * 
    +     * @return The Plug-in Admin component's instance.
    +     */
    +    public PluginAdmin getPluginAdmin() {
    +<span class="nc" id="L301">        return (PluginAdmin)instances.get(PluginAdmin.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored DB component's instance.
    +     * 
    +     * @return The DB component's instance.
    +     */
    +    public DBService getDBService() {
    +        //return (DBServiceImpl)instances.get(DBService.class);
    +<span class="nc" id="L311">        return DBServiceImpl.getInstance(); // &lt;-- Ugly but required for testing.</span>
    +    }
    +    
    +    /**
    +     * Unused check of the core instance for liveness. Because the instance
    +     * might not lee without the rest of the bikini services, we need to
    +     * check that they are present.
    +     * Added after evening discussion (&lt;i&gt;some 5 pints and a bunch of naked
    +     * bikini models later&lt;i&gt;) at Amarilia on liveness.
    +     */
    +    private static boolean canLee(boolean touLiBouDiBouDauTcou) {
    +<span class="nc bnc" id="L322" title="All 4 branches missed.">        return (null != instance) &amp;&amp; touLiBouDiBouDauTcou;</span>
    +    }
    +    
    +    /**
    +     * Returns the locally stored FDS component's instance.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;The instance is created when this method is called for a first
    +     * time.&lt;/i&gt;
    +     * 
    +     * @return The FDS component's instance.
    +     */
    +    public FDSService getFDSService() {
    +<span class="nc" id="L334">        return (FDSService)instances.get(FDSService.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored Scheduler component's instance.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;The instance is created when this method is called for a first
    +     * time.&lt;/i&gt;
    +     * 
    +     * @return The Scheduler component's instance.
    +     */
    +    public Scheduler getScheduler() {
    +<span class="nc" id="L346">        return (Scheduler)instances.get(Scheduler.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored Security component's instance.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;The instance is created when this method is called for a first
    +     * time.&lt;/i&gt;
    +     * 
    +     * @return The Security component's instance.
    +     */
    +    public SecurityManager getSecurityManager() {
    +<span class="nc" id="L358">        return (SecurityManager)instances.get(SecurityManager.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored TDS component's instance.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;The instance is created when this method is called for a first
    +     * time.&lt;/i&gt;
    +     * 
    +     * @return The TDS component's instance.
    +     */
    +    public TDSService getTDSService() {
    +<span class="nc" id="L370">        return (TDSService)instances.get(TDSService.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored Updater component's instance.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;The instance is created when this method is called for a first
    +     * time.&lt;/i&gt;
    +     * 
    +     * @return The Updater component's instance.
    +     */
    +    public UpdaterService getUpdater() {
    +<span class="nc" id="L382">        return (UpdaterService)instances.get(UpdaterService.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored ClusterNodeService component's instance.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;The instance is created when this method is called for a first
    +     * time.&lt;/i&gt;
    +     * 
    +     * @return The ClusterNodeSerive component's instance.
    +     */
    +    public ClusterNodeService getClusterNodeService() {
    +<span class="nc" id="L394">        return (ClusterNodeService)instances.get(ClusterNodeService.class);</span>
    +    }
    +
    +    /**
    +     * Returns the locally stored Metric Activator component's instance.
    +     * 
    +     * &lt;i&gt;The instance is created when this method is called for a first
    +     * time.&lt;/i&gt;
    +     * 
    +     * @return The Metric Activator component's instance.
    +     */
    +    public MetricActivator getMetricActivator() {
    +<span class="nc" id="L406">    	return (MetricActivator)instances.get(MetricActivator.class);</span>
    +    }
    +    
    +    /**
    +     * Returns the locally stored Administration Service component's instance.
    +     * 
    +     * @return The Administration Service component's instance.
    +     */
    +    public AdminService getAdminService() {
    +<span class="nc" id="L415">    	return (AdminService)instances.get(AdminService.class);</span>
    +    }
    +	
    +	private void err(String msg) {
    +<span class="nc" id="L419">		System.err.println(&quot;AlitheiaCore: &quot; + msg);</span>
    +<span class="nc" id="L420">	}</span>
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/CoreActivator.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/CoreActivator.html
    new file mode 100644
    index 000000000..74979a5e3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/CoreActivator.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CoreActivator</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.core</a> &gt; <span class="el_class">CoreActivator</span></div><h1>CoreActivator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">32 of 32</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="CoreActivator.java.html#L50" class="el_method">start(BundleContext)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="CoreActivator.java.html#L55" class="el_method">stop(BundleContext)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="97" height="10" title="13" alt="13"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="CoreActivator.java.html#L41" class="el_method">CoreActivator()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="22" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/CoreActivator.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/CoreActivator.java.html
    new file mode 100644
    index 000000000..f21b6b715
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/CoreActivator.java.html
    @@ -0,0 +1,64 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CoreActivator.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.core</a> &gt; <span class="el_source">CoreActivator.java</span></div><h1>CoreActivator.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.core;
    +
    +import org.osgi.framework.BundleActivator;
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.ServiceRegistration;
    +
    +
    +<span class="nc" id="L41">public class CoreActivator implements BundleActivator {</span>
    +
    +    /** Keeps the &lt;code&gt;AlitheaCore&lt;/code&gt; instance. */
    +    private AlitheiaCore core;
    +    
    +    /** Keeps the &lt;code&gt;AlitheaCore&lt;/code&gt;'s service registration instance. */
    +    private ServiceRegistration sregCore;
    +
    +    public void start(BundleContext bc) throws Exception {
    +<span class="nc" id="L50">        core = new AlitheiaCore(bc);</span>
    +<span class="nc" id="L51">        sregCore = bc.registerService(AlitheiaCore.class.getName(), core, null);</span>
    +<span class="nc" id="L52">    }</span>
    +  
    +    public void stop(BundleContext bc) throws Exception {
    +<span class="nc" id="L55">    	core.shutDown();</span>
    +<span class="nc bnc" id="L56" title="All 2 branches missed.">    	if (sregCore != null) {</span>
    +<span class="nc" id="L57">    		sregCore.unregister();</span>
    +    	}
    +<span class="nc" id="L59">    	core = null;</span>
    +<span class="nc" id="L60">    }</span>
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/index.html
    new file mode 100644
    index 000000000..b230312bc
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.core</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.core</span></div><h1>eu.sqooss.core</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">393 of 506</td><td class="ctr2">22%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">35</td><td class="ctr2">37</td><td class="ctr1">86</td><td class="ctr2">113</td><td class="ctr1">24</td><td class="ctr2">26</td><td class="ctr1">1</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="AlitheiaCore.html" class="el_class">AlitheiaCore</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="91" height="10" title="361" alt="361"/><img src="../../../.resources/greenbar.gif" width="28" height="10" title="113" alt="113"/></td><td class="ctr2" id="c0">24%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">31</td><td class="ctr2" id="g0">33</td><td class="ctr1" id="h0">77</td><td class="ctr2" id="i0">104</td><td class="ctr1" id="j0">21</td><td class="ctr2" id="k0">23</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="CoreActivator.html" class="el_class">CoreActivator</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="8" height="10" title="32" alt="32"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">3</td><td class="ctr2" id="k1">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/index.source.html
    new file mode 100644
    index 000000000..0a70e6327
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.core/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.core</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.core</span></div><h1>eu.sqooss.core</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">393 of 506</td><td class="ctr2">22%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">35</td><td class="ctr2">37</td><td class="ctr1">86</td><td class="ctr2">113</td><td class="ctr1">24</td><td class="ctr2">26</td><td class="ctr1">1</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="AlitheiaCore.java.html" class="el_source">AlitheiaCore.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="91" height="10" title="361" alt="361"/><img src="../../../.resources/greenbar.gif" width="28" height="10" title="113" alt="113"/></td><td class="ctr2" id="c0">24%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">31</td><td class="ctr2" id="g0">33</td><td class="ctr1" id="h0">77</td><td class="ctr2" id="i0">104</td><td class="ctr1" id="j0">21</td><td class="ctr2" id="k0">23</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="CoreActivator.java.html" class="el_source">CoreActivator.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="8" height="10" title="32" alt="32"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">3</td><td class="ctr2" id="k1">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl$ActionContainer.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl$ActionContainer.html
    new file mode 100644
    index 000000000..2252278fa
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl$ActionContainer.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServiceImpl.ActionContainer</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.admin</a> &gt; <span class="el_class">AdminServiceImpl.ActionContainer</span></div><h1>AdminServiceImpl.ActionContainer</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 15</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AdminServiceImpl.java.html#L212" class="el_method">AdminServiceImpl.ActionContainer(AdminServiceImpl, AdminAction)</a></td><td class="bar" id="b0"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl.html
    new file mode 100644
    index 000000000..6090d03c4
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.admin</a> &gt; <span class="el_class">AdminServiceImpl</span></div><h1>AdminServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">225 of 517</td><td class="ctr2">56%</td><td class="bar">38 of 56</td><td class="ctr2">32%</td><td class="ctr1">31</td><td class="ctr2">49</td><td class="ctr1">45</td><td class="ctr2">104</td><td class="ctr1">8</td><td class="ctr2">21</td></tr></tfoot><tbody><tr><td id="a6"><a href="AdminServiceImpl.java.html#L99" class="el_method">execute(AdminAction)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="48" height="10" title="75" alt="75"/><img src="../../../.resources/greenbar.gif" width="71" height="10" title="111" alt="111"/></td><td class="ctr2" id="c7">60%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="101" height="10" title="22" alt="22"/><img src="../../../.resources/greenbar.gif" width="18" height="10" title="4" alt="4"/></td><td class="ctr2" id="e7">15%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">14</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">23</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a13"><a href="AdminServiceImpl.java.html#L158" class="el_method">result()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="18" height="10" title="29" alt="29"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="18" height="10" title="4" alt="4"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a20"><a href="AdminServiceImpl.java.html#L171" class="el_method">status()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="18" height="10" title="29" alt="29"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="18" height="10" title="4" alt="4"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="AdminServiceImpl.java.html#L132" class="el_method">getAdminActions()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="11" height="10" title="18" alt="18"/><img src="../../../.resources/greenbar.gif" width="16" height="10" title="25" alt="25"/></td><td class="ctr2" id="c8">58%</td><td class="bar" id="d9"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i3">8</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="AdminServiceImpl.java.html#L183" class="el_method">error()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="10" height="10" title="17" alt="17"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a18"><a href="AdminServiceImpl.java.html#L278" class="el_method">startUp()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="10" height="10" title="17" alt="17"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i7">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="AdminServiceImpl.java.html#L262" class="el_method">err(String)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="5" height="10" title="8" alt="8"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i10">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a11"><a href="AdminServiceImpl.java.html#L88" class="el_method">registerAction(String, Class)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a14"><a href="AdminServiceImpl.java.html#L225" class="el_method">run()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="3" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">44%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h7">3</td><td class="ctr2" id="i8">4</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a4"><a href="AdminServiceImpl.java.html#L267" class="el_method">err(String, Exception)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="3" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">44%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="4" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="4" height="10" title="1" alt="1"/></td><td class="ctr2" id="e4">50%</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">3</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="AdminServiceImpl.java.html#L257" class="el_method">debug(String)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="2" height="10" title="4" alt="4"/><img src="../../../.resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">50%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="4" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="4" height="10" title="1" alt="1"/></td><td class="ctr2" id="e5">50%</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">3</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a9"><a href="AdminServiceImpl.java.html#L272" class="el_method">info(String)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="2" height="10" title="4" alt="4"/><img src="../../../.resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">50%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="4" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="4" height="10" title="1" alt="1"/></td><td class="ctr2" id="e6">50%</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">3</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a15"><a href="AdminServiceImpl.java.html#L290" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a1"><a href="AdminServiceImpl.java.html#L192" class="el_method">create(String)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/><img src="../../../.resources/greenbar.gif" width="23" height="10" title="37" alt="37"/></td><td class="ctr2" id="c6">92%</td><td class="bar" id="d10"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h10">2</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a17"><a href="AdminServiceImpl.java.html#L286" class="el_method">shutDown()</a></td><td class="bar" id="b14"/><td class="ctr2" id="c20">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a7"><a href="AdminServiceImpl.java.html#L235" class="el_method">gc(long)</a></td><td class="bar" id="b15"><img src="../../../.resources/greenbar.gif" width="38" height="10" title="60" alt="60"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="4" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="23" height="10" title="5" alt="5"/></td><td class="ctr2" id="e3">83%</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i2">11</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a0"><a href="AdminServiceImpl.java.html#L78" class="el_method">AdminServiceImpl()</a></td><td class="bar" id="b16"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a16"><a href="AdminServiceImpl.java.html#L149" class="el_method">show(Long)</a></td><td class="bar" id="b17"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="14" alt="14"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d11"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i14">3</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a12"><a href="AdminServiceImpl.java.html#L94" class="el_method">registerAdminAction(String, Class)</a></td><td class="bar" id="b18"><img src="../../../.resources/greenbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">0</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">0</td><td class="ctr2" id="i17">2</td><td class="ctr1" id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a19"><a href="AdminServiceImpl.java.html#L69" class="el_method">static {...}</a></td><td class="bar" id="b19"><img src="../../../.resources/greenbar.gif" width="3" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">0</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">0</td><td class="ctr2" id="i18">2</td><td class="ctr1" id="j19">0</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a10"><a href="AdminServiceImpl.java.html#L253" class="el_method">liveactions()</a></td><td class="bar" id="b20"><img src="../../../.resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">0</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">0</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">0</td><td class="ctr2" id="k20">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl.java.html
    new file mode 100644
    index 000000000..03ac01a61
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/AdminServiceImpl.java.html
    @@ -0,0 +1,293 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.admin</a> &gt; <span class="el_source">AdminServiceImpl.java</span></div><h1>AdminServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.admin;
    +
    +import java.util.HashMap;
    +import java.util.HashSet;
    +import java.util.Iterator;
    +import java.util.Map;
    +import java.util.Set;
    +import java.util.concurrent.ConcurrentHashMap;
    +import java.util.concurrent.ConcurrentMap;
    +import java.util.concurrent.atomic.AtomicLong;
    +
    +import javax.ws.rs.GET;
    +import javax.ws.rs.POST;
    +import javax.ws.rs.Path;
    +import javax.ws.rs.Produces;
    +
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.admin.AdminAction;
    +import eu.sqooss.service.admin.AdminService;
    +import eu.sqooss.service.admin.AdminAction.AdminActionStatus;
    +import eu.sqooss.service.admin.actions.AddProject;
    +import eu.sqooss.service.admin.actions.RunTimeInfo;
    +import eu.sqooss.service.admin.actions.UpdateProject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.logging.Logger;
    +
    +/**
    + * Implementation of the {@link AdminService} interface. Tracks all submitted
    + * actions and uses a background thread to delete old ones. 
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + */
    +@Path(&quot;/api&quot;)
    +public class AdminServiceImpl extends Thread implements AdminService {
    +
    +	static {
    +<span class="fc" id="L69">		services = new HashMap&lt;String, Class&lt;? extends AdminAction&gt;&gt;();</span>
    +	}
    +	
    +<span class="fc" id="L72">    static Map&lt;String, Class&lt;? extends AdminAction&gt;&gt; services;</span>
    +    ConcurrentMap&lt;Long, ActionContainer&gt; liveactions;
    +    AtomicLong id;
    +
    +    Logger log;
    +
    +<span class="fc" id="L78">    public AdminServiceImpl() {</span>
    +<span class="fc" id="L79">        liveactions = new ConcurrentHashMap&lt;Long, ActionContainer&gt;();</span>
    +<span class="fc" id="L80">        id = new AtomicLong();</span>
    +        //if (AlitheiaCore.getInstance() != null)
    +        //    log = AlitheiaCore.getInstance().getLogManager().createLogger(&quot;sqooss.admin&quot;);
    +<span class="fc" id="L83">        start();</span>
    +<span class="fc" id="L84">    }</span>
    +
    +    public static void registerAction(String uniq,
    +            Class&lt;? extends AdminAction&gt; clazz) {
    +<span class="nc" id="L88">    	services.put(uniq, clazz);</span>
    +<span class="nc" id="L89">    }</span>
    +    
    +    @Override
    +    public void registerAdminAction(String uniq,
    +            Class&lt;? extends AdminAction&gt; clazz) {
    +<span class="fc" id="L94">        services.put(uniq, clazz);</span>
    +<span class="fc" id="L95">    }</span>
    +
    +    @Override
    +    public void execute(AdminAction a) {
    +<span class="fc" id="L99">        boolean commitDB = false;</span>
    +<span class="fc" id="L100">        DBService db = null;</span>
    +<span class="pc bpc" id="L101" title="1 of 2 branches missed.">        if (AlitheiaCore.getInstance() != null) {</span>
    +<span class="nc" id="L102">            db = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc bnc" id="L103" title="All 2 branches missed.">            if (db.isDBSessionActive() != true) {</span>
    +<span class="nc" id="L104">                commitDB = true;</span>
    +<span class="nc" id="L105">                db.startDBSession();</span>
    +            }
    +        }
    +        
    +<span class="fc" id="L109">        debug(&quot;Executing action : &quot; + a.id() + &quot; &quot;);</span>
    +        try{
    +<span class="fc" id="L111">            a.execute();</span>
    +<span class="fc" id="L112">        } catch (Exception e) {</span>
    +<span class="pc bpc" id="L113" title="3 of 4 branches missed.">            if ((db != null) &amp;&amp; commitDB)</span>
    +<span class="nc" id="L114">                db.rollbackDBSession();</span>
    +<span class="fc" id="L115">            err(&quot;Error executing action &quot; + a.mnemonic() + &quot;, id &quot; + a.id() + </span>
    +<span class="fc" id="L116">                    &quot;\nCause:&quot; + e.getMessage(), e);</span>
    +<span class="nc" id="L117">        } finally {</span>
    +<span class="pc" id="L118">            ActionContainer ac = liveactions.get(a.id());</span>
    +<span class="pc bpc" id="L119" title="4 of 6 branches missed.">            if (db != null)</span>
    +<span class="nc bnc" id="L120" title="All 12 branches missed.">                if (db.isDBSessionActive() &amp;&amp; commitDB)</span>
    +<span class="nc" id="L121">                    db.commitDBSession();</span>
    +<span class="pc" id="L122">            ac.end = System.currentTimeMillis();</span>
    +<span class="pc" id="L123">            debug(&quot;Action &quot; + a.id() + &quot; finished in &quot; + (ac.end - ac.start) + &quot; msec&quot; );</span>
    +<span class="nc" id="L124">        }</span>
    +<span class="fc" id="L125">    }</span>
    +
    +    @GET
    +    @Produces({ &quot;application/xml&quot;, &quot;application/json&quot; })
    +    @Path(&quot;/actions/&quot;)
    +    @Override
    +    public Set&lt;AdminAction&gt; getAdminActions() {
    +<span class="fc" id="L132">        Set&lt;AdminAction&gt; actions = new HashSet&lt;AdminAction&gt;();</span>
    +<span class="fc bfc" id="L133" title="All 2 branches covered.">        for (Class&lt;? extends AdminAction&gt; aa : services.values()) {</span>
    +            try {
    +<span class="fc" id="L135">                actions.add(aa.newInstance());</span>
    +<span class="pc" id="L136">            } catch (Exception e) {</span>
    +<span class="nc" id="L137">                err(&quot;Error instantiating action: &quot;</span>
    +<span class="nc" id="L138">                        + aa.getCanonicalName() + &quot;: &quot; + e.getMessage());</span>
    +<span class="nc" id="L139">                return null;</span>
    +            }
    +        }
    +<span class="fc" id="L142">        return actions;</span>
    +    }
    +
    +    @GET
    +    @Produces({ &quot;application/xml&quot;, &quot;application/json&quot; })
    +    @Path(&quot;/actions/{id}&quot;)
    +    public AdminAction show(Long id) {
    +<span class="fc bfc" id="L149" title="All 2 branches covered.">        if (liveactions.get(id) != null)</span>
    +<span class="fc" id="L150">            return liveactions.get(id).aa;</span>
    +<span class="fc" id="L151">        return null;</span>
    +    }
    +
    +    @GET
    +    @Produces({ &quot;application/xml&quot;, &quot;application/json&quot; })
    +    @Path(&quot;/actions/{id}/result&quot;)
    +    public Map&lt;String, Object&gt; result() {
    +<span class="nc bnc" id="L158" title="All 2 branches missed.">        if (liveactions.get(id) == null)</span>
    +<span class="nc" id="L159">            return null;</span>
    +
    +<span class="nc bnc" id="L161" title="All 2 branches missed.">        if (liveactions.get(id).end == -1)</span>
    +<span class="nc" id="L162">            return null;</span>
    +
    +<span class="nc" id="L164">        return liveactions.get(id).aa.results();</span>
    +    }
    +
    +    @GET
    +    @Produces({ &quot;application/xml&quot;, &quot;application/json&quot; })
    +    @Path(&quot;/actions/{id}/status&quot;)
    +    public AdminActionStatus status() {
    +<span class="nc bnc" id="L171" title="All 2 branches missed.">        if (liveactions.get(id) != null)</span>
    +<span class="nc" id="L172">            return liveactions.get(id).aa.status();</span>
    +
    +<span class="nc bnc" id="L174" title="All 2 branches missed.">        if (liveactions.get(id).end == -1)</span>
    +<span class="nc" id="L175">            return null;</span>
    +<span class="nc" id="L176">        return null;</span>
    +    }
    +
    +    @GET
    +    @Produces({ &quot;application/xml&quot;, &quot;application/json&quot; })
    +    @Path(&quot;/actions/{id}/error&quot;)
    +    public Map&lt;String, Object&gt; error() {
    +<span class="nc bnc" id="L183" title="All 2 branches missed.">        if (liveactions.get(id) != null)</span>
    +<span class="nc" id="L184">            return liveactions.get(id).aa.results();</span>
    +<span class="nc" id="L185">        return null;</span>
    +    }
    +
    +    @POST
    +    @Produces({ &quot;application/xml&quot;, &quot;application/json&quot; })
    +    @Path(&quot;/actions/{uniq}&quot;)
    +    public AdminAction create(String uniq) {
    +<span class="fc" id="L192">        Class&lt;? extends AdminAction&gt; clazz = services.get(uniq);</span>
    +
    +<span class="fc bfc" id="L194" title="All 2 branches covered.">        if (clazz == null)</span>
    +<span class="fc" id="L195">            return null;</span>
    +
    +        try {
    +<span class="fc" id="L198">            long aid = id.addAndGet(1);</span>
    +<span class="fc" id="L199">            AdminAction aa = clazz.newInstance();</span>
    +<span class="fc" id="L200">            aa.setId(aid);</span>
    +
    +<span class="fc" id="L202">            ActionContainer ac = new ActionContainer(aa);</span>
    +<span class="fc" id="L203">            liveactions.put(aa.id(), ac);</span>
    +<span class="fc" id="L204">            return aa;</span>
    +<span class="nc" id="L205">        } catch (Exception e) {</span>
    +<span class="nc" id="L206">            return null;</span>
    +        }
    +    }
    +
    +    public final class ActionContainer {
    +
    +<span class="fc" id="L212">        public ActionContainer(AdminAction aa) {</span>
    +<span class="fc" id="L213">            this.aa = aa;</span>
    +<span class="fc" id="L214">            this.start = System.currentTimeMillis();</span>
    +<span class="fc" id="L215">            this.end = -1;</span>
    +<span class="fc" id="L216">        }</span>
    +
    +        public AdminAction aa;
    +        public long start;
    +        public long end; // -1 means action not executed
    +    }
    +
    +    @Override
    +    public final void run() {
    +<span class="nc" id="L225">        while (true) {</span>
    +<span class="fc" id="L226">            gc(10 * 60 * 1000);</span>
    +            try {
    +<span class="nc" id="L228">                sleep(10 * 60 * 1000); //10 minutes</span>
    +<span class="nc" id="L229">            } catch (InterruptedException ignored) {}</span>
    +        }
    +    }
    +
    +    /* Delete actions older than time milliseconds */
    +    public final int gc(long time) {
    +<span class="fc" id="L235">        Iterator&lt;Long&gt; i = liveactions.keySet().iterator();</span>
    +<span class="fc" id="L236">        long ts = System.currentTimeMillis();</span>
    +<span class="fc" id="L237">        int count = 0;</span>
    +<span class="fc bfc" id="L238" title="All 2 branches covered.">        while (i.hasNext()) {</span>
    +<span class="fc" id="L239">            long id = i.next();</span>
    +<span class="fc bfc" id="L240" title="All 2 branches covered.">            if (liveactions.get(id).end &gt; -1 &amp;&amp; // Action executed</span>
    +<span class="pc bpc" id="L241" title="1 of 2 branches missed.">                    ts - liveactions.get(id).end &gt; time) {</span>
    +<span class="fc" id="L242">                liveactions.remove(id);</span>
    +<span class="fc" id="L243">                count++;</span>
    +            }
    +        }
    +<span class="fc" id="L246">        info(&quot;Action gc: removed &quot; + count +&quot; actions&quot;);</span>
    +<span class="fc" id="L247">        return count;</span>
    +    }
    +
    +    // Methods to help testing, not to be used elsewhere
    +    @Deprecated
    +    public ConcurrentMap&lt;Long, ActionContainer&gt; liveactions() {
    +<span class="fc" id="L253">        return liveactions;</span>
    +    }
    +    
    +    private void debug(String msg) {
    +<span class="pc bpc" id="L257" title="1 of 2 branches missed.">        if (log != null)</span>
    +<span class="nc" id="L258">            log.debug(msg);</span>
    +<span class="fc" id="L259">    }</span>
    +    
    +    private void err(String msg) {
    +<span class="nc bnc" id="L262" title="All 2 branches missed.">        if (log != null)</span>
    +<span class="nc" id="L263">            log.error(msg);</span>
    +<span class="nc" id="L264">    }</span>
    +    
    +    private void err(String msg, Exception e) {
    +<span class="pc bpc" id="L267" title="1 of 2 branches missed.">        if (log != null)</span>
    +<span class="nc" id="L268">            log.error(msg, e);</span>
    +<span class="fc" id="L269">    }</span>
    +        
    +    private void info(String msg) {
    +<span class="pc bpc" id="L272" title="1 of 2 branches missed.">        if (log != null)</span>
    +<span class="nc" id="L273">            log.info(msg);</span>
    +<span class="fc" id="L274">    }</span>
    +
    +	@Override
    +	public boolean startUp() {
    +<span class="nc" id="L278">		services.put(AddProject.MNEMONIC, AddProject.class);</span>
    +<span class="nc" id="L279">		services.put(RunTimeInfo.MNEMONIC, RunTimeInfo.class);</span>
    +<span class="nc" id="L280">		services.put(UpdateProject.MNEMONIC, UpdateProject.class);</span>
    +<span class="nc" id="L281">		return true;</span>
    +	}
    +
    +	@Override
    +	public void shutDown() {
    +<span class="nc" id="L286">	}</span>
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L290">		log = l;</span>
    +<span class="nc" id="L291">	}</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/index.html
    new file mode 100644
    index 000000000..3d35260a5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.admin</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.admin</span></div><h1>eu.sqooss.impl.service.admin</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">225 of 532</td><td class="ctr2">58%</td><td class="bar">38 of 56</td><td class="ctr2">32%</td><td class="ctr1">31</td><td class="ctr2">50</td><td class="ctr1">45</td><td class="ctr2">109</td><td class="ctr1">8</td><td class="ctr2">22</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="AdminServiceImpl.html" class="el_class">AdminServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="52" height="10" title="225" alt="225"/><img src="../../../.resources/greenbar.gif" width="67" height="10" title="292" alt="292"/></td><td class="ctr2" id="c1">56%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="81" height="10" title="38" alt="38"/><img src="../../../.resources/greenbar.gif" width="38" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">32%</td><td class="ctr1" id="f0">31</td><td class="ctr2" id="g0">49</td><td class="ctr1" id="h0">45</td><td class="ctr2" id="i0">104</td><td class="ctr1" id="j0">8</td><td class="ctr2" id="k0">21</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="AdminServiceImpl$ActionContainer.html" class="el_class">AdminServiceImpl.ActionContainer</a></td><td class="bar" id="b1"><img src="../../../.resources/greenbar.gif" width="3" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/index.source.html
    new file mode 100644
    index 000000000..a39fbf845
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.admin/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.admin</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.admin</span></div><h1>eu.sqooss.impl.service.admin</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">225 of 532</td><td class="ctr2">58%</td><td class="bar">38 of 56</td><td class="ctr2">32%</td><td class="ctr1">31</td><td class="ctr2">50</td><td class="ctr1">45</td><td class="ctr2">109</td><td class="ctr1">8</td><td class="ctr2">22</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="AdminServiceImpl.java.html" class="el_source">AdminServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="50" height="10" title="225" alt="225"/><img src="../../../.resources/greenbar.gif" width="69" height="10" title="307" alt="307"/></td><td class="ctr2" id="c0">58%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="81" height="10" title="38" alt="38"/><img src="../../../.resources/greenbar.gif" width="38" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">32%</td><td class="ctr1" id="f0">31</td><td class="ctr2" id="g0">50</td><td class="ctr1" id="h0">45</td><td class="ctr2" id="i0">109</td><td class="ctr1" id="j0">8</td><td class="ctr2" id="k0">22</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/ClusterNodeServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/ClusterNodeServiceImpl.html
    new file mode 100644
    index 000000000..6d9ba871a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/ClusterNodeServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ClusterNodeServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.cluster</a> &gt; <span class="el_class">ClusterNodeServiceImpl</span></div><h1>ClusterNodeServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">892 of 892</td><td class="ctr2">0%</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="ctr1">44</td><td class="ctr2">44</td><td class="ctr1">205</td><td class="ctr2">205</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a5"><a href="ClusterNodeServiceImpl.java.html#L235" class="el_method">doGet(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="433" alt="433"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">19</td><td class="ctr2" id="g0">19</td><td class="ctr1" id="h0">88</td><td class="ctr2" id="i0">88</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a11"><a href="ClusterNodeServiceImpl.java.html#L399" class="el_method">startUp()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="47" height="10" title="171" alt="171"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="35" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">43</td><td class="ctr2" id="i1">43</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ClusterNodeServiceImpl.java.html#L111" class="el_method">assignProject(ClusterNode, StoredProject)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="29" height="10" title="105" alt="105"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="28" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h2">22</td><td class="ctr2" id="i2">22</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="ClusterNodeServiceImpl.java.html#L192" class="el_method">createXMLResponse(String, String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="19" height="10" title="70" alt="70"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="14" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">3</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">14</td><td class="ctr2" id="i3">14</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="ClusterNodeServiceImpl.java.html#L163" class="el_method">assignProject(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="10" height="10" title="39" alt="39"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="7" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">10</td><td class="ctr2" id="i4">10</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="ClusterNodeServiceImpl.java.html#L83" class="el_method">ClusterNodeServiceImpl()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="5" height="10" title="21" alt="21"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a8"><a href="ClusterNodeServiceImpl.java.html#L212" class="el_method">sendXMLResponse(HttpServletResponse, int, String)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="3" height="10" title="13" alt="13"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">5</td><td class="ctr2" id="i7">5</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a12"><a href="ClusterNodeServiceImpl.java.html#L72" class="el_method">static {...}</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="3" height="10" title="12" alt="12"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">7</td><td class="ctr2" id="i6">7</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="ClusterNodeServiceImpl.java.html#L152" class="el_method">assignProject(StoredProject)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="2" height="10" title="9" alt="9"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h8">3</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a7"><a href="ClusterNodeServiceImpl.java.html#L186" class="el_method">isProjectAssigned(StoredProject)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="1" height="10" title="7" alt="7"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="7" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a9"><a href="ClusterNodeServiceImpl.java.html#L388" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="1" height="10" title="7" alt="7"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h9">3</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a6"><a href="ClusterNodeServiceImpl.java.html#L95" class="el_method">getClusterNodeName()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="1" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a href="ClusterNodeServiceImpl.java.html#L393" class="el_method">shutDown()</a></td><td class="bar" id="b12"/><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/ClusterNodeServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/ClusterNodeServiceImpl.java.html
    new file mode 100644
    index 000000000..e12ad6269
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/ClusterNodeServiceImpl.java.html
    @@ -0,0 +1,465 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ClusterNodeServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.cluster</a> &gt; <span class="el_source">ClusterNodeServiceImpl.java</span></div><h1>ClusterNodeServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.cluster;
    +
    +import java.io.IOException;
    +import java.util.HashMap;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Set;
    +
    +import javax.servlet.Servlet;
    +import javax.servlet.ServletException;
    +import javax.servlet.http.HttpServlet;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.ServiceReference;
    +import org.osgi.service.http.HttpService;
    +import org.osgi.service.http.NamespaceException;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.cluster.ClusterNodeActionException;
    +import eu.sqooss.service.cluster.ClusterNodeService;
    +import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.updater.UpdaterService;
    +
    +/**
    + * @author George M. Zouganelis
    + *
    + */
    +public class ClusterNodeServiceImpl extends HttpServlet implements ClusterNodeService {
    +    private static final long serialVersionUID = 1L;
    +	static final String localServerName;
    +	static{
    +		String hostname;
    +		try {
    +<span class="nc" id="L72">			java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();</span>
    +<span class="nc" id="L73">			hostname = localMachine.getHostName();</span>
    +<span class="nc" id="L74">		}</span>
    +<span class="nc" id="L75">		catch(java.net.UnknownHostException ex) {</span>
    +    		// TODO: Clustering - Implement a hashing algorithm for unique server identification
    +<span class="nc" id="L77">			hostname = &quot;unknown host&quot;;</span>
    +		} 		
    +<span class="nc" id="L79">		localServerName = hostname;</span>
    +			
    +<span class="nc" id="L81">	}</span>
    +
    +<span class="nc" id="L83">    private Logger logger = null;</span>
    +<span class="nc" id="L84">    private AlitheiaCore core = null;</span>
    +<span class="nc" id="L85">    private HttpService httpService = null;</span>
    +    private BundleContext context;
    +<span class="nc" id="L87">    private DBService dbs = null;</span>
    +<span class="nc" id="L88">    private UpdaterService upds = null;</span>
    +    
    +<span class="nc" id="L90">    private ClusterNode thisNode = null;</span>
    +
    +<span class="nc" id="L92">    public ClusterNodeServiceImpl() {}</span>
    +    
    +    public String getClusterNodeName(){
    +<span class="nc" id="L95">	   return thisNode.getName();</span>
    +    }
    +    
    +    /**
    +     * Assign a StoredProject to a ClusterNode
    +     * Reasonable causes of failure:
    +     *  1.NULL passed server
    +     *  2.NULL passed project
    +     *  3.Assignment is locked (server is working on project)
    +     *  
    +     * @param node the cluster node target
    +     * @param project stored project to assign 
    +     * @return
    +     */
    +    public boolean assignProject(ClusterNode node, StoredProject project) throws ClusterNodeActionException {
    +    	// check if valid server passed
    +<span class="nc bnc" id="L111" title="All 2 branches missed.">        if (node==null) {</span>
    +<span class="nc" id="L112">    		throw new ClusterNodeActionException(&quot;Request to assign a project to a null clusternode&quot;);</span>
    +    	}
    +    	// check if valid project passed
    +<span class="nc bnc" id="L115" title="All 2 branches missed.">    	if (project==null) {</span>
    +<span class="nc" id="L116">    		throw new ClusterNodeActionException(&quot;Request to assign a null project to a clusternode&quot;);</span>
    +    	}
    +
    +        try {          
    +        	// check if project is already assigned to any ClusterNode
    +<span class="nc" id="L121">            ClusterNode assignment = project.getClusternode();</span>
    +<span class="nc bnc" id="L122" title="All 2 branches missed.">            if (assignment == null) {</span>
    +                // new project assignment
    +<span class="nc" id="L124">                logger.info(&quot;Assigning project &quot; + project.getName() + &quot; to &quot;</span>
    +<span class="nc" id="L125">                        + node.getName());</span>
    +<span class="nc" id="L126">                node.getProjects().add(project);</span>
    +<span class="nc" id="L127">            } else {</span>
    +<span class="nc" id="L128">                logger.info(&quot;Moving project &quot; + project.getName() + &quot; from &quot;</span>
    +<span class="nc" id="L129">                        + assignment.getName() + &quot; to &quot;</span>
    +<span class="nc" id="L130">                        + node.getName());</span>
    +<span class="nc bnc" id="L131" title="All 2 branches missed.">                if (assignment.getId() == node.getId()) {</span>
    +<span class="nc" id="L132">                    logger.info(&quot;No need to move &quot; + project.getName()</span>
    +<span class="nc" id="L133">                            + &quot; - Already assigned!&quot;);</span>
    +<span class="nc" id="L134">                    return true;</span>
    +                }
    +            }
    +<span class="nc" id="L137">        } catch (Exception e) {</span>
    +<span class="nc" id="L138">            throw new ClusterNodeActionException(&quot;Failed to assign project [&quot;</span>
    +<span class="nc" id="L139">                    + project.getName() + &quot;] to clusternode [&quot; + node.getName()</span>
    +<span class="nc" id="L140">                    + &quot;]&quot;);</span>
    +        }
    +<span class="nc" id="L142">    	return true;</span>
    +    }
    +
    +    /**
    +     * Assign a StoredProject to this ClusterNode
    +     * @param project project to assign
    +     * @return  
    +     */
    +    public boolean assignProject(StoredProject project) throws ClusterNodeActionException {
    +		try {
    +<span class="nc" id="L152">			return assignProject(thisNode, project);</span>
    +<span class="nc" id="L153">		} catch (ClusterNodeActionException ex) {</span>
    +<span class="nc" id="L154">			throw ex;</span>
    +		}
    +    }
    +
    +    /**
    +     * Overload for convenience. Use string instead of stored project.
    +     * @param projectname project's name to assign
    +     */
    +    public boolean assignProject(String projectname) throws ClusterNodeActionException {
    +<span class="nc" id="L163">    	dbs.startDBSession();</span>
    +<span class="nc" id="L164">    	StoredProject project = StoredProject.getProjectByName(projectname);</span>
    +<span class="nc" id="L165">    	dbs.rollbackDBSession();</span>
    +<span class="nc bnc" id="L166" title="All 2 branches missed.">        if (project == null) {</span>
    +            //the project was not found, can't be assign
    +<span class="nc" id="L168">        	String errorMessage = &quot;The project [&quot; + projectname + &quot;] was not found&quot;; </span>
    +<span class="nc" id="L169">            logger.warn(errorMessage);</span>
    +<span class="nc" id="L170">            throw new ClusterNodeActionException(errorMessage);</span>
    +        }
    +        try {
    +<span class="nc" id="L173">            return assignProject(project);</span>
    +<span class="nc" id="L174">        } catch (ClusterNodeActionException ex) {</span>
    +<span class="nc" id="L175">        	throw ex;</span>
    +        }
    +        
    +    }
    +    
    +    /**
    +     * Check if a StoredProject is assigned to this ClusterNode
    +     * @param project project to check
    +     * @return  
    +     */
    +    public boolean isProjectAssigned(StoredProject project){
    +<span class="nc bnc" id="L186" title="All 2 branches missed.">        return (project.getClusternode() != null);</span>
    +    }
    +
    +    
    +    // Format an XML response
    +    private String createXMLResponse(String resultMessage, String statusMessage, int statusCode){
    +<span class="nc" id="L192">        StringBuilder s = new StringBuilder();</span>
    +<span class="nc" id="L193">        s.append(&quot;&lt;?xml version=\&quot;1.0\&quot;?&gt;\n&quot;);</span>
    +<span class="nc" id="L194">        s.append(&quot;&lt;sqo-oss-response service=\&quot;clusternode\&quot;&gt;\n&quot;);</span>
    +<span class="nc bnc" id="L195" title="All 2 branches missed.">        if (resultMessage!=null) {</span>
    +<span class="nc" id="L196">            s.append(&quot;&lt;result&gt;&quot; + resultMessage + &quot;&lt;/result&gt;\n&quot;);</span>
    +<span class="nc" id="L197">        } else {</span>
    +<span class="nc" id="L198">            s.append(&quot;&lt;result/&gt;\n&quot;);</span>
    +        }
    +<span class="nc" id="L200">        s.append(&quot;&lt;status code=\&quot;&quot; + String.valueOf(statusCode) + &quot;\&quot;&quot;);</span>
    +<span class="nc bnc" id="L201" title="All 2 branches missed.">        if (statusMessage!=null) {</span>
    +<span class="nc" id="L202">            s.append(&quot;&gt;&quot; + statusMessage + &quot;&lt;/status&gt;\n&quot;);</span>
    +<span class="nc" id="L203">        } else {</span>
    +<span class="nc" id="L204">            s.append(&quot;/&gt;\n&quot;);</span>
    +        }
    +<span class="nc" id="L206">        s.append(&quot;&lt;/sqo-oss-response&gt;\n&quot;);</span>
    +<span class="nc" id="L207">    	return s.toString();</span>
    +    }
    +    
    +    // send the XML response back to the client
    +    private void sendXMLResponse(HttpServletResponse response, int status, String content) throws ServletException, IOException {
    +<span class="nc" id="L212">        response.setStatus(status);</span>
    +<span class="nc" id="L213">    	response.setContentType(&quot;text/xml;charset=UTF-8&quot;);</span>
    +<span class="nc" id="L214">    	response.getWriter().println(content);</span>
    +<span class="nc" id="L215">    	response.flushBuffer();</span>
    +<span class="nc" id="L216">    }</span>
    +    
    +
    +    /**
    +     * This is the standard HTTP request handler. It maps GET parameters based on 
    +     * the mandatory 'action' parameter to misc internal processes.
    +     *
    +     * The response codes in HTTP are used as follows:
    +     * - SC_OK  if the requested action succeeds
    +     * - SC_BAD_REQUEST (400) if the request is syntactically incorrect, which in
    +     *          this case means that one of the required parameter &quot;action&quot;
    +     *          is missing, or projectid is not a long integer.
    +     * - SC_NOT_FOUND (404) if the project or clusternode does not exist in the database.
    +     * - SC_NOT_IMPLEMENTED if the action type is not supported
    +     */
    +    @SuppressWarnings(&quot;unchecked&quot;)
    +    public void doGet(HttpServletRequest request, HttpServletResponse response)
    +            throws ServletException, IOException {
    +    	
    +<span class="nc" id="L235">    	String requestedAction = request.getParameter(&quot;action&quot;);</span>
    +
    +<span class="nc" id="L237">    	String projectname = request.getParameter(&quot;projectname&quot;);</span>
    +<span class="nc" id="L238">        String projectid = request.getParameter(&quot;projectid&quot;);</span>
    +<span class="nc" id="L239">        String clusternode = request.getParameter(&quot;clusternode&quot;);</span>
    +    	
    +        String content;          // holder of complete response output
    +        StringBuilder bcontent;  // holder of complete response output
    +        
    +        StoredProject project;
    +        ClusterNode node;
    +        
    +        // ERROR if no action requested
    +<span class="nc bnc" id="L248" title="All 2 branches missed.">        if (requestedAction == null) {</span>
    +<span class="nc" id="L249">        	content=createXMLResponse(null, &quot;Unknown action&quot;,HttpServletResponse.SC_BAD_REQUEST);</span>
    +<span class="nc" id="L250">        	sendXMLResponse(response, HttpServletResponse.SC_BAD_REQUEST,content); </span>
    +<span class="nc" id="L251">           return;</span>
    +        }
    +        
    +        // ERROR if unknown action requested
    +<span class="nc" id="L255">        ClusterNodeAction action = null;</span>
    +        try {
    +<span class="nc" id="L257">            action = ClusterNodeAction.valueOf(requestedAction.toUpperCase());</span>
    +<span class="nc" id="L258">        } catch (IllegalArgumentException e) {</span>
    +<span class="nc" id="L259">            String errorMessage = &quot;Bad action [&quot; + requestedAction + &quot;]&quot;;</span>
    +<span class="nc" id="L260">            logger.warn(errorMessage);</span>
    +<span class="nc" id="L261">            content=createXMLResponse(null, errorMessage,HttpServletResponse.SC_NOT_IMPLEMENTED);</span>
    +<span class="nc" id="L262">            sendXMLResponse(response, HttpServletResponse.SC_NOT_IMPLEMENTED, content);</span>
    +<span class="nc" id="L263">            return;</span>
    +        }
    +        
    +          
    +        // Perform Actions
    +<span class="nc bnc" id="L268" title="All 4 branches missed.">        switch (action){</span>
    +         case ASSIGN_PROJECT :
    +        	 // valid parameters:
    +        	 // projectname : Name of the project to assign.  
    +        	 // projectid   : ID of the project to assign. 
    +        	 //               Used ONLY if projectname parameter is missing, or projectname not found
    +        	 // clusternode : The Clusternode name to which the project will be assigned
    +        	 //               If empty, assign it to this clusternode
    +        	 // Example: http://localhost:8088/clusternode?action=assign_project&amp;projectname=iTALC&amp;clusternode=sqoserver1
    +
    +<span class="nc" id="L278">        	 dbs.startDBSession();</span>
    +<span class="nc" id="L279">         	 project = StoredProject.getProjectByName(projectname);</span>
    +<span class="nc" id="L280">         	 dbs.rollbackDBSession();</span>
    +<span class="nc bnc" id="L281" title="All 2 branches missed.">         	 if (project==null) {</span>
    +<span class="nc bnc" id="L282" title="All 2 branches missed.">         		 if (projectid!=null)  {</span>
    +<span class="nc" id="L283">                     long id = 0;</span>
    +                     try {
    +<span class="nc" id="L285">                    	 id = Long.valueOf(projectid);</span>
    +<span class="nc" id="L286">                     } catch (Exception ex){</span>
    +<span class="nc" id="L287">              	    	 content=createXMLResponse(null,&quot;Invalid projectid [&quot; + projectid + &quot;]&quot;, HttpServletResponse.SC_BAD_REQUEST);</span>
    +<span class="nc" id="L288">            	    	 sendXMLResponse(response, HttpServletResponse.SC_BAD_REQUEST, content);</span>
    +<span class="nc" id="L289">            	    	 break;                   	 </span>
    +                     }
    +<span class="nc" id="L291">                     dbs.startDBSession();</span>
    +<span class="nc" id="L292">            		 project = dbs.findObjectById(StoredProject.class, id);</span>
    +<span class="nc" id="L293">            		 dbs.rollbackDBSession();</span>
    +<span class="nc bnc" id="L294" title="All 2 branches missed.">            		 if (project==null) {</span>
    +<span class="nc" id="L295">               	    	content = createXMLResponse(null,&quot;Project with id:&quot; + projectid + &quot; not found&quot;, HttpServletResponse.SC_NOT_FOUND);</span>
    +<span class="nc" id="L296">            	    	sendXMLResponse(response, HttpServletResponse.SC_NOT_FOUND, content);</span>
    +<span class="nc" id="L297">            	    	break;                   	             			 </span>
    +            		 }
    +         	     } else {
    +<span class="nc" id="L300">         	    	content = createXMLResponse(null,&quot;Project &quot; + projectname + &quot; not found&quot;, HttpServletResponse.SC_NOT_FOUND);</span>
    +<span class="nc" id="L301">        	    	sendXMLResponse(response, HttpServletResponse.SC_NOT_FOUND, content);</span>
    +<span class="nc" id="L302">        	    	break;</span>
    +         	     }
    +         	 }
    +         	 
    +<span class="nc bnc" id="L306" title="All 2 branches missed.">         	 if (clusternode==null) {</span>
    +<span class="nc" id="L307">         	     node = thisNode;	 </span>
    +<span class="nc" id="L308">         	 } else {</span>
    +<span class="nc" id="L309">         	     dbs.startDBSession();</span>
    +<span class="nc" id="L310">         	     node = ClusterNode.getClusteNodeByName(clusternode);</span>
    +<span class="nc" id="L311">         	     dbs.rollbackDBSession();</span>
    +<span class="nc bnc" id="L312" title="All 2 branches missed.">         	     if (node==null) {</span>
    +<span class="nc" id="L313">                     content = createXMLResponse(null,&quot;ClusterNode &quot; + clusternode + &quot; not found&quot;, HttpServletResponse.SC_NOT_FOUND);</span>
    +<span class="nc" id="L314">                     sendXMLResponse(response, HttpServletResponse.SC_NOT_FOUND, content);</span>
    +<span class="nc" id="L315">                     break;         	         </span>
    +         	     }
    +         	 }
    +        	 try {
    +<span class="nc bnc" id="L319" title="All 2 branches missed.">        	     if (assignProject(node,project)){</span>
    +<span class="nc" id="L320">        	    	content = createXMLResponse(null, &quot;Project &quot; + project.getName() + &quot; assigned to &quot; + node.getName(), HttpServletResponse.SC_OK);</span>
    +<span class="nc" id="L321">        	    	sendXMLResponse(response, HttpServletResponse.SC_OK, content);       	    	</span>
    +        	     }        	     
    +<span class="nc" id="L323">        	 } catch (ClusterNodeActionException ex) {</span>
    +<span class="nc" id="L324">     	    	content = createXMLResponse(null, ex.getMessage(), HttpServletResponse.SC_BAD_REQUEST);</span>
    +<span class="nc" id="L325">    	    	sendXMLResponse(response, HttpServletResponse.SC_BAD_REQUEST, content);        		 </span>
    +        	 }     
    +<span class="nc" id="L327">        	 break;</span>
    +         case GET_ASSIGNED_PROJECTS:
    +        	 // valid parameters:
    +        	 // clusternode : The Clusternode name to query for
    +        	 //               If empty, assign it to this clusternode
    +        	 // Example: http://localhost:8088/clusternode?action=get_assigned_projects&amp;clusternode=sqoserver1
    +
    +             // TODO: Clustering - Extract interface  
    +<span class="nc bnc" id="L335" title="All 2 branches missed.">             if (clusternode==null) {</span>
    +<span class="nc" id="L336">           	     node = thisNode;	 </span>
    +<span class="nc" id="L337">           	 } else {</span>
    +<span class="nc" id="L338">           	     dbs.startDBSession();</span>
    +<span class="nc" id="L339">           	     node = ClusterNode.getClusteNodeByName(clusternode);</span>
    +<span class="nc" id="L340">           	     dbs.rollbackDBSession();</span>
    +           	 }
    +<span class="nc bnc" id="L342" title="All 2 branches missed.">         	 if (node==null){</span>
    +<span class="nc" id="L343">      	    	content = createXMLResponse(null, &quot;ClusterNode &quot;+clusternode+&quot; not found&quot;, HttpServletResponse.SC_NOT_FOUND);</span>
    +<span class="nc" id="L344">    	    	sendXMLResponse(response, HttpServletResponse.SC_NOT_FOUND, content);</span>
    +<span class="nc" id="L345">    	    	break;</span>
    +         	 }
    +         	          	 
    +<span class="nc" id="L348">             bcontent = new StringBuilder();</span>
    +<span class="nc" id="L349">             dbs.startDBSession();</span>
    +<span class="nc" id="L350">             Set&lt;StoredProject&gt; assignments = ClusterNode.thisNode().getProjects();</span>
    +<span class="nc bnc" id="L351" title="All 4 branches missed.">             if ((assignments!=null) &amp;&amp;  (assignments.size()&gt;0) ){</span>
    +<span class="nc" id="L352">                 bcontent.append(&quot;\n&quot;);</span>
    +<span class="nc bnc" id="L353" title="All 2 branches missed.">                 for (StoredProject sp : assignments) {                </span>
    +<span class="nc" id="L354">                     bcontent.append(&quot;&lt;project id=\&quot;&quot; + sp.getId() + &quot;\&quot;&quot;);</span>
    +                                          // check if project is currently being updated
    +                     // yes/no/unknown, (unknown means that this project is assigned to another clusternode instance)                    
    +<span class="nc" id="L357">                     bcontent.append(&quot;&gt;&quot; + sp.getName() + &quot;&lt;/project&gt;\n&quot;);</span>
    +                 }
    +             }
    +<span class="nc" id="L360">             dbs.rollbackDBSession();</span>
    +<span class="nc" id="L361">             content = createXMLResponse(bcontent.toString(), &quot;Project list processed succesfuly&quot;, HttpServletResponse.SC_OK);</span>
    +<span class="nc" id="L362">             sendXMLResponse(response, HttpServletResponse.SC_OK, content);</span>
    +<span class="nc" id="L363">        	 break;</span>
    +         case GET_KNOWN_SERVERS:
    +             // valid parameters: No need for parameters!
    +             // Example: http://localhost:8088/clusternode?action=get_known_servers
    +<span class="nc" id="L367">             bcontent = new StringBuilder();</span>
    +<span class="nc" id="L368">             dbs.startDBSession();</span>
    +<span class="nc" id="L369">             List&lt;ClusterNode&gt; nodes = (List&lt;ClusterNode&gt;) dbs.doHQL(&quot;FROM ClusterNode&quot;,null);</span>
    +<span class="nc bnc" id="L370" title="All 4 branches missed.">             if ((nodes!=null) &amp;&amp;  (nodes.size()&gt;0) ){</span>
    +<span class="nc" id="L371">                 bcontent.append(&quot;\n&quot;);</span>
    +<span class="nc bnc" id="L372" title="All 2 branches missed.">                 for (ClusterNode cn : nodes) {                </span>
    +<span class="nc" id="L373">                     bcontent.append(&quot;&lt;clusternode id=\&quot;&quot; + cn.getId() + &quot;\&quot;&gt;&quot; + cn.getName() + &quot;&lt;/clusternode&gt;\n&quot;);</span>
    +                 }
    +             }
    +<span class="nc" id="L376">             dbs.rollbackDBSession();</span>
    +<span class="nc" id="L377">             content = createXMLResponse(bcontent.toString(), &quot;Clusternode list processed succesfuly&quot;, HttpServletResponse.SC_OK);</span>
    +<span class="nc" id="L378">             sendXMLResponse(response, HttpServletResponse.SC_OK, content);</span>
    +        	 break;
    +         default:
    +        	 // you shouldn't be here! - implement missing actions!
    +        	 
    +        }
    +<span class="nc" id="L384">    }</span>
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L388">		this.context = bc;</span>
    +<span class="nc" id="L389">		this.logger = l;</span>
    +<span class="nc" id="L390">	}</span>
    +
    +	@Override
    +<span class="nc" id="L393">	public void shutDown() {}</span>
    +
    +	@Override
    +	public boolean startUp() {
    +		
    +		/* Get a reference to the core service*/
    +<span class="nc" id="L399">        ServiceReference serviceRef = null;</span>
    +      
    +<span class="nc" id="L401">        core = AlitheiaCore.getInstance();</span>
    +<span class="nc" id="L402">        dbs = core.getDBService();</span>
    +<span class="nc" id="L403">        upds = core.getUpdater();</span>
    +<span class="nc bnc" id="L404" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L405">            logger.info(&quot;Got a valid reference to the logger&quot;);</span>
    +<span class="nc" id="L406">        } else {</span>
    +<span class="nc" id="L407">            System.out.println(&quot;ERROR: ClusteNodeService got no logger&quot;);</span>
    +        }
    +
    +        /* Get a reference to the HTTP service */
    +<span class="nc" id="L411">        serviceRef = context.getServiceReference(&quot;org.osgi.service.http.HttpService&quot;);</span>
    +<span class="nc bnc" id="L412" title="All 2 branches missed.">        if (serviceRef != null) {</span>
    +<span class="nc" id="L413">            httpService = (HttpService) context.getService(serviceRef);</span>
    +           	try {
    +<span class="nc" id="L415">				httpService.registerServlet(&quot;/clusternode&quot;, (Servlet) this, null, null);</span>
    +<span class="nc" id="L416">			} catch (ServletException e) {</span>
    +<span class="nc" id="L417">				logger.error(&quot;Cannot register servlet to path /clusternode&quot;);</span>
    +<span class="nc" id="L418">				return false;</span>
    +<span class="nc" id="L419">			} catch (NamespaceException e) {</span>
    +<span class="nc" id="L420">				logger.error(&quot;Duplicate registration at path /clusternode&quot;);</span>
    +<span class="nc" id="L421">				return false;</span>
    +			}
    +        } else {
    +<span class="nc" id="L424">            logger.error(&quot;Could not load the HTTP service.&quot;);</span>
    +        }
    +<span class="nc" id="L426">        logger.info(&quot;Succesfully started clusternode service&quot;);</span>
    +
    +		
    +		// At this point, this ClusterNode has not been registered to the
    +		// database yet, so do it!
    +<span class="nc bnc" id="L431" title="All 2 branches missed.">		if (thisNode == null) { // paranoia check</span>
    +<span class="nc" id="L432">			dbs.startDBSession();</span>
    +			// Check if previously registered in DB
    +<span class="nc" id="L434">			Map&lt;String, Object&gt; serverProps = new HashMap&lt;String, Object&gt;(1);</span>
    +<span class="nc" id="L435">			serverProps.put(&quot;name&quot;, localServerName);</span>
    +<span class="nc" id="L436">			List&lt;ClusterNode&gt; s = dbs.findObjectsByProperties(</span>
    +<span class="nc" id="L437">					ClusterNode.class, serverProps);</span>
    +
    +<span class="nc bnc" id="L439" title="All 2 branches missed.">			if (s.isEmpty()) {</span>
    +				// not registered yet, create a record in DB
    +<span class="nc" id="L441">				thisNode = new ClusterNode();</span>
    +<span class="nc" id="L442">				thisNode.setName(localServerName);</span>
    +<span class="nc bnc" id="L443" title="All 2 branches missed.">				if (!dbs.addRecord(thisNode)) {</span>
    +<span class="nc" id="L444">					logger.error(&quot;Failed to register ClusterNode &lt;&quot;</span>
    +<span class="nc" id="L445">							+ localServerName + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L446">					dbs.rollbackDBSession();</span>
    +<span class="nc" id="L447">					return false;</span>
    +				} else {
    +<span class="nc" id="L449">					dbs.commitDBSession();</span>
    +<span class="nc" id="L450">					logger.info(&quot;ClusterNode &lt;&quot; + localServerName</span>
    +<span class="nc" id="L451">							+ &quot;&gt; registered succesfully.&quot;);</span>
    +<span class="nc" id="L452">					return true;</span>
    +				}
    +			} else {
    +				// already registered, keep the record from DB
    +<span class="nc" id="L456">				dbs.rollbackDBSession();</span>
    +<span class="nc" id="L457">				thisNode = s.get(0);</span>
    +<span class="nc" id="L458">				logger.info(&quot;ClusterNode &lt;&quot; + localServerName</span>
    +<span class="nc" id="L459">						+ &quot;&gt; registered succesfully.&quot;);</span>
    +			}
    +		}
    +<span class="nc" id="L462">		return true;</span>
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/index.html
    new file mode 100644
    index 000000000..3eae30f8a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.cluster</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.cluster</span></div><h1>eu.sqooss.impl.service.cluster</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">892 of 892</td><td class="ctr2">0%</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="ctr1">44</td><td class="ctr2">44</td><td class="ctr1">205</td><td class="ctr2">205</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="ClusterNodeServiceImpl.html" class="el_class">ClusterNodeServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="892" alt="892"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">44</td><td class="ctr2" id="g0">44</td><td class="ctr1" id="h0">205</td><td class="ctr2" id="i0">205</td><td class="ctr1" id="j0">13</td><td class="ctr2" id="k0">13</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/index.source.html
    new file mode 100644
    index 000000000..2399c97a8
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.cluster/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.cluster</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.cluster</span></div><h1>eu.sqooss.impl.service.cluster</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">892 of 892</td><td class="ctr2">0%</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="ctr1">44</td><td class="ctr2">44</td><td class="ctr1">205</td><td class="ctr2">205</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="ClusterNodeServiceImpl.java.html" class="el_source">ClusterNodeServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="892" alt="892"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">44</td><td class="ctr2" id="g0">44</td><td class="ctr1" id="h0">205</td><td class="ctr2" id="i0">205</td><td class="ctr1" id="j0">13</td><td class="ctr2" id="k0">13</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/DiskUtil.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/DiskUtil.html
    new file mode 100644
    index 000000000..cab75658e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/DiskUtil.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiskUtil</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_class">DiskUtil</span></div><h1>DiskUtil</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">153 of 153</td><td class="ctr2">0%</td><td class="bar">24 of 24</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">34</td><td class="ctr2">34</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="DiskUtil.java.html#L105" class="el_method">createTestFiles(File, int, int)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="76" alt="76"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="96" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h0">17</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="DiskUtil.java.html#L56" class="el_method">rmStar(File)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="38" alt="38"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="DiskUtil.java.html#L74" class="el_method">rmRf(File)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="56" height="10" title="36" alt="36"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="72" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="DiskUtil.java.html#L47" class="el_method">DiskUtil()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/DiskUtil.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/DiskUtil.java.html
    new file mode 100644
    index 000000000..3de5a5eb0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/DiskUtil.java.html
    @@ -0,0 +1,148 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiskUtil.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_source">DiskUtil.java</span></div><h1>DiskUtil.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.fds;
    +
    +import java.io.File;
    +import java.io.IOException;
    +
    +import eu.sqooss.service.logging.Logger;
    +
    +/**
    + * This class contains common static functionality for manipulating
    + * directory trees on-disk.
    + */
    +public final class DiskUtil {
    +    /** Constructor. This is a utility class, no constructor wanted. */
    +<span class="nc" id="L47">    private DiskUtil() {</span>
    +<span class="nc" id="L48">    }</span>
    +
    +    /**
    +     * Remove all files within a directory d.
    +     * @param d directory to remove all files from
    +     * @return true iff it was possible to delete files
    +     */
    +    public static boolean rmStar(final File d) {
    +<span class="nc bnc" id="L56" title="All 6 branches missed.">        if (d.exists() &amp;&amp; d.isDirectory() &amp;&amp; d.canWrite()) {</span>
    +<span class="nc" id="L57">            File[] files = d.listFiles();</span>
    +<span class="nc bnc" id="L58" title="All 2 branches missed.">            for (File f : files) {</span>
    +<span class="nc bnc" id="L59" title="All 2 branches missed.">                if (f.isFile()) {</span>
    +<span class="nc" id="L60">                    f.delete();</span>
    +                }
    +            }
    +<span class="nc" id="L63">            return true;</span>
    +        }
    +<span class="nc" id="L65">        return false;</span>
    +    }
    +
    +    /**
    +     * Remove an entire directory tree d.
    +     * @param d directory to remove
    +     * @return true iff the directory was writable
    +     */
    +    public static boolean rmRf(final File d) {
    +<span class="nc bnc" id="L74" title="All 2 branches missed.">        if (rmStar(d)) {</span>
    +            // All files now gone
    +<span class="nc" id="L76">            File [] files = d.listFiles();</span>
    +<span class="nc bnc" id="L77" title="All 2 branches missed.">            for (File f : files) {</span>
    +<span class="nc bnc" id="L78" title="All 2 branches missed.">                if (f.isDirectory()) {</span>
    +<span class="nc" id="L79">                    rmRf(f);</span>
    +                }
    +            }
    +<span class="nc" id="L82">            d.delete();</span>
    +<span class="nc" id="L83">            return d.exists();</span>
    +        }
    +<span class="nc" id="L85">        return false;</span>
    +    }
    +
    +    /**
    +     * Create a bunch of junk files underneath a given directory.
    +     * Recurse into any directories created this way (and create
    +     * fewer files and directories in the subdirs, so that the
    +     * recursion terminates).
    +     *
    +     * @param r root under which to create junk.
    +     * @param mf maximum number of files to create under r.
    +     * @param md maximum number of directories to create under r.
    +     *
    +     * @return number of files + directories created under r.
    +     */
    +    private static int createTestFiles(final File r,
    +        final int mf, final int md) {
    +        // Horribly contused way of getting a random integer in
    +        // the range 0..mf-1, but alternatives seem to require
    +        // creating our own Random object.
    +<span class="nc" id="L105">        int numberOfFiles = (int) Math.round(Math.floor(</span>
    +<span class="nc" id="L106">            Math.random() * (double) mf));</span>
    +<span class="nc" id="L107">        int numberOfSubDirs = (int) Math.round(Math.floor(</span>
    +<span class="nc" id="L108">            Math.random() * (double) md));</span>
    +<span class="nc" id="L109">        int count = 0;</span>
    +
    +<span class="nc bnc" id="L111" title="All 2 branches missed.">        for (int i = 0; i &lt; numberOfFiles; ++i) {</span>
    +<span class="nc" id="L112">            File f = new File(r, new Double(Math.random()).toString());</span>
    +            try {
    +<span class="nc bnc" id="L114" title="All 2 branches missed.">                if (f.createNewFile()) {</span>
    +<span class="nc" id="L115">                    ++count;</span>
    +                }
    +<span class="nc" id="L117">            } catch (IOException e) {</span>
    +                // Ignore the exception
    +<span class="nc" id="L119">                count += 0;</span>
    +            }
    +        }
    +<span class="nc bnc" id="L122" title="All 2 branches missed.">        for (int i = 0; i &lt; numberOfSubDirs; ++i) {</span>
    +<span class="nc" id="L123">            File f = new File(r, new Double(Math.random()).toString());</span>
    +<span class="nc bnc" id="L124" title="All 2 branches missed.">            if (f.mkdir()) {</span>
    +<span class="nc" id="L125">                ++count;</span>
    +<span class="nc" id="L126">                count += createTestFiles(f, mf / 2, md - 1);</span>
    +            }
    +        }
    +<span class="nc" id="L129">        return count;</span>
    +    }
    +
    +    /**
    +     * For the self test, maximum number of subdirectories under the
    +     * top-level directory. Maximum number of subdirectories per
    +     * level decreases exponentially.
    +     */
    +    private static final int STARTING_MAX_SUBDIRS = 8;
    +    /**
    +     * For the self-test, maximum number of files in any directory.
    +     * This should be more than log(STARTING_MAX_SUBDIRS) for the
    +     * createTestFiles() code to work properly.
    +     */
    +    private static final int STARTING_MAX_FILES = 16;
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl$CleanupThread.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl$CleanupThread.html
    new file mode 100644
    index 000000000..a3d826456
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl$CleanupThread.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FDSServiceImpl.CleanupThread</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_class">FDSServiceImpl.CleanupThread</span></div><h1>FDSServiceImpl.CleanupThread</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">37 of 37</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="FDSServiceImpl.java.html#L140" class="el_method">run()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="FDSServiceImpl.java.html#L135" class="el_method">FDSServiceImpl.CleanupThread(FDSServiceImpl, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="28" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl.html
    new file mode 100644
    index 000000000..4519eead2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FDSServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_class">FDSServiceImpl</span></div><h1>FDSServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,116 of 1,116</td><td class="ctr2">0%</td><td class="bar">82 of 82</td><td class="ctr2">0%</td><td class="ctr1">68</td><td class="ctr2">68</td><td class="ctr1">253</td><td class="ctr2">253</td><td class="ctr1">27</td><td class="ctr2">27</td></tr></tfoot><tbody><tr><td id="a10"><a href="FDSServiceImpl.java.html#L419" class="el_method">getFile(ProjectFile)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="123" alt="123"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">11</td><td class="ctr2" id="g0">11</td><td class="ctr1" id="h1">28</td><td class="ctr2" id="i1">28</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="FDSServiceImpl.java.html#L269" class="el_method">canCheckout(ProjectVersion)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="115" height="10" title="118" alt="118"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="48" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">25</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a26"><a href="FDSServiceImpl.java.html#L591" class="el_method">updateCheckout(OnDiskCheckout, ProjectVersion)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="113" height="10" title="116" alt="116"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="48" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h0">31</td><td class="ctr2" id="i0">31</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="FDSServiceImpl.java.html#L155" class="el_method">createCheckout(SCMAccessor, ProjectVersion, String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="89" height="10" title="92" alt="92"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">16</td><td class="ctr2" id="i4">16</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="FDSServiceImpl.java.html#L470" class="el_method">getFileContents(ProjectFile)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="88" height="10" title="91" alt="91"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h3">19</td><td class="ctr2" id="i3">19</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="FDSServiceImpl.java.html#L531" class="el_method">getCheckout(ProjectVersion, String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="65" height="10" title="67" alt="67"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h5">14</td><td class="ctr2" id="i5">14</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a13"><a href="FDSServiceImpl.java.html#L506" class="el_method">getInMemoryCheckout(ProjectVersion, Pattern)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="64" height="10" title="66" alt="66"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f11">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h6">14</td><td class="ctr2" id="i6">14</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a25"><a href="FDSServiceImpl.java.html#L691" class="el_method">startUp()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="53" height="10" title="55" alt="55"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d12"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f12">2</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h7">13</td><td class="ctr2" id="i7">13</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a18"><a href="FDSServiceImpl.java.html#L192" class="el_method">projectFileRevision(ProjectFile)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="46" height="10" title="48" alt="48"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d13"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f13">2</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h8">12</td><td class="ctr2" id="i8">12</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a17"><a href="FDSServiceImpl.java.html#L223" class="el_method">projectFileLocal(ProjectFile, Revision)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="42" height="10" title="44" alt="44"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d14"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f14">2</td><td class="ctr2" id="g14">2</td><td class="ctr1" id="h9">11</td><td class="ctr2" id="i9">11</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a9"><a href="FDSServiceImpl.java.html#L313" class="el_method">getCheckoutFromCache(ProjectVersion)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="36" height="10" title="37" alt="37"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="36" height="10" title="6" alt="6"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h11">7</td><td class="ctr2" id="i11">7</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a16"><a href="FDSServiceImpl.java.html#L251" class="el_method">projectFileAccessor(ProjectFile)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="31" height="10" title="32" alt="32"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h12">7</td><td class="ctr2" id="i12">7</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a19"><a href="FDSServiceImpl.java.html#L403" class="el_method">projectVersionToRevision(ProjectVersion)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="25" height="10" title="26" alt="26"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d15"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f15">2</td><td class="ctr2" id="g15">2</td><td class="ctr1" id="h13">7</td><td class="ctr2" id="i13">7</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a4"><a href="FDSServiceImpl.java.html#L390" class="el_method">cacheKeyProjectVersion(String)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="24" height="10" title="25" alt="25"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e12">0%</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h15">5</td><td class="ctr2" id="i15">5</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a24"><a href="FDSServiceImpl.java.html#L680" class="el_method">shutDown()</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="24" height="10" title="25" alt="25"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e13">0%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h14">6</td><td class="ctr2" id="i14">6</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a21"><a href="FDSServiceImpl.java.html#L331" class="el_method">returnCheckout(OnDiskCheckout)</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="22" height="10" title="23" alt="23"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e14">0%</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h16">5</td><td class="ctr2" id="i16">5</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a20"><a href="FDSServiceImpl.java.html#L653" class="el_method">releaseCheckout(OnDiskCheckout)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="22" height="10" title="23" alt="23"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h10">8</td><td class="ctr2" id="i10">8</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a2"><a href="FDSServiceImpl.java.html#L371" class="el_method">cacheKey(ProjectVersion)</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="18" height="10" title="19" alt="19"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h23">2</td><td class="ctr2" id="i23">2</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a0"><a href="FDSServiceImpl.java.html#L343" class="el_method">addCheckoutToCache(ProjectVersion, OnDiskCheckout)</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="15" height="10" title="16" alt="16"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h18">3</td><td class="ctr2" id="i18">3</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a7"><a href="FDSServiceImpl.java.html#L74" class="el_method">FDSServiceImpl()</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="14" height="10" title="15" alt="15"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h17">5</td><td class="ctr2" id="i17">5</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a3"><a href="FDSServiceImpl.java.html#L379" class="el_method">cacheKeyProject(String)</a></td><td class="bar" id="b20"><img src="../../../.resources/redbar.gif" width="12" height="10" title="13" alt="13"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e15">0%</td><td class="ctr1" id="f9">3</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h19">3</td><td class="ctr2" id="i19">3</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a1"><a href="FDSServiceImpl.java.html#L360" class="el_method">cacheContains(ProjectVersion)</a></td><td class="bar" id="b21"><img src="../../../.resources/redbar.gif" width="11" height="10" title="12" alt="12"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d16"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e16">0%</td><td class="ctr1" id="f16">2</td><td class="ctr2" id="g16">2</td><td class="ctr1" id="h20">3</td><td class="ctr2" id="i20">3</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a15"><a href="FDSServiceImpl.java.html#L351" class="el_method">isUpdatable(OnDiskCheckout)</a></td><td class="bar" id="b22"><img src="../../../.resources/redbar.gif" width="10" height="10" title="11" alt="11"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d17"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e17">0%</td><td class="ctr1" id="f17">2</td><td class="ctr2" id="g17">2</td><td class="ctr1" id="h21">3</td><td class="ctr2" id="i21">3</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a23"><a href="FDSServiceImpl.java.html#L674" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b23"><img src="../../../.resources/redbar.gif" width="6" height="10" title="7" alt="7"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h22">3</td><td class="ctr2" id="i22">3</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a12"><a href="FDSServiceImpl.java.html#L499" class="el_method">getInMemoryCheckout(ProjectVersion)</a></td><td class="bar" id="b24"><img src="../../../.resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a14"><a href="FDSServiceImpl.java.html#L665" class="el_method">getTimeline(StoredProject)</a></td><td class="bar" id="b25"><img src="../../../.resources/redbar.gif" width="4" height="10" title="5" alt="5"/></td><td class="ctr2" id="c25">0%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">1</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h25">1</td><td class="ctr2" id="i25">1</td><td class="ctr1" id="j25">1</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a22"><a href="FDSServiceImpl.java.html#L670" class="el_method">run()</a></td><td class="bar" id="b26"/><td class="ctr2" id="c26">0%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">1</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">1</td><td class="ctr2" id="i26">1</td><td class="ctr1" id="j26">1</td><td class="ctr2" id="k26">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl.java.html
    new file mode 100644
    index 000000000..4970f0bb2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/FDSServiceImpl.java.html
    @@ -0,0 +1,713 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FDSServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_source">FDSServiceImpl.java</span></div><h1>FDSServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.fds;
    +
    +import java.io.ByteArrayInputStream;
    +import java.io.ByteArrayOutputStream;
    +import java.io.File;
    +import java.io.FileInputStream;
    +import java.io.FileNotFoundException;
    +import java.io.InputStream;
    +import java.util.Random;
    +import java.util.Set;
    +import java.util.concurrent.ConcurrentHashMap;
    +import java.util.regex.Pattern;
    +
    +import eu.sqooss.service.util.FileUtils;
    +import org.apache.commons.codec.binary.Hex;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.fds.CheckoutException;
    +import eu.sqooss.service.fds.FDSService;
    +import eu.sqooss.service.fds.InMemoryCheckout;
    +import eu.sqooss.service.fds.OnDiskCheckout;
    +import eu.sqooss.service.fds.Timeline;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.InvalidAccessorException;
    +import eu.sqooss.service.tds.InvalidProjectRevisionException;
    +import eu.sqooss.service.tds.InvalidRepositoryException;
    +import eu.sqooss.service.tds.PathChangeType;
    +import eu.sqooss.service.tds.ProjectAccessor;
    +import eu.sqooss.service.tds.Revision;
    +import eu.sqooss.service.tds.SCMAccessor;
    +import eu.sqooss.service.tds.TDSService;
    +
    +/** {@inheritDoc} */
    +public class FDSServiceImpl implements FDSService, Runnable {
    +    /** The logger for the FDS. */
    +<span class="nc" id="L74">    private Logger logger = null;</span>
    +    /** We use the TDS for raw data access. */
    +<span class="nc" id="L76">    private TDSService tds = null;</span>
    +
    +    /**
    +     * The FDS is configured to place checkouts -- which are the main things
    +     * that the FDS is supposed to manage -- somewhere in the filesystem. This
    +     * is the root of those checkouts; underneath here each project has a
    +     * directory, and then checkouts of that project live under there.
    +     */
    +<span class="nc" id="L84">    private File fdsCheckoutRoot = null;</span>
    +    /**
    +     * Checkouts are done in directories with a random prefix; this is done to
    +     * avoid the suggestion that the checkouts are tied to specific revisions.
    +     * We generate the random prefixes with this random generator.
    +     */
    +<span class="nc" id="L90">    private Random randomCheckout = null;</span>
    +
    +    /**
    +     * Cache checkouts in a live system. The cache will not be re-populated from
    +     * on disk data if the system is shutdown.
    +     */
    +    private ConcurrentHashMap&lt;String, OnDiskCheckout&gt; checkoutCache;
    +
    +    /**
    +     * Number of handles acquired on each cached checkout.
    +     */
    +    private ConcurrentHashMap&lt;OnDiskCheckout, Integer&gt; checkoutHandles;
    +
    +    private BundleContext bc;
    +    
    +    /*
    +     * The following constants influence the formatting of checkout and project
    +     * directory names.
    +     */
    +    /**
    +     * Project IDs are formatted as decimals (with leading zeroes) of this
    +     * length; 8 covers the expected range of IDs.
    +     */
    +    private static final int INT_AS_DECIMAL_LENGTH = 8;
    +    /**
    +     * Each checkout gets a random hex string prefixed to a guaranteed unique
    +     * identifier. The length of the prefix is defined here.
    +     */
    +    private static final int RANDOM_PREFIX_LENGTH = 8;
    +    /**
    +     * States how many hex digits are needed to express an int.
    +     */
    +    private static final int INT_AS_HEX_LENGTH = 8;
    +
    +<span class="nc" id="L124">    public FDSServiceImpl() { }</span>
    +
    +    /**
    +     * The FDS considers its checkout root to be 'private' and will write all
    +     * kinds of stuff in there. The checkouts need to be cleaned up on shutdown
    +     * at the very least, in order to avoid polluting the filesystem with
    +     * orphaned checkout directories.
    +     * 
    +     */
    +    private class CleanupThread extends Thread {
    +
    +<span class="nc" id="L135">        public CleanupThread(String name) {</span>
    +<span class="nc" id="L136">            super(name);</span>
    +<span class="nc" id="L137">        }</span>
    +
    +        public void run() {
    +<span class="nc" id="L140">            System.err.println(&quot;Cleaning up &quot; + fdsCheckoutRoot);</span>
    +<span class="nc" id="L141">            logger.info(&quot;Cleaning up &quot; + fdsCheckoutRoot);</span>
    +<span class="nc" id="L142">            DiskUtil.rmRf(fdsCheckoutRoot);</span>
    +<span class="nc" id="L143">        }</span>
    +    }
    +
    +    /**
    +     * Create, for a given SCM accessor, an on disk checkout at a given
    +     * revision. This assumes that there is not already a checkout for this
    +     * project in this revision, and uses the SCM itself to do the checkout
    +     * somewhere underneath the FDS root.
    +     * 
    +     * @return
    +     */
    +    private OnDiskCheckout createCheckout(SCMAccessor scm, ProjectVersion pv, String path) {
    +<span class="nc" id="L155">        logger.info(&quot;Creating new checkout for &quot; + pv);</span>
    +
    +<span class="nc" id="L157">        File projectRoot = new File(fdsCheckoutRoot, pv.getProject().getName());</span>
    +        // It might not exist yet
    +<span class="nc" id="L159">        projectRoot.mkdirs();</span>
    +
    +        // Side effect: throws if the revision is invalid
    +<span class="nc" id="L162">        Revision r = scm.newRevision(pv.getRevisionId());</span>
    +<span class="nc" id="L163">        File checkoutRoot = new File(projectRoot, pv.getRevisionId());</span>
    +
    +<span class="nc bnc" id="L165" title="All 2 branches missed.">        if (checkoutRoot.exists()) {</span>
    +<span class="nc" id="L166">            logger.warn(&quot;Checkout root &lt;&quot; + checkoutRoot + &quot;&gt; exists. &quot; +</span>
    +<span class="nc" id="L167">                    &quot;Cleaning up&quot;);</span>
    +<span class="nc" id="L168">            FileUtils.deleteRecursive(checkoutRoot);</span>
    +        }
    +<span class="nc bnc" id="L170" title="All 2 branches missed.">        if (!checkoutRoot.mkdirs()) {</span>
    +<span class="nc" id="L171">            logger.warn(&quot;Could not create checkout root &lt;&quot; + checkoutRoot</span>
    +<span class="nc" id="L172">                    + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L173">            return null;</span>
    +        }
    +
    +        // Now checkoutRoot exists and is a directory.
    +<span class="nc" id="L177">        logger.info(&quot;Created checkout root &lt;&quot; + checkoutRoot + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L178">        OnDiskCheckoutImpl c = new OnDiskCheckoutImpl(scm, path, pv, checkoutRoot);</span>
    +<span class="nc" id="L179">        return c;</span>
    +    }
    +
    +    /**
    +     * For a project file, return the SCM revision that it refers to.
    +     * 
    +     * @param pf
    +     *            The ProjectFile to look up.
    +     * @return The SCM revision for the project or null if the project file is
    +     *         deleted or otherwise unavailable.
    +     */
    +    private Revision projectFileRevision(ProjectFile pf) {
    +        // Make sure that the file exists in the specified project version
    +<span class="nc" id="L192">        String fileStatus = pf.getState().toString();</span>
    +<span class="nc bnc" id="L193" title="All 2 branches missed.">        if (PathChangeType.valueOf(fileStatus) == PathChangeType.DELETED) {</span>
    +<span class="nc" id="L194">            return null;</span>
    +        }
    +
    +<span class="nc" id="L197">        String projectVersion = pf.getProjectVersion().getRevisionId();</span>
    +<span class="nc" id="L198">        long projectId = pf.getProjectVersion().getProject().getId();</span>
    +        try {
    +<span class="nc" id="L200">            return tds.getAccessor(projectId).getSCMAccessor().newRevision(</span>
    +<span class="nc" id="L201">                    projectVersion);</span>
    +<span class="nc" id="L202">        } catch (InvalidAccessorException e) {</span>
    +<span class="nc" id="L203">            logger.error(&quot;Invalid SCM accessor for project &quot;</span>
    +<span class="nc" id="L204">                    + pf.getProjectVersion().getProject().getName() + &quot; &quot;</span>
    +<span class="nc" id="L205">                    + e.getMessage());</span>
    +<span class="nc" id="L206">            return null;</span>
    +        }
    +    }
    +
    +    /**
    +     * Get the File where the given project file will be cached locally by the
    +     * FDS.
    +     * 
    +     * @param pf
    +     *            ProjectFile to look up.
    +     * @param r
    +     *            Revision of the project file; this is a minor optimization, if
    +     *            r is null the revision is retrieved from @p pf anyway.
    +     * @return File for this project file, or null if there is no such file in
    +     *         the given revision.
    +     */
    +    private File projectFileLocal(ProjectFile pf, Revision r) {
    +<span class="nc" id="L223">        Revision pr = null;</span>
    +<span class="nc bnc" id="L224" title="All 2 branches missed.">        if (r == null) {</span>
    +<span class="nc" id="L225">            pr = projectFileRevision(pf);</span>
    +<span class="nc" id="L226">        } else {</span>
    +<span class="nc" id="L227">            pr = r;</span>
    +        }
    +
    +        // Path generation for a &quot;single file checkout&quot;
    +<span class="nc" id="L231">        File checkoutFile = new File(fdsCheckoutRoot</span>
    +<span class="nc" id="L232">                + System.getProperty(&quot;file.separator&quot;)</span>
    +<span class="nc" id="L233">                + pf.getProjectVersion().getProject().getId()</span>
    +<span class="nc" id="L234">                + System.getProperty(&quot;file.separator&quot;) + pr.getUniqueId()</span>
    +<span class="nc" id="L235">                + System.getProperty(&quot;file.separator&quot;) + pf.getFileName());</span>
    +
    +        // TODO: possibly also look in existing checkouts?
    +<span class="nc" id="L238">        return checkoutFile;</span>
    +    }
    +
    +    /**
    +     * For a given project file, return the SCM accessor that can be used to get
    +     * at the file contents.
    +     * 
    +     * @param pf
    +     *            The project file to look up.
    +     * @return The accessor or null on failure.
    +     */
    +    private SCMAccessor projectFileAccessor(ProjectFile pf) {
    +        // Retrieve the project ID
    +<span class="nc" id="L251">        long projectId = pf.getProjectVersion().getProject().getId();</span>
    +
    +        // Get a TDS handle for the selected ProjectFile
    +        try {
    +<span class="nc" id="L255">            return tds.getAccessor(projectId).getSCMAccessor();</span>
    +<span class="nc" id="L256">        } catch (InvalidAccessorException e) {</span>
    +<span class="nc" id="L257">            logger.error(&quot;Invalid SCM accessor for project &quot;</span>
    +<span class="nc" id="L258">                    + pf.getProjectVersion().getProject().getName() + &quot; &quot;</span>
    +<span class="nc" id="L259">                    + e.getMessage());</span>
    +<span class="nc" id="L260">            return null;</span>
    +        }
    +    }
    +
    +    /**
    +     * Check whether a checkout can be done
    +     */
    +    private boolean canCheckout(ProjectVersion pv) throws CheckoutException {
    +
    +<span class="nc" id="L269">        long projectId = pv.getProject().getId();</span>
    +
    +<span class="nc bnc" id="L271" title="All 2 branches missed.">        if (!tds.projectExists(projectId)) {</span>
    +<span class="nc" id="L272">            throw new CheckoutException(&quot;No such project &quot; + pv.getProject()</span>
    +<span class="nc" id="L273">                    + &quot; to check out.&quot;);</span>
    +        }
    +<span class="nc bnc" id="L275" title="All 2 branches missed.">        if (!tds.accessorExists(projectId)) {</span>
    +<span class="nc" id="L276">            throw new CheckoutException(&quot;No accessor available for project: &quot;</span>
    +<span class="nc" id="L277">                    + pv.getProject().getName());</span>
    +        }
    +
    +<span class="nc" id="L280">        ProjectAccessor a = tds.getAccessor(projectId);</span>
    +
    +<span class="nc bnc" id="L282" title="All 2 branches missed.">        if (a == null) {</span>
    +<span class="nc" id="L283">            logger.warn(&quot;Accessor not available even though it exists.&quot;);</span>
    +<span class="nc" id="L284">            throw new CheckoutException(&quot;Accessor &quot; + &quot;for project &quot;</span>
    +<span class="nc" id="L285">                    + pv.getProject().getName()</span>
    +<span class="nc" id="L286">                    + &quot; not available even though it exists.&quot;);</span>
    +        }
    +
    +        try {
    +<span class="nc" id="L290">            SCMAccessor svn = a.getSCMAccessor();</span>
    +<span class="nc bnc" id="L291" title="All 2 branches missed.">            if (svn == null) {</span>
    +<span class="nc" id="L292">                logger</span>
    +<span class="nc" id="L293">                        .warn(&quot;No SCM available for &quot;</span>
    +<span class="nc" id="L294">                                + pv.getProject().getName());</span>
    +<span class="nc" id="L295">                throw new CheckoutException(</span>
    +<span class="nc" id="L296">                        &quot;No SCM accessor available for project &quot;</span>
    +<span class="nc" id="L297">                                + pv.getProject().getName());</span>
    +            }
    +<span class="nc" id="L299">        } catch (InvalidAccessorException e) {</span>
    +<span class="nc" id="L300">            throw new CheckoutException(&quot;Invalid SCM accessor for project &quot;</span>
    +<span class="nc" id="L301">                    + pv.getProject().getName() + &quot; &quot; + e.getMessage());</span>
    +        }
    +
    +<span class="nc" id="L304">        return true;</span>
    +    }
    +
    +    // Checkout cache ops
    +    /**
    +     * Atomic get from cache and increment handle count.
    +     */
    +    private synchronized OnDiskCheckout getCheckoutFromCache(ProjectVersion pv) {
    +
    +<span class="nc bnc" id="L313" title="All 4 branches missed.">        if (pv == null || pv.getId() == 0) {</span>
    +<span class="nc" id="L314">            return null;</span>
    +        }
    +
    +<span class="nc" id="L317">        OnDiskCheckout co = checkoutCache.get(cacheKey(pv));</span>
    +
    +<span class="nc bnc" id="L319" title="All 2 branches missed.">        if (co == null)</span>
    +<span class="nc" id="L320">            return null;</span>
    +
    +<span class="nc" id="L322">        checkoutHandles.put(co, checkoutHandles.get(co) + 1);</span>
    +
    +<span class="nc" id="L324">        return co;</span>
    +    }
    +
    +    /**
    +     * Atomic decrement of checkout handle counts.
    +     */
    +    private synchronized void returnCheckout(OnDiskCheckout c) {
    +<span class="nc bnc" id="L331" title="All 2 branches missed.">        if (c == null)</span>
    +<span class="nc" id="L332">            return;</span>
    +
    +<span class="nc bnc" id="L334" title="All 2 branches missed.">        if (checkoutHandles.contains(c))</span>
    +<span class="nc" id="L335">            checkoutHandles.put(c, checkoutHandles.get(c) - 1);</span>
    +<span class="nc" id="L336">    }</span>
    +
    +    /**
    +     * Atomic add checkout to both cache tables
    +     */
    +    private synchronized void addCheckoutToCache(ProjectVersion pv,
    +            OnDiskCheckout c) {
    +<span class="nc" id="L343">        checkoutCache.putIfAbsent(cacheKey(pv), c);</span>
    +<span class="nc" id="L344">        checkoutHandles.putIfAbsent(c, 0);</span>
    +<span class="nc" id="L345">    }</span>
    +
    +    /**
    +     * Atomically check whether the checkout can be updated
    +     */
    +    private synchronized boolean isUpdatable(OnDiskCheckout c) {
    +<span class="nc bnc" id="L351" title="All 2 branches missed.">        if (checkoutHandles.get(c) &gt; 0)</span>
    +<span class="nc" id="L352">            return false;</span>
    +<span class="nc" id="L353">        return true;</span>
    +    }
    +
    +    /**
    +     * Check if there is a checkout for a specific project version.
    +     */
    +    private synchronized boolean cacheContains(ProjectVersion pv) {
    +<span class="nc bnc" id="L360" title="All 2 branches missed.">        if (checkoutCache.keySet().contains(cacheKey(pv)))</span>
    +<span class="nc" id="L361">            return true;</span>
    +<span class="nc" id="L362">        return false;</span>
    +    }
    +
    +    // Cache key ops
    +    /**
    +     * Munge together info from the provided project version to create a unique
    +     * key for indexing cache checkouts.
    +     */
    +    private String cacheKey(ProjectVersion pv) {
    +<span class="nc" id="L371">        return pv.getProject().getName() + &quot;|&quot; + pv.getId() + &quot;|&quot;</span>
    +<span class="nc" id="L372">                + pv.getRevisionId();</span>
    +    }
    +
    +    /**
    +     * Retrieve the project name part of the provided cache key.
    +     */
    +    private String cacheKeyProject(String key) {
    +<span class="nc bnc" id="L379" title="All 4 branches missed.">        if (key == null || key.length() == 0)</span>
    +<span class="nc" id="L380">            return null;</span>
    +
    +<span class="nc" id="L382">        return key.split(&quot;|&quot;)[0];</span>
    +    }
    +
    +    /**
    +     * Retrieve from the provided cache key and resolve from the DB the
    +     * ProjectVersion object attached to a checkout.
    +     */
    +    private ProjectVersion cacheKeyProjectVersion(String key) {
    +<span class="nc bnc" id="L390" title="All 4 branches missed.">        if (key == null || key.length() == 0)</span>
    +<span class="nc" id="L391">            return null;</span>
    +
    +<span class="nc" id="L393">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +
    +<span class="nc" id="L395">        Long id = Long.parseLong(key.split(&quot;|&quot;)[1]);</span>
    +<span class="nc" id="L396">        return dbs.findObjectById(ProjectVersion.class, id);</span>
    +    }
    +
    +    /**
    +     * Convert between database and SCM revision representations
    +     */
    +    private static Revision projectVersionToRevision(ProjectVersion pv) {
    +<span class="nc" id="L403">        TDSService tds = AlitheiaCore.getInstance().getTDSService();</span>
    +<span class="nc" id="L404">        SCMAccessor scm = null;</span>
    +
    +<span class="nc bnc" id="L406" title="All 2 branches missed.">        if (tds.accessorExists(pv.getProject().getId())) {</span>
    +<span class="nc" id="L407">            scm = (SCMAccessor) tds.getAccessor(pv.getProject().getId());</span>
    +<span class="nc" id="L408">        } else {</span>
    +<span class="nc" id="L409">            return null;</span>
    +        }
    +
    +<span class="nc" id="L412">        return scm.newRevision(pv.getRevisionId());</span>
    +    }
    +
    +    // ===[ INTERFACE METHODS ]===============================================
    +
    +    /** {@inheritDoc} */
    +    public synchronized File getFile(ProjectFile pf) {
    +<span class="nc" id="L419">        Revision projectRevision = projectFileRevision(pf);</span>
    +<span class="nc bnc" id="L420" title="All 2 branches missed.">        if (projectRevision == null) {</span>
    +<span class="nc" id="L421">            return null;</span>
    +        }
    +
    +<span class="nc" id="L424">        File checkoutFile = projectFileLocal(pf, projectRevision);</span>
    +<span class="nc bnc" id="L425" title="All 2 branches missed.">        if (checkoutFile == null) {</span>
    +<span class="nc" id="L426">            return null;</span>
    +        }
    +
    +<span class="nc" id="L429">        SCMAccessor scm = projectFileAccessor(pf);</span>
    +<span class="nc bnc" id="L430" title="All 2 branches missed.">        if (scm == null) {</span>
    +<span class="nc" id="L431">            return null;</span>
    +        }
    +
    +        try {
    +            // Skip the checkout, in case this ProjectFile is already
    +            // available (i.e. retrieved in a previous checkout)
    +<span class="nc bnc" id="L437" title="All 4 branches missed.">            if (!(checkoutFile.exists() &amp;&amp; checkoutFile.length() &lt;= 0)) {</span>
    +                // Create the path to the target file if it doesn't exist
    +<span class="nc bnc" id="L439" title="All 2 branches missed.">                if ((checkoutFile.getParentFile() != null)</span>
    +<span class="nc bnc" id="L440" title="All 2 branches missed.">                        &amp;&amp; (!checkoutFile.getParentFile().exists())) {</span>
    +<span class="nc" id="L441">                    checkoutFile.getParentFile().mkdirs();</span>
    +                }
    +                // Try to checkout the target file
    +<span class="nc" id="L444">                scm.getFile(pf.getFileName(), projectRevision, checkoutFile);</span>
    +            }
    +
    +            // Make sure that the target file is accessible
    +<span class="nc bnc" id="L448" title="All 4 branches missed.">            if ((checkoutFile.exists()) &amp;&amp; (checkoutFile.isFile())</span>
    +<span class="nc bnc" id="L449" title="All 2 branches missed.">                    &amp;&amp; (checkoutFile.canRead())) {</span>
    +<span class="nc" id="L450">                return checkoutFile;</span>
    +            }
    +            // returning null here is fine
    +<span class="nc" id="L453">        } catch (InvalidRepositoryException e) {</span>
    +<span class="nc" id="L454">            logger.error(&quot;The repository for &quot; + pf.toString()</span>
    +<span class="nc" id="L455">                    + &quot; is invalid: &quot; + e.getMessage());</span>
    +<span class="nc" id="L456">        } catch (InvalidProjectRevisionException e) {</span>
    +<span class="nc" id="L457">            logger.error(&quot;The repository for &quot;</span>
    +<span class="nc" id="L458">                    + pf.getProjectVersion().getProject() + &quot; has no revision &quot;</span>
    +<span class="nc" id="L459">                    + projectRevision + &quot;:&quot; + e.getMessage());</span>
    +<span class="nc" id="L460">        } catch (FileNotFoundException e) {</span>
    +<span class="nc" id="L461">            logger.error(&quot;File &quot; + pf.toString() + &quot; not found in the given &quot;</span>
    +<span class="nc" id="L462">                    + &quot;repository: &quot; + e.getMessage());</span>
    +        }
    +<span class="nc" id="L464">        return null;</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public InputStream getFileContents(ProjectFile pf) {
    +
    +<span class="nc" id="L470">        Revision projectRevision = projectFileRevision(pf);</span>
    +<span class="nc bnc" id="L471" title="All 2 branches missed.">        if (projectRevision == null) {</span>
    +<span class="nc" id="L472">            return null;</span>
    +        }
    +
    +<span class="nc" id="L475">        SCMAccessor scm = projectFileAccessor(pf);</span>
    +<span class="nc" id="L476">        ByteArrayOutputStream buff = new ByteArrayOutputStream();</span>
    +        try {
    +<span class="nc" id="L478">            scm.getFile(pf.getFileName(), projectRevision, buff);</span>
    +<span class="nc" id="L479">        } catch (InvalidProjectRevisionException e) {</span>
    +<span class="nc" id="L480">            logger.error(&quot;The repository for &quot; + pf.toString()</span>
    +<span class="nc" id="L481">                    + &quot; is invalid: &quot; + e.getMessage());</span>
    +<span class="nc" id="L482">        } catch (InvalidRepositoryException e) {</span>
    +<span class="nc" id="L483">            logger.error(&quot;The repository for &quot;</span>
    +<span class="nc" id="L484">                    + pf.getProjectVersion().getProject() + &quot; has no revision &quot;</span>
    +<span class="nc" id="L485">                    + projectRevision + &quot;:&quot; + e.getMessage());</span>
    +<span class="nc" id="L486">        } catch (FileNotFoundException e) {</span>
    +<span class="nc" id="L487">            logger.error(&quot;File &quot; + pf.toString() + &quot; not found in the given &quot;</span>
    +<span class="nc" id="L488">                    + &quot;repository: &quot; + e.getMessage());</span>
    +        }
    +
    +<span class="nc" id="L491">        ByteArrayInputStream contents = new ByteArrayInputStream(buff</span>
    +<span class="nc" id="L492">                .toByteArray());</span>
    +<span class="nc" id="L493">        return contents;</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public InMemoryCheckout getInMemoryCheckout(ProjectVersion pv)
    +            throws CheckoutException {
    +<span class="nc" id="L499">        return getInMemoryCheckout(pv, Pattern.compile(&quot;.*&quot;));</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public InMemoryCheckout getInMemoryCheckout(ProjectVersion pv,
    +            Pattern pattern) throws CheckoutException {
    +
    +<span class="nc bnc" id="L506" title="All 2 branches missed.">        if (!canCheckout(pv)) {</span>
    +<span class="nc" id="L507">            return null;</span>
    +        }
    +
    +<span class="nc" id="L510">        long projectId = pv.getProject().getId();</span>
    +<span class="nc" id="L511">        SCMAccessor svn = null;</span>
    +        try {
    +<span class="nc" id="L513">            svn = tds.getAccessor(projectId).getSCMAccessor();</span>
    +<span class="nc" id="L514">        } catch (InvalidAccessorException e) {</span>
    +<span class="nc" id="L515">            throw new CheckoutException(&quot;Invalid SCM accessor for project &quot;</span>
    +<span class="nc" id="L516">                    + pv.getProject().getName() + &quot;: &quot; + e.getMessage());</span>
    +        }
    +<span class="nc" id="L518">        svn.newRevision(pv.getRevisionId());</span>
    +<span class="nc" id="L519">        logger</span>
    +<span class="nc" id="L520">                .info(&quot;Finding available checkout for &quot;</span>
    +<span class="nc" id="L521">                        + pv.getProject().getName() + &quot; revision &quot;</span>
    +<span class="nc" id="L522">                        + pv.getRevisionId());</span>
    +
    +<span class="nc" id="L524">        return new InMemoryCheckoutImpl(pv, pattern);</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public OnDiskCheckout getCheckout(ProjectVersion pv, String path)
    +            throws CheckoutException {
    +
    +<span class="nc bnc" id="L531" title="All 2 branches missed.">        if (!canCheckout(pv)) {</span>
    +<span class="nc" id="L532">            return null;</span>
    +        }
    +
    +<span class="nc" id="L535">        long projectId = pv.getProject().getId();</span>
    +<span class="nc" id="L536">        SCMAccessor svn = null;</span>
    +        try {
    +<span class="nc" id="L538">            svn = tds.getAccessor(projectId).getSCMAccessor();</span>
    +<span class="nc" id="L539">        } catch (InvalidAccessorException e) {</span>
    +<span class="nc" id="L540">            throw new CheckoutException(&quot;Invalid SCM accessor for project &quot;</span>
    +<span class="nc" id="L541">                    + pv.getProject().getName() + &quot;: &quot; + e.getMessage());</span>
    +        }
    +
    +<span class="nc" id="L544">        svn.newRevision(pv.getRevisionId());</span>
    +
    +<span class="nc" id="L546">        logger.info(&quot;Finding available checkout for &quot; + pv);</span>
    +<span class="nc" id="L547">        OnDiskCheckout co = getCheckoutFromCache(pv);</span>
    +
    +<span class="nc bnc" id="L549" title="All 2 branches missed.">        if (co != null) {</span>
    +            // Checkout acquired from cache, return it.
    +<span class="nc" id="L551">            return co;</span>
    +        }
    +
    +        // Search for a cached checkout that could be updated
    +        /*Set&lt;String&gt; c = checkoutCache.keySet();
    +        OnDiskCheckoutImpl updatable = null;
    +
    +        for (String s : c) {
    +            if (cacheKeyProject(s).equals(pv.getProject())) {
    +                ProjectVersion cached = cacheKeyProjectVersion(s);
    +                if (cached.lt(pv)) {
    +                    updatable = (OnDiskCheckoutImpl) getCheckoutFromCache(cached);
    +
    +                    if (checkoutHandles.get(updatable) == 1) {
    +                        try {
    +                            updateCheckout(updatable, pv);
    +                        } finally {
    +                            releaseCheckout(updatable);
    +                        }
    +                        return getCheckoutFromCache(pv);
    +                    }
    +                    releaseCheckout(updatable);
    +                    updatable = null;
    +                }
    +            }
    +        }
    +
    +        // No updatable checkout found, create
    +        synchronized (pv) {
    +            if (!cacheContains(pv))
    +                addCheckoutToCache(pv, createCheckout(svn, pv));
    +        } */
    +        //return getCheckoutFromCache(pv);
    +<span class="nc" id="L584">        return createCheckout(svn, pv, path);</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public boolean updateCheckout(OnDiskCheckout c, ProjectVersion pv)
    +            throws CheckoutException {
    +
    +<span class="nc bnc" id="L591" title="All 2 branches missed.">        if (c != null) {</span>
    +<span class="nc" id="L592">            return false;</span>
    +        }
    +
    +        // Check if the checkout is held by another client before updating
    +<span class="nc bnc" id="L596" title="All 2 branches missed.">        if (!isUpdatable(c)) {</span>
    +<span class="nc" id="L597">            return false;</span>
    +        }
    +
    +<span class="nc" id="L600">        OnDiskCheckoutImpl cimpl = (OnDiskCheckoutImpl) c;</span>
    +<span class="nc" id="L601">        cimpl.lock();</span>
    +
    +        // Check if an update took place while waiting for the lock to become
    +        // available
    +<span class="nc bnc" id="L605" title="All 2 branches missed.">        if (cimpl.getProjectVersion().gt(pv)) {</span>
    +<span class="nc" id="L606">            logger.error(&quot;Error updating checkout. Checkout has been&quot;</span>
    +                    + &quot; already updated to a newer version&quot;);
    +<span class="nc" id="L608">            throw new CheckoutException(&quot;Checkout already updated&quot;);</span>
    +<span class="nc bnc" id="L609" title="All 2 branches missed.">        } else if (cimpl.getProjectVersion().eq(pv)) {</span>
    +<span class="nc" id="L610">            return true;</span>
    +        }
    +
    +<span class="nc" id="L613">        SCMAccessor scm = (SCMAccessor) AlitheiaCore.getInstance()</span>
    +<span class="nc" id="L614">                .getTDSService().getAccessor(pv.getProject().getId());</span>
    +        try {
    +<span class="nc" id="L616">            scm.updateCheckout(cimpl.getRepositoryPath(),</span>
    +<span class="nc" id="L617">                    projectVersionToRevision(cimpl.getProjectVersion()),</span>
    +<span class="nc" id="L618">                    projectVersionToRevision(pv), cimpl.getRoot());</span>
    +<span class="nc" id="L619">            cimpl.setRevision(pv);</span>
    +
    +<span class="nc" id="L621">        } catch (InvalidProjectRevisionException e) {</span>
    +<span class="nc" id="L622">            throw new CheckoutException(&quot;Project version &quot; + pv</span>
    +<span class="nc" id="L623">                    + &quot; does not map to an SCM revision. Error was:&quot;</span>
    +<span class="nc" id="L624">                    + e.getMessage());</span>
    +<span class="nc" id="L625">        } catch (InvalidRepositoryException e) {</span>
    +<span class="nc" id="L626">            throw new CheckoutException(&quot;Error accessing repository &quot;</span>
    +<span class="nc" id="L627">                    + scm.toString() + &quot;. Error was:&quot; + e.getMessage());</span>
    +<span class="nc" id="L628">        } catch (FileNotFoundException e) {</span>
    +<span class="nc" id="L629">            throw new CheckoutException(&quot;Error accessing checkout root. &quot;</span>
    +<span class="nc" id="L630">                    + e.getMessage());</span>
    +<span class="nc" id="L631">        } finally {</span>
    +<span class="nc" id="L632">            cimpl.unlock();</span>
    +<span class="nc" id="L633">        }</span>
    +<span class="nc" id="L634">        return true;</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public void releaseCheckout(OnDiskCheckout c) {
    +
    +        /*
    +        if (c == null) {
    +            logger.warn(&quot;Attempting to release null checkout&quot;);
    +            return;
    +        }
    +
    +        if (!checkoutCache.contains(c)) {
    +            logger.warn(&quot;Attempting to release not cached checkout&quot;);
    +            return;
    +        }
    +
    +        returnCheckout(c);
    +        */
    +<span class="nc" id="L653">        File root = null;</span>
    +        try {
    +<span class="nc" id="L655">            root = c.getRoot();</span>
    +<span class="nc" id="L656">            FileUtils.deleteRecursive(root);</span>
    +<span class="nc" id="L657">        } catch (Exception e) {</span>
    +<span class="nc" id="L658">            logger.error(&quot;Cannot clean up checkout root: &quot; +</span>
    +<span class="nc" id="L659">                    root.getAbsolutePath());</span>
    +        }
    +<span class="nc" id="L661">        c = null;</span>
    +<span class="nc" id="L662">    }</span>
    +
    +    public Timeline getTimeline(StoredProject c) {
    +<span class="nc" id="L665">        return new TimelineImpl(c);</span>
    +    }
    +
    +    public void run() {
    +
    +<span class="nc" id="L670">    }</span>
    +
    +    @Override
    +    public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L674">        logger = l;</span>
    +<span class="nc" id="L675">        this.bc = bc;</span>
    +<span class="nc" id="L676">    }</span>
    +
    +    @Override
    +    public void shutDown() {
    +<span class="nc" id="L680">        String s = bc.getProperty(&quot;eu.sqooss.fds.cleanupOnExit&quot;);</span>
    +
    +<span class="nc bnc" id="L682" title="All 4 branches missed.">        if (s != null &amp;&amp; s.equals(&quot;true&quot;)) {</span>
    +<span class="nc" id="L683">            CleanupThread t = new CleanupThread(&quot;FDS cleanup thread&quot;);</span>
    +<span class="nc" id="L684">            Runtime.getRuntime().addShutdownHook(t);</span>
    +<span class="nc" id="L685">            logger.info(&quot;Registered shutdown cleanup thread&quot;);</span>
    +        }
    +<span class="nc" id="L687">    }</span>
    +
    +    @Override
    +    public boolean startUp() {
    +<span class="nc" id="L691">        tds = AlitheiaCore.getInstance().getTDSService();</span>
    +<span class="nc" id="L692">        logger.info(&quot;Got TDS service for FDS.&quot;);</span>
    +
    +<span class="nc" id="L694">        checkoutCache = new ConcurrentHashMap&lt;String, OnDiskCheckout&gt;();</span>
    +<span class="nc" id="L695">        checkoutHandles = new ConcurrentHashMap&lt;OnDiskCheckout, Integer&gt;();</span>
    +        // Get the checkout root from the properties file.
    +<span class="nc" id="L697">        String s = bc.getProperty(&quot;eu.sqooss.fds.root&quot;);</span>
    +<span class="nc bnc" id="L698" title="All 2 branches missed.">        if (s == null) {</span>
    +<span class="nc" id="L699">            logger.info(&quot;No eu.sqooss.fds.root set, using default /var/tmp/alitheia&quot;);</span>
    +<span class="nc" id="L700">            s = &quot;/var/tmp/alitheia&quot;;</span>
    +<span class="nc" id="L701">        } else {</span>
    +<span class="nc" id="L702">            logger.info(&quot;FDS root directory &quot; + s);</span>
    +        }
    +<span class="nc" id="L704">        fdsCheckoutRoot = new File(s);</span>
    +<span class="nc" id="L705">        randomCheckout = new Random();</span>
    +
    +<span class="nc" id="L707">        return true;</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/InMemoryCheckoutImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/InMemoryCheckoutImpl.html
    new file mode 100644
    index 000000000..52d28fcaf
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/InMemoryCheckoutImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InMemoryCheckoutImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_class">InMemoryCheckoutImpl</span></div><h1>InMemoryCheckoutImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">93 of 93</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a0"><a href="InMemoryCheckoutImpl.java.html#L65" class="el_method">createCheckout()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="53" alt="53"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">10</td><td class="ctr2" id="i0">10</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="InMemoryCheckoutImpl.java.html#L54" class="el_method">InMemoryCheckoutImpl(ProjectVersion)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="22" height="10" title="10" alt="10"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="InMemoryCheckoutImpl.java.html#L90" class="el_method">getFile(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="22" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="InMemoryCheckoutImpl.java.html#L59" class="el_method">InMemoryCheckoutImpl(ProjectVersion, Pattern)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="20" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="InMemoryCheckoutImpl.java.html#L83" class="el_method">getRoot()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="18" height="10" title="8" alt="8"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="InMemoryCheckoutImpl.java.html#L97" class="el_method">getProjectVersion()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/InMemoryCheckoutImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/InMemoryCheckoutImpl.java.html
    new file mode 100644
    index 000000000..ef7aaff10
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/InMemoryCheckoutImpl.java.html
    @@ -0,0 +1,103 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InMemoryCheckoutImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_source">InMemoryCheckoutImpl.java</span></div><h1>InMemoryCheckoutImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.fds;
    +
    +import java.util.List;
    +import java.util.regex.Pattern;
    +
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.fds.InMemoryCheckout;
    +import eu.sqooss.service.fds.InMemoryDirectory;
    +
    +/**
    + * An implementation of the InMemoryCheckout interface that uses the 
    + * DB service to retrieve file information for a specific version.
    + */
    +class InMemoryCheckoutImpl implements InMemoryCheckout {
    +   
    +    private ProjectVersion revision;
    +    private InMemoryDirectory root;
    +    private Pattern pattern;
    +
    +<span class="nc" id="L54">    InMemoryCheckoutImpl(ProjectVersion pv) {</span>
    +<span class="nc" id="L55">        revision = pv;</span>
    +<span class="nc" id="L56">        pattern = Pattern.compile(&quot;.*&quot;);</span>
    +<span class="nc" id="L57">    }</span>
    +
    +<span class="nc" id="L59">    InMemoryCheckoutImpl(ProjectVersion pv, Pattern p) {</span>
    +<span class="nc" id="L60">        revision = pv;</span>
    +<span class="nc" id="L61">        pattern = p;</span>
    +<span class="nc" id="L62">    }</span>
    +
    +    protected void createCheckout() {
    +<span class="nc" id="L65">        root = new InMemoryDirectory(this);</span>
    +        
    +<span class="nc" id="L67">        List&lt;ProjectFile&gt; projectFiles = revision.getFiles();</span>
    +<span class="nc bnc" id="L68" title="All 4 branches missed.">        if (projectFiles != null &amp;&amp; projectFiles.size() != 0) {</span>
    +<span class="nc bnc" id="L69" title="All 2 branches missed.">            for (ProjectFile f : projectFiles) {</span>
    +<span class="nc bnc" id="L70" title="All 2 branches missed.">                if (pattern.matcher(f.getFileName()).matches()) {</span>
    +<span class="nc bnc" id="L71" title="All 2 branches missed.">                    if (!f.getIsDirectory()) {</span>
    +<span class="nc" id="L72">                        root.createSubDirectory(f.getDir().getPath()).addFile(f.getName());</span>
    +<span class="nc" id="L73">                    } else {</span>
    +<span class="nc" id="L74">                        root.createSubDirectory(f.getFileName());</span>
    +                    }
    +                }
    +            }
    +        }
    +<span class="nc" id="L79">    }</span>
    +
    +    /** {@inheritDoc} */
    +    public InMemoryDirectory getRoot() {
    +<span class="nc bnc" id="L83" title="All 2 branches missed.">        if (root == null) </span>
    +<span class="nc" id="L84">            createCheckout();</span>
    +<span class="nc" id="L85">        return root;</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public ProjectFile getFile(String name) {
    +<span class="nc bnc" id="L90" title="All 2 branches missed.">        if (root == null) </span>
    +<span class="nc" id="L91">            createCheckout();</span>
    +<span class="nc" id="L92">        return root.getFile(name);</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public ProjectVersion getProjectVersion() {
    +<span class="nc" id="L97">        return revision;</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/OnDiskCheckoutImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/OnDiskCheckoutImpl.html
    new file mode 100644
    index 000000000..0d798408f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/OnDiskCheckoutImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>OnDiskCheckoutImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_class">OnDiskCheckoutImpl</span></div><h1>OnDiskCheckoutImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">129 of 129</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">38</td><td class="ctr2">38</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a2"><a href="OnDiskCheckoutImpl.java.html#L100" class="el_method">getRoot()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="69" alt="69"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">17</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="OnDiskCheckoutImpl.java.html#L67" class="el_method">OnDiskCheckoutImpl(SCMAccessor, String, ProjectVersion, File)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="41" height="10" title="24" alt="24"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="OnDiskCheckoutImpl.java.html#L124" class="el_method">getProjectVersion()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="22" height="10" title="13" alt="13"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="OnDiskCheckoutImpl.java.html#L87" class="el_method">lock()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="OnDiskCheckoutImpl.java.html#L79" class="el_method">setRevision(ProjectVersion)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="OnDiskCheckoutImpl.java.html#L83" class="el_method">setAccessor(SCMAccessor)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a7"><a href="OnDiskCheckoutImpl.java.html#L92" class="el_method">unlock()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="OnDiskCheckoutImpl.java.html#L131" class="el_method">getRepositoryPath()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/OnDiskCheckoutImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/OnDiskCheckoutImpl.java.html
    new file mode 100644
    index 000000000..f43e663ce
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/OnDiskCheckoutImpl.java.html
    @@ -0,0 +1,138 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>OnDiskCheckoutImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_source">OnDiskCheckoutImpl.java</span></div><h1>OnDiskCheckoutImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.fds;
    +
    +import java.io.File;
    +import java.io.FileNotFoundException;
    +import java.util.concurrent.locks.ReentrantLock;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.fds.CheckoutException;
    +import eu.sqooss.service.fds.OnDiskCheckout;
    +import eu.sqooss.service.tds.InvalidProjectRevisionException;
    +import eu.sqooss.service.tds.InvalidRepositoryException;
    +import eu.sqooss.service.tds.SCMAccessor;
    +
    +/**
    + * The CheckoutImpl implements the Checkout interface. It represents a
    + * checkout of a specific project at a specific revision somewhere in the
    + * filesystem of the Alitheia core system. A CheckoutImpl exposes
    + * additional API for updating the checkout itself and handling the
    + * reference counting done on it. Most operations on CheckoutImpl
    + * are not thread-safe. Locking is done in the FDS which exposes
    + * only the Checkout (safe) part of the interface.
    + */
    +class OnDiskCheckoutImpl implements OnDiskCheckout {
    +
    +    private ReentrantLock updateLock;
    +    
    +    private File localRoot;
    +    private String repoPath;
    +    private ProjectVersion revision;
    +    private SCMAccessor scm;
    +    
    +<span class="nc" id="L67">    private boolean initCheckout = false;</span>
    +
    +<span class="nc" id="L69">    OnDiskCheckoutImpl(SCMAccessor accessor, String path,</span>
    +                       ProjectVersion pv, File root) {
    +<span class="nc" id="L71">        repoPath = path;</span>
    +<span class="nc" id="L72">        localRoot = root;</span>
    +<span class="nc" id="L73">        revision = pv;</span>
    +<span class="nc" id="L74">        scm = accessor;</span>
    +<span class="nc" id="L75">        updateLock = new ReentrantLock(true);</span>
    +<span class="nc" id="L76">    }</span>
    +    
    +    void setRevision(ProjectVersion pv) {
    +<span class="nc" id="L79">        this.revision = pv;</span>
    +<span class="nc" id="L80">    }</span>
    +    
    +    void setAccessor(SCMAccessor scm) {
    +<span class="nc" id="L83">        this.scm = scm;</span>
    +<span class="nc" id="L84">    }</span>
    +    
    +    void lock() {
    +<span class="nc bnc" id="L87" title="All 2 branches missed.">        if (!updateLock.isHeldByCurrentThread())</span>
    +<span class="nc" id="L88">            updateLock.lock();</span>
    +<span class="nc" id="L89">    }</span>
    +    
    +    void unlock(){
    +<span class="nc" id="L92">        updateLock.unlock();</span>
    +<span class="nc" id="L93">    }</span>
    +    
    +    // Interface methods
    +    /** {@inheritDoc} */
    +    public File getRoot() 
    +        throws FileNotFoundException, CheckoutException {
    +        
    +<span class="nc bnc" id="L100" title="All 2 branches missed.">        if (initCheckout == false) {</span>
    +<span class="nc" id="L101">            lock();</span>
    +            try {
    +<span class="nc" id="L103">                scm.getCheckout(repoPath, </span>
    +<span class="nc" id="L104">                        scm.newRevision(revision.getRevisionId()), </span>
    +<span class="nc" id="L105">                        localRoot);</span>
    +<span class="nc" id="L106">            } catch (InvalidProjectRevisionException e) {</span>
    +<span class="nc" id="L107">                throw new CheckoutException(&quot;Project version &quot; + revision +</span>
    +<span class="nc" id="L108">                        &quot; does not map to an SCM revision. Error was:&quot; </span>
    +<span class="nc" id="L109">                        + e.getMessage());</span>
    +<span class="nc" id="L110">            } catch (InvalidRepositoryException e) {</span>
    +<span class="nc" id="L111">                throw new CheckoutException(&quot;Error accessing repository &quot; </span>
    +<span class="nc" id="L112">                        + scm.toString() + &quot;. Error was:&quot; + e.getMessage());</span>
    +<span class="nc" id="L113">            } finally {</span>
    +<span class="nc" id="L114">                unlock();</span>
    +<span class="nc" id="L115">            }</span>
    +<span class="nc" id="L116">            initCheckout = true;</span>
    +        } 
    +        
    +<span class="nc" id="L119">        return localRoot;</span>
    +    }
    +    
    +    /** {@inheritDoc} */
    +    public ProjectVersion getProjectVersion() {
    +<span class="nc" id="L124">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L125">        revision = dbs.attachObjectToDBSession(revision);</span>
    +<span class="nc" id="L126">        return revision;</span>
    +    }
    +    
    +    /** {@inheritDoc} */
    +    public String getRepositoryPath() {
    +<span class="nc" id="L131">        return repoPath;</span>
    +    }
    +}
    +
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/TimelineImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/TimelineImpl.html
    new file mode 100644
    index 000000000..df6cfde62
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/TimelineImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TimelineImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_class">TimelineImpl</span></div><h1>TimelineImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">318 of 318</td><td class="ctr2">0%</td><td class="bar">16 of 16</td><td class="ctr2">0%</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">67</td><td class="ctr2">67</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a1"><a href="TimelineImpl.java.html#L97" class="el_method">getMailTimeLine(Calendar, Calendar)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="99" alt="99"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">21</td><td class="ctr2" id="i0">21</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="TimelineImpl.java.html#L72" class="el_method">getScmTimeLine(Calendar, Calendar)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="101" height="10" title="84" alt="84"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h1">17</td><td class="ctr2" id="i1">17</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="TimelineImpl.java.html#L129" class="el_method">getBugTimeLine(Calendar, Calendar)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="100" height="10" title="83" alt="83"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h2">17</td><td class="ctr2" id="i2">17</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="TimelineImpl.java.html#L159" class="el_method">getTimeLine(Calendar, Calendar, EnumSet)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="47" height="10" title="39" alt="39"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h3">8</td><td class="ctr2" id="i3">8</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="TimelineImpl.java.html#L155" class="el_method">getTimeLine(Calendar, Calendar, Timeline.ResourceType)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="8" height="10" title="7" alt="7"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="TimelineImpl.java.html#L67" class="el_method">TimelineImpl(StoredProject)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="7" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/TimelineImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/TimelineImpl.java.html
    new file mode 100644
    index 000000000..1f93ad767
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/TimelineImpl.java.html
    @@ -0,0 +1,178 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TimelineImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.fds</a> &gt; <span class="el_source">TimelineImpl.java</span></div><h1>TimelineImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.fds;
    +
    +import java.util.Calendar;
    +import java.util.Date;
    +import java.util.EnumSet;
    +import java.util.HashMap;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Set;
    +import java.util.SortedSet;
    +import java.util.TreeSet;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.db.Bug;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.MailMessage;
    +import eu.sqooss.service.db.MailingList;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.fds.BugDBEvent;
    +import eu.sqooss.service.fds.MailingListEvent;
    +import eu.sqooss.service.fds.ProjectEvent;
    +import eu.sqooss.service.fds.RepositoryEvent;
    +import eu.sqooss.service.fds.Timeline;
    +
    +/**
    + * The TimelineImpl implements the Timeline interface. It represents a
    + * chronological view of the events that change a project's state.
    + */
    +class TimelineImpl implements Timeline {
    +   
    +    private StoredProject project;
    +
    +<span class="nc" id="L67">    public TimelineImpl(StoredProject project) {</span>
    +<span class="nc" id="L68">        this.project = project;</span>
    +<span class="nc" id="L69">    }</span>
    +
    +    private SortedSet&lt;RepositoryEvent&gt; getScmTimeLine(Calendar from, Calendar to) {
    +<span class="nc" id="L72">        SortedSet&lt;RepositoryEvent&gt; result = new TreeSet&lt;RepositoryEvent&gt;();</span>
    +        
    +<span class="nc" id="L74">        final long begin = from.getTimeInMillis();</span>
    +<span class="nc" id="L75">        final long end = to.getTimeInMillis();</span>
    +        
    +<span class="nc" id="L77">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L78">        StringBuilder query = new StringBuilder(&quot;select pv &quot;);</span>
    +<span class="nc" id="L79">        query.append(&quot;from ProjectVersion pv &quot;);</span>
    +<span class="nc" id="L80">        query.append(&quot;where pv.timestamp &lt; :paramTo &quot;);</span>
    +<span class="nc" id="L81">        query.append(&quot;and pv.timestamp &gt; :paramFrom &quot;);</span>
    +<span class="nc" id="L82">        query.append(&quot;and pv.project = :paramProject &quot;);</span>
    +<span class="nc" id="L83">        Map&lt;String, Object&gt; params = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L84">        params.put(&quot;paramTo&quot;, end);</span>
    +<span class="nc" id="L85">        params.put(&quot;paramFrom&quot;, begin);</span>
    +<span class="nc" id="L86">        params.put(&quot;paramProject&quot;, project);</span>
    +        
    +<span class="nc" id="L88">        List&lt;ProjectVersion&gt; versions = (List&lt;ProjectVersion&gt;) dbs.doHQL(query.toString(), params);</span>
    +        
    +<span class="nc bnc" id="L90" title="All 2 branches missed.">        for(ProjectVersion version : versions) {</span>
    +<span class="nc" id="L91">        	result.add( new RepositoryEvent(version.getTimestamp(), version) );</span>
    +        }
    +<span class="nc" id="L93">        return result;</span>
    +    }
    +    
    +    private SortedSet&lt;MailingListEvent&gt; getMailTimeLine(Calendar from, Calendar to) {
    +<span class="nc" id="L97">        SortedSet&lt;MailingListEvent&gt; result = new TreeSet&lt;MailingListEvent&gt;();</span>
    +        
    +<span class="nc" id="L99">        final Date begin = from.getTime();</span>
    +<span class="nc" id="L100">        final Date end = to.getTime();</span>
    +        
    +<span class="nc" id="L102">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L103">        StringBuilder query = new StringBuilder(&quot;select mm &quot;);</span>
    +<span class="nc" id="L104">        query.append(&quot;from MailMessage mm &quot;);</span>
    +<span class="nc" id="L105">        query.append(&quot;where mm.sendDate &lt; :paramTo &quot;);</span>
    +<span class="nc" id="L106">        query.append(&quot;and mm.sendDate &gt; :paramFrom &quot;);</span>
    +<span class="nc" id="L107">        query.append(&quot;and mm.list = :paramList &quot;);</span>
    +<span class="nc" id="L108">        Map&lt;String, Object&gt; params = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L109">        params.put(&quot;paramTo&quot;, end);</span>
    +<span class="nc" id="L110">        params.put(&quot;paramFrom&quot;, begin);        </span>
    +        
    +<span class="nc" id="L112">        Set&lt;MailingList&gt; lists = project.getMailingLists();</span>
    +<span class="nc bnc" id="L113" title="All 2 branches missed.">        if (lists != null) {</span>
    +<span class="nc bnc" id="L114" title="All 2 branches missed.">			for (MailingList list : lists) {</span>
    +<span class="nc" id="L115">				params.put(&quot;paramList&quot;, list);</span>
    +<span class="nc" id="L116">				List&lt;MailMessage&gt; messages = (List&lt;MailMessage&gt;) dbs.doHQL(query.toString(), params);</span>
    +
    +<span class="nc bnc" id="L118" title="All 2 branches missed.">				for (MailMessage message : messages) {</span>
    +<span class="nc" id="L119">					result.add(new MailingListEvent(</span>
    +<span class="nc" id="L120">							message.getSendDate().getTime(), message));</span>
    +				}
    +			}
    +		}
    +
    +<span class="nc" id="L125">        return result;</span>
    +    }
    +
    +    private SortedSet&lt;BugDBEvent&gt; getBugTimeLine(Calendar from, Calendar to) {
    +<span class="nc" id="L129">        SortedSet&lt;BugDBEvent&gt; result = new TreeSet&lt;BugDBEvent&gt;();</span>
    +
    +<span class="nc" id="L131">        final Date begin = from.getTime();</span>
    +<span class="nc" id="L132">        final Date end = to.getTime();</span>
    +
    +<span class="nc" id="L134">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L135">        StringBuilder query = new StringBuilder(&quot;select b &quot;);</span>
    +<span class="nc" id="L136">        query.append(&quot;from Bug b &quot;);</span>
    +<span class="nc" id="L137">        query.append(&quot;where b.creationTS &lt; :paramTo &quot;);</span>
    +<span class="nc" id="L138">        query.append(&quot;and b.creationTS &gt; :paramFrom &quot;);</span>
    +<span class="nc" id="L139">        query.append(&quot;and b.project = :paramProject &quot;);</span>
    +<span class="nc" id="L140">        Map&lt;String, Object&gt; params = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L141">        params.put(&quot;paramTo&quot;, end);</span>
    +<span class="nc" id="L142">        params.put(&quot;paramFrom&quot;, begin);</span>
    +<span class="nc" id="L143">        params.put(&quot;paramProject&quot;, project);</span>
    +<span class="nc" id="L144">        List&lt;Bug&gt; bugs = (List&lt;Bug&gt;) dbs.doHQL(query.toString(), params);</span>
    +        
    +<span class="nc bnc" id="L146" title="All 2 branches missed.">        for (Bug bug : bugs) {</span>
    +<span class="nc" id="L147">			result.add(new BugDBEvent(bug.getCreationTS().getTime(), bug));</span>
    +		}
    +<span class="nc" id="L149">        return result;</span>
    +    }
    + 
    +    // Interface Timeline
    +    /** {@inheritDoc} */
    +    public SortedSet&lt;ProjectEvent&gt; getTimeLine(Calendar from, Calendar to, ResourceType rt) {
    +<span class="nc" id="L155">        return getTimeLine( from, to, EnumSet.of(rt) );</span>
    +    }
    +
    +    public SortedSet&lt;ProjectEvent&gt; getTimeLine(Calendar from, Calendar to, EnumSet&lt;ResourceType&gt; rts) {
    +<span class="nc" id="L159">        SortedSet&lt;ProjectEvent&gt; result = new TreeSet&lt;ProjectEvent&gt;();</span>
    +
    +<span class="nc bnc" id="L161" title="All 2 branches missed.">        if (rts.contains(ResourceType.SCM)) {</span>
    +<span class="nc" id="L162">            result.addAll(getScmTimeLine(from, to));</span>
    +        }
    +<span class="nc bnc" id="L164" title="All 2 branches missed.">        if(rts.contains(ResourceType.MAIL)) {</span>
    +<span class="nc" id="L165">            result.addAll(getMailTimeLine(from, to));</span>
    +        }
    +<span class="nc bnc" id="L167" title="All 2 branches missed.">        if(rts.contains(ResourceType.BTS)) {</span>
    +<span class="nc" id="L168">            result.addAll(getBugTimeLine(from, to ));</span>
    +        }
    +
    +<span class="nc" id="L171">        return result;</span>
    +    }
    +}
    +
    +
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/index.html
    new file mode 100644
    index 000000000..ad7dc8ce9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.fds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.fds</span></div><h1>eu.sqooss.impl.service.fds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,846 of 1,846</td><td class="ctr2">0%</td><td class="bar">140 of 140</td><td class="ctr2">0%</td><td class="ctr1">123</td><td class="ctr2">123</td><td class="ctr1">424</td><td class="ctr2">424</td><td class="ctr1">53</td><td class="ctr2">53</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a1"><a href="FDSServiceImpl.html" class="el_class">FDSServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,116" alt="1,116"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="82" alt="82"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">68</td><td class="ctr2" id="g0">68</td><td class="ctr1" id="h0">253</td><td class="ctr2" id="i0">253</td><td class="ctr1" id="j0">27</td><td class="ctr2" id="k0">27</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a5"><a href="TimelineImpl.html" class="el_class">TimelineImpl</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="34" height="10" title="318" alt="318"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="23" height="10" title="16" alt="16"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">14</td><td class="ctr2" id="g2">14</td><td class="ctr1" id="h1">67</td><td class="ctr2" id="i1">67</td><td class="ctr1" id="j2">6</td><td class="ctr2" id="k2">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="DiskUtil.html" class="el_class">DiskUtil</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="16" height="10" title="153" alt="153"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="35" height="10" title="24" alt="24"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h3">34</td><td class="ctr2" id="i3">34</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k4">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a4"><a href="OnDiskCheckoutImpl.html" class="el_class">OnDiskCheckoutImpl</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="129" alt="129"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f4">10</td><td class="ctr2" id="g4">10</td><td class="ctr1" id="h2">38</td><td class="ctr2" id="i2">38</td><td class="ctr1" id="j1">8</td><td class="ctr2" id="k1">8</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a3"><a href="InMemoryCheckoutImpl.html" class="el_class">InMemoryCheckoutImpl</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="10" height="10" title="93" alt="93"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="20" height="10" title="14" alt="14"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f3">13</td><td class="ctr2" id="g3">13</td><td class="ctr1" id="h4">25</td><td class="ctr2" id="i4">25</td><td class="ctr1" id="j3">6</td><td class="ctr2" id="k3">6</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="FDSServiceImpl$CleanupThread.html" class="el_class">FDSServiceImpl.CleanupThread</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="3" height="10" title="37" alt="37"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j5">2</td><td class="ctr2" id="k5">2</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/index.source.html
    new file mode 100644
    index 000000000..d7fe8624f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.fds/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.fds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.fds</span></div><h1>eu.sqooss.impl.service.fds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,846 of 1,846</td><td class="ctr2">0%</td><td class="bar">140 of 140</td><td class="ctr2">0%</td><td class="ctr1">123</td><td class="ctr2">123</td><td class="ctr1">424</td><td class="ctr2">424</td><td class="ctr1">53</td><td class="ctr2">53</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a1"><a href="FDSServiceImpl.java.html" class="el_source">FDSServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,153" alt="1,153"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="82" alt="82"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">70</td><td class="ctr2" id="g0">70</td><td class="ctr1" id="h0">260</td><td class="ctr2" id="i0">260</td><td class="ctr1" id="j0">29</td><td class="ctr2" id="k0">29</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr><tr><td id="a4"><a href="TimelineImpl.java.html" class="el_source">TimelineImpl.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="33" height="10" title="318" alt="318"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="23" height="10" title="16" alt="16"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">14</td><td class="ctr2" id="g2">14</td><td class="ctr1" id="h1">67</td><td class="ctr2" id="i1">67</td><td class="ctr1" id="j2">6</td><td class="ctr2" id="k2">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="DiskUtil.java.html" class="el_source">DiskUtil.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="15" height="10" title="153" alt="153"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="35" height="10" title="24" alt="24"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h3">34</td><td class="ctr2" id="i3">34</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k4">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a3"><a href="OnDiskCheckoutImpl.java.html" class="el_source">OnDiskCheckoutImpl.java</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="129" alt="129"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f4">10</td><td class="ctr2" id="g4">10</td><td class="ctr1" id="h2">38</td><td class="ctr2" id="i2">38</td><td class="ctr1" id="j1">8</td><td class="ctr2" id="k1">8</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a2"><a href="InMemoryCheckoutImpl.java.html" class="el_source">InMemoryCheckoutImpl.java</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="9" height="10" title="93" alt="93"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="20" height="10" title="14" alt="14"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f3">13</td><td class="ctr2" id="g3">13</td><td class="ctr1" id="h4">25</td><td class="ctr2" id="i4">25</td><td class="ctr1" id="j3">6</td><td class="ctr2" id="k3">6</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/CyclicLogger.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/CyclicLogger.html
    new file mode 100644
    index 000000000..52e86d57d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/CyclicLogger.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CyclicLogger</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.logging</a> &gt; <span class="el_class">CyclicLogger</span></div><h1>CyclicLogger</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">65 of 65</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="CyclicLogger.java.html#L62" class="el_method">getEntries()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="CyclicLogger.java.html#L42" class="el_method">CyclicLogger()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="50" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="CyclicLogger.java.html#L50" class="el_method">append(LoggingEvent)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="15" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="CyclicLogger.java.html#L58" class="el_method">close()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="CyclicLogger.java.html#L54" class="el_method">requiresLayout()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/CyclicLogger.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/CyclicLogger.java.html
    new file mode 100644
    index 000000000..8b25eccc2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/CyclicLogger.java.html
    @@ -0,0 +1,77 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CyclicLogger.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.logging</a> &gt; <span class="el_source">CyclicLogger.java</span></div><h1>CyclicLogger.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.logging;
    +
    +import org.apache.log4j.AppenderSkeleton;
    +import org.apache.log4j.Layout;
    +import org.apache.log4j.helpers.CyclicBuffer;
    +import org.apache.log4j.spi.LoggingEvent;
    +
    +public class CyclicLogger extends AppenderSkeleton {
    +<span class="nc" id="L42">    private int entries = 512;</span>
    +<span class="nc" id="L43">    private CyclicBuffer buffer = null;</span>
    +
    +<span class="nc" id="L45">    CyclicLogger() {</span>
    +<span class="nc" id="L46">        buffer = new CyclicBuffer(entries);</span>
    +<span class="nc" id="L47">    }</span>
    +
    +    protected void append(LoggingEvent e) {
    +<span class="nc" id="L50">        buffer.add(e);</span>
    +<span class="nc" id="L51">    }</span>
    +
    +    public boolean requiresLayout() {
    +<span class="nc" id="L54">        return true;</span>
    +    }
    +
    +    public void close() {
    +<span class="nc" id="L58">        closed = true;</span>
    +<span class="nc" id="L59">    }</span>
    +
    +    public String[] getEntries() {
    +<span class="nc" id="L62">         synchronized(buffer) {</span>
    +<span class="nc" id="L63">            String[] list = new String[buffer.length()];</span>
    +<span class="nc" id="L64">            Layout layout = getLayout();</span>
    +<span class="nc bnc" id="L65" title="All 2 branches missed.">            for (int i=0; i&lt;buffer.length(); i++) {</span>
    +<span class="nc" id="L66">                list[i] = layout.format(buffer.get(i));</span>
    +            }
    +<span class="nc" id="L68">            return list;</span>
    +        }
    +    }
    +}
    +
    +
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LogManagerImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LogManagerImpl.html
    new file mode 100644
    index 000000000..5a804912e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LogManagerImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>LogManagerImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.logging</a> &gt; <span class="el_class">LogManagerImpl</span></div><h1>LogManagerImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">225 of 225</td><td class="ctr2">0%</td><td class="bar">10 of 10</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">57</td><td class="ctr2">57</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a9"><a href="LogManagerImpl.java.html#L128" class="el_method">startUp()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="87" alt="87"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h0">22</td><td class="ctr2" id="i0">22</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="LogManagerImpl.java.html#L85" class="el_method">releaseLogger(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="58" alt="58"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h1">12</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="LogManagerImpl.java.html#L70" class="el_method">createLogger(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="46" height="10" title="34" alt="34"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">8</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="LogManagerImpl.java.html#L58" class="el_method">LogManagerImpl(boolean)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="24" height="10" title="18" alt="18"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">6</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="LogManagerImpl.java.html#L58" class="el_method">LogManagerImpl()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="12" height="10" title="9" alt="9"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="LogManagerImpl.java.html#L105" class="el_method">getRecentEntries()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="LogManagerImpl.java.html#L109" class="el_method">setBundleContext(BundleContext)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="LogManagerImpl.java.html#L118" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a10"><a href="LogManagerImpl.java.html#L52" class="el_method">static {...}</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a1"><a href="LogManagerImpl.java.html#L113" class="el_method">getBundleContext()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a8"><a href="LogManagerImpl.java.html#L124" class="el_method">shutDown()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="1" height="10" title="1" alt="1"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LogManagerImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LogManagerImpl.java.html
    new file mode 100644
    index 000000000..fad708d52
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LogManagerImpl.java.html
    @@ -0,0 +1,164 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>LogManagerImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.logging</a> &gt; <span class="el_source">LogManagerImpl.java</span></div><h1>LogManagerImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.logging;
    +
    +import java.net.URL;
    +import java.util.Enumeration;
    +import java.util.HashMap;
    +import java.util.Map;
    +import java.util.Properties;
    +
    +import org.apache.log4j.PatternLayout;
    +import org.apache.log4j.PropertyConfigurator;
    +import org.apache.log4j.SimpleLayout;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.service.logging.LogManager;
    +import eu.sqooss.service.logging.Logger;
    +
    +public class LogManagerImpl implements LogManager {
    +    // Our singleton manager
    +<span class="nc" id="L52">    public static LogManagerImpl logManager = null;</span>
    +
    +    // Our OSGi context; used to indicate initialization status.
    +    private BundleContext bc;
    +
    +    // This map stores all of the valid and active loggers in the system.
    +<span class="nc" id="L58">    private Map&lt;String,LoggerImpl&gt; loggers = null;</span>
    +
    +<span class="nc" id="L60">    private CyclicLogger cyclicLogger = null;</span>
    +
    +<span class="nc" id="L62">    public LogManagerImpl() {}</span>
    +
    +<span class="nc" id="L64">    public LogManagerImpl(boolean testInit) {</span>
    +<span class="nc" id="L65">        logManager = new LogManagerImpl();</span>
    +<span class="nc" id="L66">        loggers = new HashMap&lt;String, LoggerImpl&gt;();</span>
    +<span class="nc" id="L67">    }</span>
    +    
    +    public Logger createLogger(String name) {
    +<span class="nc" id="L70">        LoggerImpl logger = loggers.get(name);</span>
    +
    +<span class="nc bnc" id="L72" title="All 2 branches missed.">        if (logger == null) {</span>
    +<span class="nc" id="L73">            org.apache.log4j.Logger.getRootLogger().info(</span>
    +<span class="nc" id="L74">                &quot;Creating logger &lt;&quot; + name + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L75">            logger = new LoggerImpl(name);</span>
    +<span class="nc" id="L76">            loggers.put(name, logger);</span>
    +        }
    +        
    +<span class="nc" id="L79">        logger.get();</span>
    +<span class="nc" id="L80">        return logger;</span>
    +    }
    +
    +    public void releaseLogger(String name) {
    +        LoggerImpl logger;
    +<span class="nc bnc" id="L85" title="All 2 branches missed.">        if (!loggers.containsKey(name)) {</span>
    +<span class="nc" id="L86">            org.apache.log4j.Logger.getRootLogger().error(&quot;Release for bogus logger &lt;&quot; + name + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L87">            return;</span>
    +        }
    +
    +<span class="nc" id="L90">        logger = loggers.get(name);</span>
    +<span class="nc bnc" id="L91" title="All 2 branches missed.">        if (logger == null) {</span>
    +<span class="nc" id="L92">            org.apache.log4j.Logger.getRootLogger().error(&quot;Release on unallocated logger &lt;&quot; + name + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L93">            return;</span>
    +        }
    +
    +<span class="nc bnc" id="L96" title="All 2 branches missed.">        if (logger.unget() == 0) {</span>
    +<span class="nc" id="L97">            org.apache.log4j.Logger.getRootLogger().info(</span>
    +<span class="nc" id="L98">                    &quot;Released last logger for &lt;&quot; + name + &quot;&gt;&quot;);</span>
    +
    +<span class="nc" id="L100">            loggers.put(name, null);</span>
    +        }
    +<span class="nc" id="L102">    }</span>
    +
    +    public String[] getRecentEntries() {
    +<span class="nc" id="L105">        return cyclicLogger.getEntries();</span>
    +    }
    +
    +    public void setBundleContext(BundleContext bc) {
    +<span class="nc" id="L109">        this.bc = bc;</span>
    +<span class="nc" id="L110">    }</span>
    +
    +    public BundleContext getBundleContext() {
    +<span class="nc" id="L113">        return this.bc;</span>
    +    }
    +
    +    @Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L118">		this.bc = bc;</span>
    +<span class="nc" id="L119">	}</span>
    +
    +	@Override
    +	public void shutDown() {
    +	    
    +<span class="nc" id="L124">	}</span>
    +
    +	@Override
    +	public boolean startUp() {
    +<span class="nc" id="L128">	    loggers = new HashMap&lt;String, LoggerImpl&gt;();</span>
    +		// The configuration is read automatically from the file log4j.properties
    +        // in the bundle .jar ; this is much like calling:
    +        //     PropertyConfigurator.configure(&quot;/log4j.properties&quot;);
    +        // The default configuration will suppress this info message:
    +        
    +        Enumeration&lt;URL&gt; props;
    +<span class="nc" id="L135">        Properties p = new Properties();</span>
    +        try {
    +<span class="nc" id="L137">            props = getClass().getClassLoader().getResources(&quot;log4j.properties&quot;);</span>
    +<span class="nc" id="L138">            p.load(props.nextElement().openStream());</span>
    +<span class="nc" id="L139">        } catch (Exception e) {</span>
    +<span class="nc" id="L140">            System.err.println(&quot;Logging initialisation failed, &quot; +</span>
    +<span class="nc" id="L141">                    &quot;cannot find log4j.properties file:&quot; + e);</span>
    +        }
    +<span class="nc" id="L143">        PropertyConfigurator.configure(p);</span>
    +<span class="nc" id="L144">        org.apache.log4j.Logger.getRootLogger().info(&quot;Logging initialized.&quot;);</span>
    +<span class="nc" id="L145">        CyclicLogger l = new CyclicLogger();</span>
    +<span class="nc" id="L146">        String pattern = bc.getProperty(&quot;eu.sqooss.logbuffer.pattern&quot;);</span>
    +<span class="nc bnc" id="L147" title="All 2 branches missed.">        if (pattern != null) {</span>
    +<span class="nc" id="L148">            org.apache.log4j.Logger.getRootLogger().info(&quot;Logging to buffer with pattern &lt;&quot; + pattern + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L149">            l.setLayout(new PatternLayout(pattern));</span>
    +<span class="nc" id="L150">        } else {</span>
    +<span class="nc" id="L151">            org.apache.log4j.Logger.getRootLogger().info(&quot;Logging to buffer with simple layout.&quot;);</span>
    +<span class="nc" id="L152">            l.setLayout(new SimpleLayout());</span>
    +        }
    +<span class="nc" id="L154">        l.setThreshold(org.apache.log4j.Level.WARN);</span>
    +<span class="nc" id="L155">        org.apache.log4j.Logger.getRootLogger().addAppender(l);</span>
    +<span class="nc" id="L156">        cyclicLogger = l;</span>
    +
    +<span class="nc" id="L158">        logManager = this;</span>
    +<span class="nc" id="L159">        return true;</span>
    +	}
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LoggerImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LoggerImpl.html
    new file mode 100644
    index 000000000..cd8d7b706
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LoggerImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>LoggerImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.logging</a> &gt; <span class="el_class">LoggerImpl</span></div><h1>LoggerImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">202 of 202</td><td class="ctr2">0%</td><td class="bar">10 of 10</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">44</td><td class="ctr2">44</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a7"><a href="LoggerImpl.java.html#L109" class="el_method">renderStackTrace(Exception)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a10"><a href="LoggerImpl.java.html#L81" class="el_method">warn(String, Exception)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="42" height="10" title="21" alt="21"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="LoggerImpl.java.html#L94" class="el_method">error(String, Exception)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="42" height="10" title="21" alt="21"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="LoggerImpl.java.html#L41" class="el_method">LoggerImpl(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="36" height="10" title="18" alt="18"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="LoggerImpl.java.html#L63" class="el_method">debug(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="32" height="10" title="16" alt="16"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="LoggerImpl.java.html#L69" class="el_method">info(String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="32" height="10" title="16" alt="16"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a9"><a href="LoggerImpl.java.html#L75" class="el_method">warn(String)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="32" height="10" title="16" alt="16"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="LoggerImpl.java.html#L88" class="el_method">error(String)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="32" height="10" title="16" alt="16"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">3</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="LoggerImpl.java.html#L105" class="el_method">unget()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="16" height="10" title="8" alt="8"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="LoggerImpl.java.html#L101" class="el_method">get()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="14" height="10" title="7" alt="7"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a4"><a href="LoggerImpl.java.html#L59" class="el_method">getName()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LoggerImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LoggerImpl.java.html
    new file mode 100644
    index 000000000..0b4795cfe
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/LoggerImpl.java.html
    @@ -0,0 +1,133 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>LoggerImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.logging</a> &gt; <span class="el_source">LoggerImpl.java</span></div><h1>LoggerImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.logging;
    +
    +import eu.sqooss.service.logging.Logger;
    +
    +public class LoggerImpl implements Logger {
    +
    +    // We use an object for synchronising between threads.
    +<span class="nc" id="L41">    private Object lockObject = new Object();</span>
    +
    +    // The name of this logger.
    +    private String name;
    +
    +    // The actual backend logger being used.
    +    private org.apache.log4j.Logger theLogger;
    +
    +    // Reference count this logger. Used by LogManager.
    +    private int takingsNumber;
    +
    +<span class="nc" id="L52">    public LoggerImpl(String name) {</span>
    +<span class="nc" id="L53">        this.name = name;</span>
    +<span class="nc" id="L54">        takingsNumber = 0;</span>
    +<span class="nc" id="L55">        theLogger = org.apache.log4j.Logger.getLogger(name);</span>
    +<span class="nc" id="L56">    }</span>
    +
    +    public String getName() {
    +<span class="nc" id="L59">        return name;</span>
    +    }
    +
    +    public void debug(String message) {
    +<span class="nc" id="L63">        synchronized (lockObject) {</span>
    +<span class="nc" id="L64">            theLogger.debug(message);</span>
    +        }
    +<span class="nc" id="L66">    }</span>
    +
    +    public void info(String message) {
    +<span class="nc" id="L69">        synchronized (lockObject) {</span>
    +<span class="nc" id="L70">            theLogger.info(message);</span>
    +        }
    +<span class="nc" id="L72">    }</span>
    +
    +    public void warn(String message) {
    +<span class="nc" id="L75">        synchronized (lockObject) {</span>
    +<span class="nc" id="L76">            theLogger.warn(message);</span>
    +        }
    +<span class="nc" id="L78">    }</span>
    +
    +    public void warn(String message, Exception e) {
    +<span class="nc" id="L81">        synchronized (lockObject) {</span>
    +<span class="nc" id="L82">            theLogger.warn(message);</span>
    +<span class="nc" id="L83">            theLogger.warn(renderStackTrace(e));</span>
    +        }
    +<span class="nc" id="L85">    }</span>
    +
    +    public void error(String message) {
    +<span class="nc" id="L88">        synchronized (lockObject) {</span>
    +<span class="nc" id="L89">            theLogger.error(message);</span>
    +        }
    +<span class="nc" id="L91">    }</span>
    +
    +    public void error(String message, Exception e) {
    +<span class="nc" id="L94">        synchronized (lockObject) {</span>
    +<span class="nc" id="L95">            theLogger.error(message);</span>
    +<span class="nc" id="L96">            theLogger.error(renderStackTrace(e));</span>
    +        }
    +<span class="nc" id="L98">    }</span>
    +
    +    protected void get() {
    +<span class="nc" id="L101">        takingsNumber++;</span>
    +<span class="nc" id="L102">    }</span>
    +
    +    protected int unget() {
    +<span class="nc" id="L105">        return --takingsNumber;</span>
    +    }
    +
    +    private static String renderStackTrace(Exception e) {
    +<span class="nc bnc" id="L109" title="All 2 branches missed.">        if (e==null) {</span>
    +<span class="nc" id="L110">            return &quot;&quot;;</span>
    +        }
    +
    +<span class="nc" id="L113">        StringBuilder b = new StringBuilder();</span>
    +<span class="nc" id="L114">        b.append(e.getMessage());</span>
    +<span class="nc" id="L115">        b.append(&quot;:\n&quot;);</span>
    +<span class="nc" id="L116">        StackTraceElement stack[] = e.getStackTrace();</span>
    +<span class="nc bnc" id="L117" title="All 4 branches missed.">        if ((b==null) || (stack==null)) {</span>
    +<span class="nc" id="L118">            return &quot;&quot;;</span>
    +        }
    +<span class="nc bnc" id="L120" title="All 2 branches missed.">        for (StackTraceElement s : stack) {</span>
    +<span class="nc bnc" id="L121" title="All 2 branches missed.">            if (s!=null) {</span>
    +<span class="nc" id="L122">                b.append(&quot;    &quot;);</span>
    +<span class="nc" id="L123">                b.append(s.toString());</span>
    +<span class="nc" id="L124">                b.append(&quot;\n&quot;);</span>
    +            }
    +        }
    +<span class="nc" id="L127">        return b.toString();</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/index.html
    new file mode 100644
    index 000000000..2c998dd8e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.logging</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.logging</span></div><h1>eu.sqooss.impl.service.logging</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">492 of 492</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">38</td><td class="ctr2">38</td><td class="ctr1">117</td><td class="ctr2">117</td><td class="ctr1">27</td><td class="ctr2">27</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="LogManagerImpl.html" class="el_class">LogManagerImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="225" alt="225"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h0">57</td><td class="ctr2" id="i0">57</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="LoggerImpl.html" class="el_class">LoggerImpl</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="107" height="10" title="202" alt="202"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">44</td><td class="ctr2" id="i1">44</td><td class="ctr1" id="j1">11</td><td class="ctr2" id="k1">11</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="CyclicLogger.html" class="el_class">CyclicLogger</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="34" height="10" title="65" alt="65"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">6</td><td class="ctr2" id="g2">6</td><td class="ctr1" id="h2">16</td><td class="ctr2" id="i2">16</td><td class="ctr1" id="j2">5</td><td class="ctr2" id="k2">5</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/index.source.html
    new file mode 100644
    index 000000000..e6f437942
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.logging/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.logging</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.logging</span></div><h1>eu.sqooss.impl.service.logging</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">492 of 492</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">38</td><td class="ctr2">38</td><td class="ctr1">117</td><td class="ctr2">117</td><td class="ctr1">27</td><td class="ctr2">27</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="LogManagerImpl.java.html" class="el_source">LogManagerImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="225" alt="225"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h0">57</td><td class="ctr2" id="i0">57</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="LoggerImpl.java.html" class="el_source">LoggerImpl.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="107" height="10" title="202" alt="202"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">44</td><td class="ctr2" id="i1">44</td><td class="ctr1" id="j1">11</td><td class="ctr2" id="k1">11</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="CyclicLogger.java.html" class="el_source">CyclicLogger.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="34" height="10" title="65" alt="65"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">6</td><td class="ctr2" id="g2">6</td><td class="ctr1" id="h2">16</td><td class="ctr2" id="i2">16</td><td class="ctr1" id="j2">5</td><td class="ctr2" id="k2">5</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$DecreasingLongComparator.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$DecreasingLongComparator.html
    new file mode 100644
    index 000000000..76531c0cb
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$DecreasingLongComparator.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivatorImpl.DecreasingLongComparator</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.metricactivator</a> &gt; <span class="el_class">MetricActivatorImpl.DecreasingLongComparator</span></div><h1>MetricActivatorImpl.DecreasingLongComparator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">24 of 24</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="MetricActivatorImpl.java.html#L380" class="el_method">compare(Long, Long)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="MetricActivatorImpl.java.html#L377" class="el_method">MetricActivatorImpl.DecreasingLongComparator(MetricActivatorImpl)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="40" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$MetricSchedulerJob.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$MetricSchedulerJob.html
    new file mode 100644
    index 000000000..8f3a70d5e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$MetricSchedulerJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivatorImpl.MetricSchedulerJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.metricactivator</a> &gt; <span class="el_class">MetricActivatorImpl.MetricSchedulerJob</span></div><h1>MetricActivatorImpl.MetricSchedulerJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">294 of 294</td><td class="ctr2">0%</td><td class="bar">24 of 24</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">57</td><td class="ctr2">57</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a2"><a href="MetricActivatorImpl.java.html#L289" class="el_method">run()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="264" alt="264"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">51</td><td class="ctr2" id="i0">51</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="MetricActivatorImpl.java.html#L373" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="7" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="MetricActivatorImpl.java.html#L277" class="el_method">MetricActivatorImpl.MetricSchedulerJob(MetricActivatorImpl, AlitheiaPlugin, StoredProject)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="5" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="MetricActivatorImpl.java.html#L284" class="el_method">priority()</a></td><td class="bar" id="b3"/><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$RandomizedComparator.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$RandomizedComparator.html
    new file mode 100644
    index 000000000..7da09e3e6
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl$RandomizedComparator.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivatorImpl.RandomizedComparator</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.metricactivator</a> &gt; <span class="el_class">MetricActivatorImpl.RandomizedComparator</span></div><h1>MetricActivatorImpl.RandomizedComparator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="MetricActivatorImpl.java.html#L388" class="el_method">MetricActivatorImpl.RandomizedComparator(MetricActivatorImpl)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="11" alt="11"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="MetricActivatorImpl.java.html#L392" class="el_method">compare(Long, Long)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="87" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl.html
    new file mode 100644
    index 000000000..8b8bb6ac3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivatorImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.metricactivator</a> &gt; <span class="el_class">MetricActivatorImpl</span></div><h1>MetricActivatorImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">559 of 559</td><td class="ctr2">0%</td><td class="bar">44 of 44</td><td class="ctr2">0%</td><td class="ctr1">33</td><td class="ctr2">33</td><td class="ctr1">121</td><td class="ctr2">121</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a1"><a href="MetricActivatorImpl.java.html#L225" class="el_method">getExecutionOrder(Set)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="132" alt="132"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">23</td><td class="ctr2" id="i0">23</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="MetricActivatorImpl.java.html#L158" class="el_method">syncMetric(AlitheiaPlugin, StoredProject)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="86" height="10" title="95" alt="95"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="100" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">21</td><td class="ctr2" id="i1">21</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="MetricActivatorImpl.java.html#L401" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="65" height="10" title="72" alt="72"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h3">14</td><td class="ctr2" id="i3">14</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="MetricActivatorImpl.java.html#L190" class="el_method">canRunOnHost(StoredProject)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="60" height="10" title="66" alt="66"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="60" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h2">17</td><td class="ctr2" id="i2">17</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a10"><a href="MetricActivatorImpl.java.html#L109" class="el_method">syncMetrics(StoredProject, Class)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="55" height="10" title="61" alt="61"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="8" alt="8"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h4">13</td><td class="ctr2" id="i4">13</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="MetricActivatorImpl.java.html#L423" class="el_method">startUp()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="39" height="10" title="43" alt="43"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h5">10</td><td class="ctr2" id="i5">10</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="MetricActivatorImpl.java.html#L94" class="el_method">runMetric(DAObject, AlitheiaPlugin)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="31" height="10" title="35" alt="35"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">9</td><td class="ctr2" id="i6">9</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a9"><a href="MetricActivatorImpl.java.html#L146" class="el_method">syncMetrics(StoredProject)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="24" height="10" title="27" alt="27"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="MetricActivatorImpl.java.html#L135" class="el_method">syncMetrics(AlitheiaPlugin)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="19" height="10" title="21" alt="21"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h8">5</td><td class="ctr2" id="i8">5</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a2"><a href="MetricActivatorImpl.java.html#L84" class="el_method">MetricActivatorImpl()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a5"><a href="MetricActivatorImpl.java.html#L419" class="el_method">shutDown()</a></td><td class="bar" id="b10"/><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl.java.html
    new file mode 100644
    index 000000000..e132fe1ac
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorImpl.java.html
    @@ -0,0 +1,443 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivatorImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.metricactivator</a> &gt; <span class="el_source">MetricActivatorImpl.java</span></div><h1>MetricActivatorImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.metricactivator;
    +
    +import java.util.*;
    +import java.util.concurrent.atomic.AtomicLong;
    +
    +import eu.sqooss.service.abstractmetric.InvocationOrder;
    +
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.AbstractMetric;
    +import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
    +import eu.sqooss.service.abstractmetric.PluginInfo;
    +import eu.sqooss.service.abstractmetric.SchedulerHints;
    +import eu.sqooss.service.cluster.ClusterNodeActionException;
    +import eu.sqooss.service.cluster.ClusterNodeService;
    +import eu.sqooss.service.db.Bug;
    +import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.EncapsulationUnit;
    +import eu.sqooss.service.db.ExecutionUnit;
    +import eu.sqooss.service.db.MailMessage;
    +import eu.sqooss.service.db.MailingList;
    +import eu.sqooss.service.db.MailingListThread;
    +import eu.sqooss.service.db.Metric;
    +import eu.sqooss.service.db.MetricType;
    +import eu.sqooss.service.db.MetricType.Type;
    +import eu.sqooss.service.db.NameSpace;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.scheduler.Scheduler;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +import eu.sqooss.service.util.GraphTS;
    +
    +public class MetricActivatorImpl  implements MetricActivator {
    +
    +    /** The parent bundle's context object. */
    +    private BundleContext bc;
    +
    +    private AlitheiaCore core;
    +    private Logger logger;
    +    private PluginAdmin pa;
    +    private DBService db;
    +    private Scheduler sched;
    +<span class="nc" id="L84">    private boolean fastSync = false;</span>
    +
    +    private AtomicLong priority;
    +    
    +    private HashMap&lt;MetricType.Type, Class&lt;? extends DAObject&gt;&gt; metricTypesToActivators;
    +    
    +<span class="nc" id="L90">    public MetricActivatorImpl() { }</span>
    +
    +    @Override
    +	public &lt;T extends DAObject&gt; void runMetric(T resource, AlitheiaPlugin ap) {
    +<span class="nc" id="L94">    	Class&lt;? extends DAObject&gt; activator = resource.getClass();</span>
    +<span class="nc" id="L95">    	Job j = new MetricActivatorJob((AbstractMetric)ap, resource.getId(), logger, </span>
    +<span class="nc" id="L96">    			metricTypesToActivators.get(activator),</span>
    +<span class="nc" id="L97">    			priority.incrementAndGet(),</span>
    +<span class="nc" id="L98">    			fastSync);</span>
    +    	try {
    +<span class="nc" id="L100">            sched.enqueue(j);</span>
    +<span class="nc" id="L101">        } catch (SchedulerException e) {</span>
    +<span class="nc" id="L102">            logger.error(&quot;Could not start metric scheduler job&quot;);</span>
    +        }
    +<span class="nc" id="L104">	}</span>
    +
    +    /**{@inheritDoc}*/
    +    @Override
    +    public void syncMetrics(StoredProject sp, Class&lt;? extends DAObject&gt; actType) {
    +<span class="nc bnc" id="L109" title="All 2 branches missed.">    	if (!canRunOnHost(sp))</span>
    +<span class="nc" id="L110">            return;</span>
    +        
    +<span class="nc" id="L112">        List&lt;PluginInfo&gt; plugins = pa.listPluginProviders(actType);</span>
    +        
    +<span class="nc bnc" id="L114" title="All 4 branches missed.">        if (plugins == null || plugins.size() == 0) {</span>
    +<span class="nc" id="L115">            logger.warn(&quot;No metrics found for activation type &quot; </span>
    +<span class="nc" id="L116">                    + actType.getName());</span>
    +<span class="nc" id="L117">            return;</span>
    +        }
    +        
    +        /* Fire up plug-ins */
    +<span class="nc bnc" id="L121" title="All 2 branches missed.">        for (PluginInfo pi : plugins) {</span>
    +<span class="nc" id="L122">           AbstractMetric m = (AbstractMetric) bc.getService(pi.getServiceRef());</span>
    +           try {
    +<span class="nc" id="L124">               sched.enqueue(new MetricSchedulerJob(m, sp));</span>
    +<span class="nc" id="L125">           } catch (SchedulerException e) {</span>
    +<span class="nc" id="L126">               logger.error(&quot;Could not start metric scheduler job&quot;);</span>
    +           }
    +        }
    +<span class="nc" id="L129">    }</span>
    +
    +    /**{@inheritDoc}*/
    +    @SuppressWarnings(&quot;unchecked&quot;)
    +    @Override
    +    public void syncMetrics(AlitheiaPlugin ap) {
    +<span class="nc" id="L135">        List&lt;StoredProject&gt; lp = </span>
    +<span class="nc" id="L136">            (List&lt;StoredProject&gt;) db.doHQL(&quot;from StoredProject&quot;);</span>
    +        
    +<span class="nc bnc" id="L138" title="All 2 branches missed.">        for(StoredProject sp : lp) {</span>
    +<span class="nc" id="L139">            syncMetric(ap, sp);</span>
    +        }
    +<span class="nc" id="L141">    }</span>
    +
    +    /**{@inheritDoc}*/
    +    @Override
    +    public void syncMetrics(StoredProject sp) {
    +<span class="nc" id="L146">        Collection&lt;PluginInfo&gt; plugins = pa.listPlugins();</span>
    +        
    +<span class="nc bnc" id="L148" title="All 2 branches missed.">        for(PluginInfo p : plugins) {</span>
    +<span class="nc" id="L149">            AlitheiaPlugin ap = </span>
    +<span class="nc" id="L150">                (AlitheiaPlugin) bc.getService(p.getServiceRef());</span>
    +<span class="nc" id="L151">            syncMetric(ap, sp);</span>
    +        }
    +<span class="nc" id="L153">    }</span>
    +
    +    /**{@inheritDoc}*/
    +    @Override
    +    public void syncMetric(AlitheiaPlugin m, StoredProject sp) {
    +<span class="nc bnc" id="L158" title="All 2 branches missed.">        if (!canRunOnHost(sp))</span>
    +<span class="nc" id="L159">            return;</span>
    +<span class="nc" id="L160">        Set&lt;AlitheiaPlugin&gt; deps = new HashSet&lt;AlitheiaPlugin&gt;();</span>
    +<span class="nc" id="L161">        deps.add(m);</span>
    +        
    +<span class="nc bnc" id="L163" title="All 2 branches missed.">        for (String s: m.getDependencies()) {</span>
    +<span class="nc" id="L164">        	deps.add(pa.getImplementingPlugin(s));</span>
    +        }
    +        
    +<span class="nc" id="L167">        List&lt;AlitheiaPlugin&gt; toExec = getExecutionOrder(deps);</span>
    +        
    +        try {
    +<span class="nc" id="L170">            Collections.reverse(toExec);</span>
    +<span class="nc" id="L171">        	List&lt;Job&gt; jobs = new ArrayList&lt;Job&gt;();</span>
    +<span class="nc" id="L172">        	Job old = null;</span>
    +<span class="nc bnc" id="L173" title="All 2 branches missed.">        	for (AlitheiaPlugin a : toExec) {</span>
    +<span class="nc" id="L174">        		Job j = new MetricSchedulerJob(a, sp);</span>
    +<span class="nc" id="L175">        		jobs.add(j);</span>
    +<span class="nc bnc" id="L176" title="All 2 branches missed.">        		if (old != null) {</span>
    +<span class="nc" id="L177">        			old.addDependency(j);</span>
    +        		}
    +<span class="nc" id="L179">        		old = j;</span>
    +        	}
    +<span class="nc bnc" id="L181" title="All 2 branches missed.">        	for (Job j : jobs) {</span>
    +<span class="nc" id="L182">        		sched.enqueue(j);</span>
    +        	}
    +<span class="nc" id="L184">        } catch (SchedulerException e) {</span>
    +<span class="nc" id="L185">            logger.error(&quot;Could not start metric scheduler job&quot;);</span>
    +        }
    +<span class="nc" id="L187">    }</span>
    +
    +    private boolean canRunOnHost(StoredProject sp) {
    +<span class="nc" id="L190">        ClusterNodeService cns = null;</span>
    +        
    +<span class="nc" id="L192">        cns = core.getClusterNodeService();</span>
    +<span class="nc bnc" id="L193" title="All 2 branches missed.">        if (cns == null) {</span>
    +<span class="nc" id="L194">            logger.warn(&quot;ClusterNodeService reference not found &quot; +</span>
    +            		&quot;- ClusterNode assignment checks will be ignored&quot;);
    +<span class="nc" id="L196">            return true;</span>
    +        } else {
    +<span class="nc" id="L198">            ClusterNode node = sp.getClusternode();</span>
    +            
    +<span class="nc bnc" id="L200" title="All 2 branches missed.">            if (node == null) {</span>
    +                // project is not assigned yet to any ClusterNode, assign it
    +                // here by-default
    +                try {
    +<span class="nc" id="L204">                    cns.assignProject(sp);</span>
    +<span class="nc" id="L205">                } catch (ClusterNodeActionException ex) {</span>
    +<span class="nc" id="L206">                    logger.warn(&quot;Couldn't assign project &quot; + sp.getName()</span>
    +<span class="nc" id="L207">                            + &quot; to ClusterNode &quot; + cns.getClusterNodeName());</span>
    +<span class="nc" id="L208">                    return false;</span>
    +                }
    +            } else {
    +                // project is somewhere assigned , check if it is assigned to
    +                // this Cluster Node
    +<span class="nc bnc" id="L213" title="All 2 branches missed.">                if (!cns.isProjectAssigned(sp)) {</span>
    +<span class="nc" id="L214">                    logger.warn(&quot;Project &quot; + sp.getName() + &quot; is not assigned&quot; +</span>
    +<span class="nc" id="L215">                        &quot; to this ClusterNode - Ignoring Metric synchronization&quot;);</span>
    +<span class="nc" id="L216">                    return false;</span>
    +                }
    +            }
    +        }
    +        // Done with ClusterNode Checks
    +<span class="nc" id="L221">        return true;</span>
    +    }
    +    
    +    private List&lt;AlitheiaPlugin&gt; getExecutionOrder(Set&lt;AlitheiaPlugin&gt; unordered) {
    +<span class="nc" id="L225">    	Map&lt;AlitheiaPlugin, Integer&gt; idx = new HashMap&lt;AlitheiaPlugin, Integer&gt;();</span>
    +<span class="nc" id="L226">    	Map&lt;Integer, AlitheiaPlugin&gt; invidx = new HashMap&lt;Integer, AlitheiaPlugin&gt;();</span>
    +    	
    +<span class="nc" id="L228">    	GraphTS&lt;AlitheiaPlugin&gt; graph = new GraphTS&lt;AlitheiaPlugin&gt;(unordered.size());</span>
    +    	
    +    	//Build the adjacency matrix
    +<span class="nc bnc" id="L231" title="All 2 branches missed.">    	for (AlitheiaPlugin p : unordered) {</span>
    +<span class="nc bnc" id="L232" title="All 2 branches missed.">    		if (!idx.containsKey(p)) {</span>
    +<span class="nc" id="L233">        		int n = graph.addVertex(p);</span>
    +<span class="nc" id="L234">	    		idx.put(p, n);</span>
    +<span class="nc" id="L235">	    		invidx.put(n, p);</span>
    +	    	}
    +    		
    +<span class="nc" id="L238">    	    Set&lt;String&gt; deps = p.getDependencies();</span>
    +<span class="nc bnc" id="L239" title="All 2 branches missed.">    	    for (String metric : deps) {</span>
    +<span class="nc" id="L240">    	    	AlitheiaPlugin dep = pa.getImplementingPlugin(metric);</span>
    +    	    	
    +    	    	//Metrics are allowed to introduce self depedencies
    +<span class="nc bnc" id="L243" title="All 2 branches missed.">    	    	if (p.equals(dep)) {</span>
    +<span class="nc" id="L244">    	    	    continue;</span>
    +    	    	}
    +    	    	
    +<span class="nc bnc" id="L247" title="All 2 branches missed.">    	    	if (!idx.containsKey(dep)) {</span>
    +<span class="nc" id="L248">    	    		int n = graph.addVertex(dep);</span>
    +<span class="nc" id="L249">    	    		idx.put(dep, n);</span>
    +<span class="nc" id="L250">    	    		invidx.put(n, dep);</span>
    +    	    	}
    +<span class="nc" id="L252">    	    	graph.addEdge(idx.get(p), idx.get(dep));</span>
    +    	    }
    +    	}
    +    	
    +<span class="nc" id="L256">    	List&lt;AlitheiaPlugin&gt; sorted = graph.topo();</span>
    +    	
    +<span class="nc" id="L258">    	logger.debug(&quot;Calculated metric order:&quot;);</span>
    +<span class="nc bnc" id="L259" title="All 2 branches missed.">    	for (AlitheiaPlugin p : sorted) {</span>
    +<span class="nc" id="L260">    		logger.debug(&quot;  &quot; + p.getName());</span>
    +    	}
    +    	
    +<span class="nc" id="L263">    	return sorted;</span>
    +    }
    +    
    +    /**
    +     * Job that creates metric jobs. Used to avoid blocking the UI or user
    +     * scipts while scheduling large metric updates. Its priority ensures
    +     * that it will not fill up queues while updater jobs are running, 
    +     * leaving memory free till it is really required. 
    +     */
    +    private class MetricSchedulerJob extends Job {
    +
    +        private AlitheiaPlugin m;
    +        private StoredProject sp;
    +        
    +<span class="nc" id="L277">        public MetricSchedulerJob(AlitheiaPlugin m, StoredProject sp) {</span>
    +<span class="nc" id="L278">            this.m = m;</span>
    +<span class="nc" id="L279">            this.sp = sp;</span>
    +<span class="nc" id="L280">        }</span>
    +        
    +        @Override
    +        public long priority() {
    +<span class="nc" id="L284">            return 0x2;</span>
    +        }
    +
    +        @Override
    +        protected void run() throws Exception {
    +<span class="nc" id="L289">            DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L290">            dbs.startDBSession();</span>
    +<span class="nc" id="L291">            sp = DAObject.loadDAObyId(sp.getId(), StoredProject.class);</span>
    +<span class="nc" id="L292">            PluginInfo mi = pa.getPluginInfo(m);</span>
    +<span class="nc" id="L293">            Set&lt;Class&lt;? extends DAObject&gt;&gt; actTypes = mi.getActivationTypes();</span>
    +            
    +<span class="nc bnc" id="L295" title="All 4 branches missed.">            if ((actTypes == null) || actTypes.isEmpty()) {</span>
    +<span class="nc" id="L296">                logger.error(&quot;Plugin &quot; + mi.getPluginName() +</span>
    +<span class="nc" id="L297">                            &quot; has no activation types&quot;);</span>
    +<span class="nc" id="L298">                return;</span>
    +            }
    +
    +<span class="nc" id="L301">            List&lt;Metric&gt; metrics = pa.getPlugin(mi).getAllSupportedMetrics();</span>
    +            
    +<span class="nc" id="L303">            Map&lt;MetricType.Type, TreeSet&lt;Long&gt;&gt; objectIds = new HashMap&lt;MetricType.Type, TreeSet&lt;Long&gt;&gt;();</span>
    +
    +<span class="nc bnc" id="L305" title="All 2 branches missed.">            for (Metric m : metrics) {</span>
    +<span class="nc" id="L306">            	Map&lt;MetricType.Type, SortedSet&lt;Long&gt;&gt; IDs = </span>
    +<span class="nc" id="L307">            		pa.getImplementingPlugin(m.getMnemonic()).getObjectIdsToSync(sp, m);</span>
    +<span class="nc bnc" id="L308" title="All 2 branches missed.">            	for (MetricType.Type t : IDs.keySet()) {</span>
    +            		
    +<span class="nc bnc" id="L310" title="All 2 branches missed.">            		if (objectIds.get(t) == null) {</span>
    +<span class="nc" id="L311">                    	objectIds.put(t, new TreeSet&lt;Long&gt;());	</span>
    +                    }
    +                    
    +<span class="nc" id="L314">                    objectIds.get(t).addAll(IDs.get(t));</span>
    +            	}
    +            }
    +            
    +<span class="nc" id="L318">            AbstractMetric metric = </span>
    +<span class="nc" id="L319">                (AbstractMetric) bc.getService(mi.getServiceRef());</span>
    +<span class="nc" id="L320">            HashSet&lt;Job&gt; jobs = new HashSet&lt;Job&gt;();</span>
    +            
    +            /*Check what is the default activation ordering as suggested by the metric*/
    +            Class&lt;? extends DAObject&gt;[] activOrder;
    +            InvocationOrder invOrder;
    +<span class="nc" id="L325">            SchedulerHints hints = metric.getClass().getAnnotation(SchedulerHints.class);</span>
    +
    +<span class="nc bnc" id="L327" title="All 2 branches missed.">            if (hints == null) {</span>
    +<span class="nc" id="L328">                activOrder = (Class&lt;? extends DAObject&gt;[])</span>
    +<span class="nc" id="L329">            		SchedulerHints.class.getMethod(&quot;activationOrder&quot;).getDefaultValue();</span>
    +<span class="nc" id="L330">                invOrder = (InvocationOrder)</span>
    +<span class="nc" id="L331">                       SchedulerHints.class.getMethod(&quot;invocationOrder&quot;).getDefaultValue();</span>
    +<span class="nc" id="L332">            } else {</span>
    +<span class="nc" id="L333">                activOrder = hints.activationOrder();</span>
    +<span class="nc" id="L334">                invOrder = hints.invocationOrder();</span>
    +            }
    +
    +			/*
    +			 * Iterate over all activation types but only create a job when
    +			 * there exists stuff to recalculate the metric on.
    +			 */
    +<span class="nc bnc" id="L341" title="All 2 branches missed.">            for (Class&lt;? extends DAObject&gt; activator : activOrder) {</span>
    +<span class="nc" id="L342">            	MetricType.Type actType = MetricType.fromActivator(activator);</span>
    +<span class="nc bnc" id="L343" title="All 2 branches missed.">            	if (!objectIds.keySet().contains(actType))</span>
    +<span class="nc" id="L344">            		continue;</span>
    +
    +                //We assume that resource IDs increase monotonically
    +<span class="nc" id="L347">                TreeSet&lt;Long&gt; ids = objectIds.get(actType);</span>
    +<span class="nc" id="L348">                TreeSet&lt;Long&gt; tmp = null;</span>
    +<span class="nc bnc" id="L349" title="All 2 branches missed.">                if (invOrder.equals(InvocationOrder.NEWFIRST)) {</span>
    +<span class="nc" id="L350">                    tmp = new TreeSet&lt;Long&gt;(new DecreasingLongComparator());</span>
    +<span class="nc bnc" id="L351" title="All 2 branches missed.">                } else if (invOrder.equals(InvocationOrder.RANDOM)) {</span>
    +<span class="nc" id="L352">                    tmp = new TreeSet&lt;Long&gt;(new RandomizedComparator());</span>
    +                }
    +
    +<span class="nc bnc" id="L355" title="All 2 branches missed.">                if (tmp != null) {</span>
    +<span class="nc" id="L356">                    tmp.addAll(ids);</span>
    +<span class="nc" id="L357">                    ids = tmp;</span>
    +                }
    +
    +<span class="nc bnc" id="L360" title="All 2 branches missed.">                for (Long l : ids) {</span>
    +<span class="nc" id="L361">            		jobs.add(new MetricActivatorJob(metric, l, logger, </span>
    +<span class="nc" id="L362">            			metricTypesToActivators.get(actType),</span>
    +<span class="nc" id="L363">            			priority.incrementAndGet(),</span>
    +<span class="nc" id="L364">            			fastSync));</span>
    +            	}
    +            }
    +<span class="nc" id="L367">            sched.enqueueNoDependencies(jobs);</span>
    +<span class="nc" id="L368">            dbs.commitDBSession();</span>
    +<span class="nc" id="L369">        }</span>
    +        
    +        @Override
    +        public String toString() {
    +<span class="nc" id="L373">            return &quot;MetricSchedulerJob - Project:{&quot; + sp + &quot;} Metric:{&quot; + m + &quot;}&quot;;</span>
    +        }
    +    }
    +
    +<span class="nc" id="L377">    class DecreasingLongComparator implements Comparator&lt;Long&gt; {</span>
    +        @Override
    +        public int compare(Long a, Long b) {
    +<span class="nc bnc" id="L380" title="All 2 branches missed.">            if (a &gt; b)</span>
    +<span class="nc" id="L381">                return -1;</span>
    +<span class="nc bnc" id="L382" title="All 2 branches missed.">            else if (a &lt; b)</span>
    +<span class="nc" id="L383">                return 1;</span>
    +<span class="nc" id="L384">            return 0;</span>
    +        }
    +    }
    +
    +<span class="nc" id="L388">    class RandomizedComparator implements Comparator&lt;Long&gt; {</span>
    +<span class="nc" id="L389">        Random r = new Random();</span>
    +        @Override
    +        public int compare(Long a, Long b) {
    +<span class="nc bnc" id="L392" title="All 2 branches missed.">            if(r.nextBoolean())</span>
    +<span class="nc" id="L393">                return -1;</span>
    +            else
    +<span class="nc" id="L395">                return 1;</span>
    +        }
    +    }
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L401">		this.bc = bc;</span>
    +<span class="nc" id="L402">		this.logger = l;</span>
    +		
    +<span class="nc" id="L404">        metricTypesToActivators = new HashMap&lt;Type, Class&lt;? extends DAObject&gt;&gt;();</span>
    +<span class="nc" id="L405">        metricTypesToActivators.put(Type.NAMESPACE, NameSpace.class);</span>
    +<span class="nc" id="L406">        metricTypesToActivators.put(Type.ENCAPSUNIT, EncapsulationUnit.class);</span>
    +<span class="nc" id="L407">        metricTypesToActivators.put(Type.EXECUNIT, ExecutionUnit.class);</span>
    +<span class="nc" id="L408">        metricTypesToActivators.put(Type.SOURCE_DIRECTORY, ProjectFile.class);</span>
    +<span class="nc" id="L409">        metricTypesToActivators.put(Type.SOURCE_FILE, ProjectFile.class);</span>
    +<span class="nc" id="L410">        metricTypesToActivators.put(Type.BUG, Bug.class);</span>
    +<span class="nc" id="L411">        metricTypesToActivators.put(Type.PROJECT_VERSION, ProjectVersion.class);</span>
    +<span class="nc" id="L412">        metricTypesToActivators.put(Type.MAILING_LIST, MailingList.class);</span>
    +<span class="nc" id="L413">        metricTypesToActivators.put(Type.MAILMESSAGE, MailMessage.class);</span>
    +<span class="nc" id="L414">        metricTypesToActivators.put(Type.MAILTHREAD, MailingListThread.class);</span>
    +<span class="nc" id="L415">	}</span>
    +
    +	@Override
    +	public void shutDown() {
    +<span class="nc" id="L419">	}</span>
    +
    +	@Override
    +	public boolean startUp() {
    +<span class="nc" id="L423">        core = AlitheiaCore.getInstance();</span>
    +
    +<span class="nc" id="L425">        priority = new AtomicLong();</span>
    +        //Lower priorities are reserved for updater jobs
    +<span class="nc" id="L427">        priority.set(0x1000);</span>
    +        
    +<span class="nc" id="L429">        this.pa = core.getPluginAdmin();</span>
    +<span class="nc" id="L430">        this.db = core.getDBService();</span>
    +<span class="nc" id="L431">        this.sched = core.getScheduler();</span>
    +        
    +<span class="nc" id="L433">        String sync = bc.getProperty(&quot;eu.sqooss.metricactivator.sync&quot;);</span>
    +        
    +<span class="nc bnc" id="L435" title="All 4 branches missed.">        if (sync != null &amp;&amp; sync.equalsIgnoreCase(&quot;fast&quot;))</span>
    +<span class="nc" id="L436">            this.fastSync = true;</span>
    +	
    +<span class="nc" id="L438">        return true;</span>
    +	}
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorJob.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorJob.html
    new file mode 100644
    index 000000000..1fef47adb
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivatorJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.metricactivator</a> &gt; <span class="el_class">MetricActivatorJob</span></div><h1>MetricActivatorJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">158 of 158</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">34</td><td class="ctr2">34</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a2"><a href="MetricActivatorJob.java.html#L86" class="el_method">run()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="100" alt="100"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">21</td><td class="ctr2" id="i0">21</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="MetricActivatorJob.java.html#L64" class="el_method">MetricActivatorJob(AbstractMetric, Long, Logger, Class, long, boolean)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="38" height="10" title="32" alt="32"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">11</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="MetricActivatorJob.java.html#L125" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="27" height="10" title="23" alt="23"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="MetricActivatorJob.java.html#L81" class="el_method">priority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorJob.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorJob.java.html
    new file mode 100644
    index 000000000..64e1875af
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/MetricActivatorJob.java.html
    @@ -0,0 +1,131 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivatorJob.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.metricactivator</a> &gt; <span class="el_source">MetricActivatorJob.java</span></div><h1>MetricActivatorJob.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.metricactivator;
    +
    +import java.util.List;
    +
    +import org.hibernate.exception.LockAcquisitionException;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.AbstractMetric;
    +import eu.sqooss.service.abstractmetric.AlreadyProcessingException;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
    +import eu.sqooss.service.abstractmetric.MetricMismatchException;
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Metric;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +
    +/**
    + * Generic metric job. Manages database sessions and job restarts
    + * on interesting exceptions.
    + */
    +public class MetricActivatorJob extends Job {
    +
    +    private Logger logger;
    +    private DBService dbs;
    +    private MetricActivator ma;
    +    private Long daoID;
    +    private AbstractMetric metric;
    +    private long priority;
    +    Class&lt;? extends DAObject&gt; daoType;
    +<span class="nc" id="L64">    private boolean fastSync = false; </span>
    +    
    +<span class="nc" id="L66">    MetricActivatorJob(AbstractMetric m, Long daoID, Logger l,</span>
    +            Class&lt;? extends DAObject&gt; daoType, long priority, 
    +            boolean fastSync) {
    +<span class="nc" id="L69">    	this.metric = m;</span>
    +<span class="nc" id="L70">        this.logger = l;</span>
    +<span class="nc" id="L71">        this.daoID = daoID;</span>
    +<span class="nc" id="L72">        this.daoType = daoType;</span>
    +<span class="nc" id="L73">        this.dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L74">        this.ma = AlitheiaCore.getInstance().getMetricActivator(); </span>
    +<span class="nc" id="L75">        this.priority = priority;</span>
    +<span class="nc" id="L76">        this.fastSync = fastSync;</span>
    +<span class="nc" id="L77">    }</span>
    +    
    +    @Override
    +    public long priority() {
    +<span class="nc" id="L81">        return priority;</span>
    +    }
    +
    +    @Override
    +    protected void run() throws Exception {
    +<span class="nc" id="L86">        dbs.startDBSession();</span>
    +<span class="nc" id="L87">        metric.setJob(this);</span>
    +<span class="nc" id="L88">        DAObject obj = dbs.findObjectById(daoType, daoID);</span>
    +
    +        try {
    +<span class="nc bnc" id="L91" title="All 2 branches missed.">            if (fastSync) {</span>
    +                /*
    +                * This reduces the number of queries performed when triggering
    +                * synchronization of metrics on large databases. We trust that
    +                * if there is a value in the database for one of the metric a
    +                * plug-in provides, there will be a value for all metrics. For
    +                * example, on the size (wc) metric this will save 5-6 queries
    +                * per projectfile. If the metric syncs 20M files
    +                * this optimisation prevents 100M queries from being executed.
    +                */
    +<span class="nc" id="L101">                List&lt;Metric&gt; supported = metric.getSupportedMetrics(obj.getClass());</span>
    +<span class="nc" id="L102">                metric.getResult(obj, supported.subList(0, 1));</span>
    +<span class="nc" id="L103">            } else {</span>
    +<span class="nc" id="L104">                metric.getResult(obj, metric.getSupportedMetrics(obj.getClass()));</span>
    +            }
    +<span class="nc" id="L106">        } catch (MetricMismatchException e) {</span>
    +<span class="nc" id="L107">            logger.warn(&quot;Metric &quot; + metric.getName() + &quot; failed&quot;);</span>
    +<span class="nc" id="L108">        } catch (AlreadyProcessingException ape) {</span>
    +<span class="nc" id="L109">            logger.warn(&quot;DAO id &quot; + daoID + &quot; is locked, job has been &quot; +</span>
    +<span class="nc" id="L110">                    &quot;rescheduled&quot;);</span>
    +<span class="nc" id="L111">            dbs.rollbackDBSession();</span>
    +<span class="nc" id="L112">            return;</span>
    +<span class="nc" id="L113">        } catch (LockAcquisitionException lae) {</span>
    +<span class="nc" id="L114">            dbs.rollbackDBSession();</span>
    +        }
    +
    +<span class="nc bnc" id="L117" title="All 2 branches missed.">        if (!dbs.commitDBSession()) {</span>
    +<span class="nc" id="L118">            logger.warn(&quot;commit failed - restarting metric job&quot;);</span>
    +<span class="nc" id="L119">            restart();</span>
    +        }
    +<span class="nc" id="L121">    }</span>
    +
    +    @Override
    +    public String toString() {
    +<span class="nc" id="L125">        return &quot;MetricActivatorJob: Metric:{&quot; + metric.getName() +&quot;} Activator:{&quot; + daoType.getSimpleName() + &quot;} DAO:{&quot; + daoID + &quot;}&quot;;</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/index.html
    new file mode 100644
    index 000000000..67717369a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.metricactivator</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.metricactivator</span></div><h1>eu.sqooss.impl.service.metricactivator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,054 of 1,054</td><td class="ctr2">0%</td><td class="bar">78 of 78</td><td class="ctr2">0%</td><td class="ctr1">62</td><td class="ctr2">62</td><td class="ctr1">223</td><td class="ctr2">223</td><td class="ctr1">23</td><td class="ctr2">23</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a0"><a href="MetricActivatorImpl.html" class="el_class">MetricActivatorImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="559" alt="559"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="44" alt="44"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">33</td><td class="ctr2" id="g0">33</td><td class="ctr1" id="h0">121</td><td class="ctr2" id="i0">121</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="MetricActivatorImpl$MetricSchedulerJob.html" class="el_class">MetricActivatorImpl.MetricSchedulerJob</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="63" height="10" title="294" alt="294"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="65" height="10" title="24" alt="24"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">57</td><td class="ctr2" id="i1">57</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a4"><a href="MetricActivatorJob.html" class="el_class">MetricActivatorJob</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="33" height="10" title="158" alt="158"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="10" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">6</td><td class="ctr2" id="g2">6</td><td class="ctr1" id="h2">34</td><td class="ctr2" id="i2">34</td><td class="ctr1" id="j2">4</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="MetricActivatorImpl$DecreasingLongComparator.html" class="el_class">MetricActivatorImpl.DecreasingLongComparator</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="5" height="10" title="24" alt="24"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="10" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h3">6</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">2</td><td class="ctr2" id="k3">2</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a3"><a href="MetricActivatorImpl$RandomizedComparator.html" class="el_class">MetricActivatorImpl.RandomizedComparator</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="4" height="10" title="19" alt="19"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="5" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">5</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j4">2</td><td class="ctr2" id="k4">2</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/index.source.html
    new file mode 100644
    index 000000000..885f0e9e0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.metricactivator/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.metricactivator</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.metricactivator</span></div><h1>eu.sqooss.impl.service.metricactivator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,054 of 1,054</td><td class="ctr2">0%</td><td class="bar">78 of 78</td><td class="ctr2">0%</td><td class="ctr1">62</td><td class="ctr2">62</td><td class="ctr1">223</td><td class="ctr2">223</td><td class="ctr1">23</td><td class="ctr2">23</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a0"><a href="MetricActivatorImpl.java.html" class="el_source">MetricActivatorImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="896" alt="896"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="74" alt="74"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">56</td><td class="ctr2" id="g0">56</td><td class="ctr1" id="h0">189</td><td class="ctr2" id="i0">189</td><td class="ctr1" id="j0">19</td><td class="ctr2" id="k0">19</td><td class="ctr1" id="l0">4</td><td class="ctr2" id="m0">4</td></tr><tr><td id="a1"><a href="MetricActivatorJob.java.html" class="el_source">MetricActivatorJob.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="21" height="10" title="158" alt="158"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">34</td><td class="ctr2" id="i1">34</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl$PluginUninstallJob.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl$PluginUninstallJob.html
    new file mode 100644
    index 000000000..665c1a5fc
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl$PluginUninstallJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PAServiceImpl.PluginUninstallJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.pa</a> &gt; <span class="el_class">PAServiceImpl.PluginUninstallJob</span></div><h1>PAServiceImpl.PluginUninstallJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">121 of 121</td><td class="ctr2">0%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">31</td><td class="ctr2">31</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a2"><a href="PAServiceImpl.java.html#L638" class="el_method">run()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="99" alt="99"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">26</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="PAServiceImpl.java.html#L685" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="13" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="PAServiceImpl.java.html#L625" class="el_method">PAServiceImpl.PluginUninstallJob(PAServiceImpl, Long)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="10" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="PAServiceImpl.java.html#L632" class="el_method">priority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl.html
    new file mode 100644
    index 000000000..59c2ca7e3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PAServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.pa</a> &gt; <span class="el_class">PAServiceImpl</span></div><h1>PAServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">771 of 771</td><td class="ctr2">0%</td><td class="bar">84 of 84</td><td class="ctr2">0%</td><td class="ctr1">70</td><td class="ctr2">70</td><td class="ctr1">219</td><td class="ctr2">219</td><td class="ctr1">27</td><td class="ctr2">27</td></tr></tfoot><tbody><tr><td id="a11"><a href="PAServiceImpl.java.html#L445" class="el_method">installPlugin(Long)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="87" alt="87"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">24</td><td class="ctr2" id="i0">24</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a20"><a href="PAServiceImpl.java.html#L571" class="el_method">pluginUpdated(AlitheiaPlugin)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="99" height="10" title="72" alt="72"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h1">17</td><td class="ctr2" id="i1">17</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="PAServiceImpl.java.html#L601" class="el_method">getImplementingPlugin(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="70" height="10" title="51" alt="51"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h6">11</td><td class="ctr2" id="i6">11</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a18"><a href="PAServiceImpl.java.html#L327" class="el_method">pluginRegistered(ServiceReference)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="63" height="10" title="46" alt="46"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h2">14</td><td class="ctr2" id="i2">14</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a24"><a href="PAServiceImpl.java.html#L691" class="el_method">startUp()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="62" height="10" title="45" alt="45"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h3">13</td><td class="ctr2" id="i3">13</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a25"><a href="PAServiceImpl.java.html#L507" class="el_method">uninstallPlugin(Long)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="57" height="10" title="42" alt="42"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h8">10</td><td class="ctr2" id="i8">10</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a8"><a href="PAServiceImpl.java.html#L156" class="el_method">getPluginService(Long)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="55" height="10" title="40" alt="40"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f9">3</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h7">11</td><td class="ctr2" id="i7">11</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="PAServiceImpl.java.html#L220" class="el_method">createRegisteredPI(ServiceReference)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="52" height="10" title="38" alt="38"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d12"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f12">2</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h4">12</td><td class="ctr2" id="i4">12</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a0"><a href="PAServiceImpl.java.html#L256" class="el_method">createInstalledPI(ServiceReference, Plugin)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="52" height="10" title="38" alt="38"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d13"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f13">2</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h5">12</td><td class="ctr2" id="i5">12</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a19"><a href="PAServiceImpl.java.html#L362" class="el_method">pluginUnregistering(ServiceReference)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="45" height="10" title="33" alt="33"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d14"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f14">2</td><td class="ctr2" id="g14">2</td><td class="ctr1" id="h9">10</td><td class="ctr2" id="i9">10</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a13"><a href="PAServiceImpl.java.html#L524" class="el_method">listPluginProviders(Class)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="45" height="10" title="33" alt="33"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h12">9</td><td class="ctr2" id="i12">9</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="PAServiceImpl.java.html#L539" class="el_method">getPluginInfo(AlitheiaPlugin)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="44" height="10" title="32" alt="32"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h13">9</td><td class="ctr2" id="i13">9</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a7"><a href="PAServiceImpl.java.html#L189" class="el_method">getPluginObject(ServiceReference)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="40" height="10" title="29" alt="29"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f10">3</td><td class="ctr2" id="g10">3</td><td class="ctr1" id="h10">10</td><td class="ctr2" id="i10">10</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a21"><a href="PAServiceImpl.java.html#L398" class="el_method">serviceChanged(ServiceEvent)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="35" height="10" title="26" alt="26"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e12">0%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h11">10</td><td class="ctr2" id="i11">10</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a5"><a href="PAServiceImpl.java.html#L306" class="el_method">getPluginInfo(ServiceReference)</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="33" height="10" title="24" alt="24"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e13">0%</td><td class="ctr1" id="f6">4</td><td class="ctr2" id="g6">4</td><td class="ctr1" id="h16">5</td><td class="ctr2" id="i16">5</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a16"><a href="PAServiceImpl.java.html#L386" class="el_method">pluginModified(ServiceReference)</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="30" height="10" title="22" alt="22"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e14">0%</td><td class="ctr1" id="f15">2</td><td class="ctr2" id="g15">2</td><td class="ctr1" id="h14">6</td><td class="ctr2" id="i14">6</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a10"><a href="PAServiceImpl.java.html#L135" class="el_method">getServiceId(String)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="27" height="10" title="20" alt="20"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e15">0%</td><td class="ctr1" id="f11">3</td><td class="ctr2" id="g11">3</td><td class="ctr1" id="h18">4</td><td class="ctr2" id="i18">4</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a9"><a href="PAServiceImpl.java.html#L113" class="el_method">getServiceId(ServiceReference)</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="22" height="10" title="16" alt="16"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d16"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e16">0%</td><td class="ctr1" id="f16">2</td><td class="ctr2" id="g16">2</td><td class="ctr1" id="h15">6</td><td class="ctr2" id="i15">6</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a15"><a href="PAServiceImpl.java.html#L92" class="el_method">PAServiceImpl()</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="19" height="10" title="14" alt="14"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h17">5</td><td class="ctr2" id="i17">5</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a17"><a href="PAServiceImpl.java.html#L285" class="el_method">pluginRefToPluginDAO(ServiceReference)</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="16" height="10" title="12" alt="12"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d17"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e17">0%</td><td class="ctr1" id="f17">2</td><td class="ctr2" id="g17">2</td><td class="ctr1" id="h19">4</td><td class="ctr2" id="i19">4</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a12"><a href="PAServiceImpl.java.html#L434" class="el_method">installPlugin(String)</a></td><td class="bar" id="b20"><img src="../../../.resources/redbar.gif" width="16" height="10" title="12" alt="12"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d18"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e18">0%</td><td class="ctr1" id="f18">2</td><td class="ctr2" id="g18">2</td><td class="ctr1" id="h20">4</td><td class="ctr2" id="i20">4</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a26"><a href="PAServiceImpl.java.html#L496" class="el_method">uninstallPlugin(String)</a></td><td class="bar" id="b21"><img src="../../../.resources/redbar.gif" width="16" height="10" title="12" alt="12"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d19"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e19">0%</td><td class="ctr1" id="f19">2</td><td class="ctr2" id="g19">2</td><td class="ctr1" id="h21">4</td><td class="ctr2" id="i21">4</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a3"><a href="PAServiceImpl.java.html#L562" class="el_method">getPlugin(PluginInfo)</a></td><td class="bar" id="b22"><img src="../../../.resources/redbar.gif" width="12" height="10" title="9" alt="9"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d20"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e20">0%</td><td class="ctr1" id="f20">2</td><td class="ctr2" id="g20">2</td><td class="ctr1" id="h22">3</td><td class="ctr2" id="i22">3</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a22"><a href="PAServiceImpl.java.html#L724" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b23"><img src="../../../.resources/redbar.gif" width="9" height="10" title="7" alt="7"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">3</td><td class="ctr2" id="i23">3</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a6"><a href="PAServiceImpl.java.html#L555" class="el_method">getPluginInfo(String)</a></td><td class="bar" id="b24"><img src="../../../.resources/redbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a14"><a href="PAServiceImpl.java.html#L427" class="el_method">listPlugins()</a></td><td class="bar" id="b25"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c25">0%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">1</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h25">1</td><td class="ctr2" id="i25">1</td><td class="ctr1" id="j25">1</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a23"><a href="PAServiceImpl.java.html#L719" class="el_method">shutDown()</a></td><td class="bar" id="b26"><img src="../../../.resources/redbar.gif" width="1" height="10" title="1" alt="1"/></td><td class="ctr2" id="c26">0%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">1</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">1</td><td class="ctr2" id="i26">1</td><td class="ctr1" id="j26">1</td><td class="ctr2" id="k26">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl.java.html
    new file mode 100644
    index 000000000..4bef608df
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/PAServiceImpl.java.html
    @@ -0,0 +1,730 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PAServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.pa</a> &gt; <span class="el_source">PAServiceImpl.java</span></div><h1>PAServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.pa;
    +
    +import java.util.ArrayList;
    +import java.util.Collection;
    +import java.util.HashSet;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.Set;
    +import java.util.concurrent.ConcurrentHashMap;
    +
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.Constants;
    +import org.osgi.framework.InvalidSyntaxException;
    +import org.osgi.framework.ServiceEvent;
    +import org.osgi.framework.ServiceListener;
    +import org.osgi.framework.ServiceReference;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
    +import eu.sqooss.service.abstractmetric.PluginInfo;
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Metric;
    +import eu.sqooss.service.db.Plugin;
    +import eu.sqooss.service.db.PluginConfiguration;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.scheduler.Scheduler;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +
    +public class PAServiceImpl implements PluginAdmin, ServiceListener {
    +
    +    /* ===[ Constants: Service search filters ]=========================== */
    +
    +    private static final String SREF_FILTER_PLUGIN =
    +        &quot;(&quot; + Constants.OBJECTCLASS + &quot;=&quot; + PluginAdmin.PLUGIN_CLASS + &quot;)&quot;;
    +
    +    /* ===[ Constants: Common log messages ]============================== */
    +
    +    private static final String NO_MATCHING_SERVICES =
    +        &quot;No matching services were found!&quot;;
    +    private static final String NOT_A_PLUGIN =
    +        &quot;Not a metric plug-in service!&quot;;
    +    private static final String INVALID_FILTER_SYNTAX =
    +        &quot;Invalid filter syntax!&quot;;
    +    private static final String INVALID_SREF =
    +        &quot;Invalid service reference!&quot;;
    +    private static final String CANT_GET_SOBJ =
    +        &quot;The service object can not be retrieved!&quot;;
    +
    +    /* ===[ Global variable ]============================================= */
    +
    +    // The parent bundle's context object
    +    private BundleContext bc;
    +
    +    // Required SQO-OSS components
    +    private Logger logger;
    +<span class="nc" id="L92">    private DBService sobjDB = null;</span>
    +<span class="nc" id="L93">    private AlitheiaCore sobjCore = null;</span>
    +    
    +    /**
    +     * Keeps a list of registered metric plug-in's services, indexed by the
    +     * plugin's hash code (stored in the database).
    +     */
    +<span class="nc" id="L99">    private ConcurrentHashMap&lt;String, PluginInfo&gt; registeredPlugins =</span>
    +<span class="nc" id="L100">        new ConcurrentHashMap&lt;String, PluginInfo&gt;();</span>
    +
    +<span class="nc" id="L102">    public PAServiceImpl () { }</span>
    +
    +    /**
    +     * Retrieves the service Id of the specified service reference.
    +     *
    +     * @param sref - the service reference
    +     *
    +     * @return The service Id.
    +     */
    +    private Long getServiceId (ServiceReference sref) {
    +        // Check for a valid service reference
    +<span class="nc bnc" id="L113" title="All 2 branches missed.">        if (sref == null) {</span>
    +<span class="nc" id="L114">            logger.error(INVALID_SREF);</span>
    +<span class="nc" id="L115">            return null;</span>
    +        }
    +        try {
    +<span class="nc" id="L118">            return (Long) sref.getProperty(Constants.SERVICE_ID);</span>
    +        }
    +<span class="nc" id="L120">        catch (ClassCastException e) {</span>
    +<span class="nc" id="L121">            return null;</span>
    +        }
    +    }
    +
    +    /**
    +     * Extracts the service Id of the metric plug-in service described in the
    +     * metric plug-in's information object located by the specified hash
    +     * code's value.
    +     *
    +     * @param hash - the hash code's value
    +     *
    +     * @return The service Id.
    +     */
    +    private Long getServiceId (String hash) {
    +<span class="nc bnc" id="L135" title="All 4 branches missed.">        if ((hash != null) &amp;&amp; (registeredPlugins.containsKey(hash))) {</span>
    +            // Get the plug-in info object pointed by the given hash
    +<span class="nc" id="L137">            PluginInfo infoPlugin = registeredPlugins.get(hash);</span>
    +
    +            // Return the service's Id
    +<span class="nc" id="L140">            return getServiceId(infoPlugin.getServiceRef());</span>
    +        }
    +
    +<span class="nc" id="L143">        return null;</span>
    +    }
    +
    +    /**
    +     * Gets the metric plug-in's service reference, that is registered with
    +     * the given service Id.
    +     *
    +     * @param serviceId - the service Id
    +     *
    +     * @return The metric plug-in's service reference.
    +     */
    +    private ServiceReference getPluginService (Long serviceId) {
    +        // Format a search filter for a service with the given service Id
    +<span class="nc" id="L156">        String serviceFilter =</span>
    +<span class="nc" id="L157">            &quot;(&quot; + Constants.SERVICE_ID +&quot;=&quot; + serviceId + &quot;)&quot;;</span>
    +
    +        // Retrieve all services that match the search filter
    +<span class="nc" id="L160">        ServiceReference[] matchingServices = null;</span>
    +        try {
    +            /* Since the service search is performed using a service Id,
    +             * it MUST return only one service reference.
    +             */
    +<span class="nc" id="L165">            matchingServices = bc.getServiceReferences(null, serviceFilter);</span>
    +<span class="nc bnc" id="L166" title="All 4 branches missed.">            if ((matchingServices == null) || (matchingServices.length != 1)) {</span>
    +<span class="nc" id="L167">                logger.error(NO_MATCHING_SERVICES);</span>
    +<span class="nc" id="L168">            }</span>
    +            else {
    +<span class="nc" id="L170">                return matchingServices[0];</span>
    +            }
    +        }
    +<span class="nc" id="L173">        catch (InvalidSyntaxException e) {</span>
    +<span class="nc" id="L174">            logger.error(INVALID_FILTER_SYNTAX);</span>
    +        }
    +
    +<span class="nc" id="L177">        return null;</span>
    +    }
    +
    +    /**
    +     * Gets the metric plug-in's object registered with the given service.
    +     *
    +     * @param srefPlugin - the metric plug-in's service reference
    +     *
    +     * @return The metric plug-in's object.
    +     */
    +    private AlitheiaPlugin getPluginObject (ServiceReference srefPlugin) {
    +        // Check for a valid service reference
    +<span class="nc bnc" id="L189" title="All 2 branches missed.">        if (srefPlugin == null) {</span>
    +<span class="nc" id="L190">            logger.error(INVALID_SREF);</span>
    +<span class="nc" id="L191">            return null;</span>
    +        }
    +        try {
    +            // Retrieve the metric plug-in's object from the service reference
    +<span class="nc" id="L195">            AlitheiaPlugin sobjPlugin = (AlitheiaPlugin) bc.getService(srefPlugin);</span>
    +            // Check for a valid plug-in object
    +<span class="nc bnc" id="L197" title="All 2 branches missed.">            if (sobjPlugin == null) {</span>
    +<span class="nc" id="L198">                logger.error(CANT_GET_SOBJ);</span>
    +            }
    +<span class="nc" id="L200">            return sobjPlugin;</span>
    +        }
    +<span class="nc" id="L202">        catch (ClassCastException e) {</span>
    +<span class="nc" id="L203">            logger.warn(NOT_A_PLUGIN);</span>
    +        }
    +
    +<span class="nc" id="L206">        return null;</span>
    +    }
    +
    +    /**
    +     * Creates a new &lt;code&gt;PluginInfo&lt;/code&gt; object for registered plug-in
    +     * from the given metric plug-in's service.
    +     *
    +     * @param srefPlugin - the metric plug-in's service reference
    +     *
    +     * @return The new &lt;code&gt;PluginInfo&lt;/code&gt; object, or &lt;code&gt;null&lt;/code&gt;
    +     *   upon failure.
    +     */
    +    private PluginInfo createRegisteredPI (ServiceReference srefPlugin) {
    +        // Get the metric plug-in's object
    +<span class="nc" id="L220">        AlitheiaPlugin sobjPlugin = getPluginObject(srefPlugin);</span>
    +
    +        // Create a plug-in info object
    +<span class="nc bnc" id="L223" title="All 2 branches missed.">        if (sobjPlugin != null) {</span>
    +<span class="nc" id="L224">            logger.debug(</span>
    +<span class="nc" id="L225">                    &quot;Creating info object for registered plug-in &quot;</span>
    +<span class="nc" id="L226">                    + sobjPlugin.getName());</span>
    +//            PluginInfo pluginInfo = new PluginInfo();
    +//            pluginInfo.setPluginName(sobjPlugin.getName());
    +//            pluginInfo.setPluginVersion(sobjPlugin.getVersion());
    +//            pluginInfo.setServiceRef(srefPlugin);
    +//            pluginInfo.setHashcode(getServiceId(srefPlugin).toString());
    +<span class="nc" id="L232">            PluginInfo pluginInfo =</span>
    +<span class="nc" id="L233">                new PluginInfo(sobjPlugin.getConfigurationSchema(), sobjPlugin);</span>
    +<span class="nc" id="L234">            pluginInfo.setServiceRef(srefPlugin);</span>
    +<span class="nc" id="L235">            pluginInfo.setHashcode(sobjPlugin.getUniqueKey());</span>
    +            // Mark as not installed
    +<span class="nc" id="L237">            pluginInfo.installed = false;</span>
    +<span class="nc" id="L238">            return pluginInfo;</span>
    +        }
    +
    +<span class="nc" id="L241">        return null;</span>
    +    }
    +
    +    /**
    +     * Creates a new &lt;code&gt;PluginInfo&lt;/code&gt; object for installed plug-in
    +     * from the given metric plug-in's service and database record.
    +     *
    +     * @param srefPlugin - the metric plug-in's service reference
    +     * @param p - the DAO object associated with this metric plug-in
    +     *
    +     * @return The new &lt;code&gt;PluginInfo&lt;/code&gt; object, or &lt;code&gt;null&lt;/code&gt;
    +     *   upon failure.
    +     */
    +    private PluginInfo createInstalledPI (ServiceReference srefPlugin, Plugin p) {
    +        // Get the metric plug-in's object
    +<span class="nc" id="L256">        AlitheiaPlugin sobjPlugin = getPluginObject(srefPlugin);</span>
    +        // Create a plug-in info object
    +<span class="nc bnc" id="L258" title="All 2 branches missed.">        if (sobjPlugin != null) {</span>
    +<span class="nc" id="L259">            logger.debug(</span>
    +<span class="nc" id="L260">                    &quot;Creating info object for installed plug-in &quot;</span>
    +<span class="nc" id="L261">                    + sobjPlugin.getName());</span>
    +<span class="nc" id="L262">            PluginInfo pluginInfo =</span>
    +<span class="nc" id="L263">                new PluginInfo(p.getConfigurations(), sobjPlugin);</span>
    +<span class="nc" id="L264">            pluginInfo.setServiceRef(srefPlugin);</span>
    +<span class="nc" id="L265">            pluginInfo.setHashcode(p.getHashcode());</span>
    +            // Mark as installed
    +<span class="nc" id="L267">            pluginInfo.installed = true;</span>
    +<span class="nc" id="L268">            return pluginInfo;</span>
    +        }
    +
    +<span class="nc" id="L271">        return null;</span>
    +    }
    +
    +    /**
    +     * Returns the database record associated with the metric plug-in that is
    +     * referenced by the given service reference.
    +     *
    +     * @param srefPlugin - the plug-in's service reference
    +     *
    +     * @return The &lt;code&gt;Plugin&lt;/code&gt; DAO object if found in the database,
    +     *   or &lt;code&gt;null&lt;/code&gt; when a matching record does not exist.
    +     */
    +    Plugin pluginRefToPluginDAO(ServiceReference srefPlugin) {
    +        // Get the metric plug-in's object
    +<span class="nc" id="L285">        AlitheiaPlugin sobjPlugin = getPluginObject(srefPlugin);</span>
    +
    +        // Return the DAO object associated with this plug-in
    +<span class="nc bnc" id="L288" title="All 2 branches missed.">        if (sobjPlugin != null) {</span>
    +<span class="nc" id="L289">            return Plugin.getPluginByHashcode(sobjPlugin.getUniqueKey());</span>
    +        }
    +
    +<span class="nc" id="L292">        return null;</span>
    +    }
    +
    +    /**
    +     * Gets the &lt;code&gt;PluginInfo&lt;/code&gt; object assigned to the given metric
    +     * plug-in's service.
    +     *
    +     * @param srefPlugin - the plug-in's service reference
    +     *
    +     * @return The &lt;code&gt;PluginInfo&lt;/code&gt; object, or &lt;code&gt;null&lt;/code&gt; when
    +     *  this plug-in has no &lt;code&gt;PluginInfo&lt;/code&gt; object assigned to it.
    +     */
    +    private PluginInfo getPluginInfo(ServiceReference srefPlugin) {
    +        // Search for a match through all PluginInfo objects
    +<span class="nc bnc" id="L306" title="All 2 branches missed.">        if (srefPlugin != null) {</span>
    +<span class="nc bnc" id="L307" title="All 2 branches missed.">            for (PluginInfo p : registeredPlugins.values()) {</span>
    +<span class="nc bnc" id="L308" title="All 2 branches missed.">                if (p.getServiceRef().equals(srefPlugin))</span>
    +<span class="nc" id="L309">                    return p;</span>
    +            }
    +        }
    +
    +<span class="nc" id="L313">        return null;</span>
    +    }
    +
    +    /**
    +     * Performs various maintenance operations upon registration of a new
    +     * metric plug-in's service.
    +     *
    +     * @param srefPlugin - the metric plug-in's service reference
    +     */
    +    private void pluginRegistered (ServiceReference srefPlugin) {
    +        // Keeps the PluginInfo object
    +        PluginInfo pluginInfo;
    +
    +        // Try to get the DAO that belongs to this metric plug-in
    +<span class="nc" id="L327">        Plugin daoPlugin = pluginRefToPluginDAO(srefPlugin);</span>
    +
    +        // Plug-in that is already installed, has a valid DAO
    +<span class="nc bnc" id="L330" title="All 2 branches missed.">        if (daoPlugin != null) {</span>
    +            // Create an info object for installed plug-in
    +<span class="nc" id="L332">            pluginInfo = createInstalledPI(srefPlugin, daoPlugin);</span>
    +<span class="nc" id="L333">        }</span>
    +        // This plug-in is just registered
    +        else {
    +            // Create an info object for registered plug-in
    +<span class="nc" id="L337">            pluginInfo = createRegisteredPI(srefPlugin);</span>
    +        }
    +
    +<span class="nc bnc" id="L340" title="All 2 branches missed.">        if (pluginInfo == null) {</span>
    +<span class="nc" id="L341">            logger.error(</span>
    +<span class="nc" id="L342">                    &quot;Upon plug-in service registration - &quot;</span>
    +                    + &quot; can not create a PluginInfo object!&quot;);
    +<span class="nc" id="L344">        }</span>
    +        else {
    +            // Store the info object into the info object's list
    +<span class="nc" id="L347">            registeredPlugins.put(pluginInfo.getHashcode(), pluginInfo);</span>
    +<span class="nc" id="L348">            logger.info(</span>
    +<span class="nc" id="L349">                    &quot;Plug-in service (&quot; + pluginInfo.getPluginName() + &quot;)&quot;</span>
    +<span class="nc" id="L350">                    + &quot; was registered.&quot;);</span>
    +        }
    +<span class="nc" id="L352">    }</span>
    +
    +    /**
    +     * Performs various maintenance operations during unregistration of an
    +     * existing metric plug-in's service.
    +     *
    +     * @param srefPlugin - the metric plug-in's service reference
    +     */
    +    private void pluginUnregistering (ServiceReference srefPlugin) {
    +        // Get the PluginInfo object assigned to this plug-in
    +<span class="nc" id="L362">        PluginInfo pluginInfo = getPluginInfo(srefPlugin);</span>
    +<span class="nc bnc" id="L363" title="All 2 branches missed.">        if (pluginInfo == null) {</span>
    +<span class="nc" id="L364">            logger.error(</span>
    +<span class="nc" id="L365">                    &quot;During plug-in service unregistration - &quot;</span>
    +                    + &quot; a matching PluginInfo object was not found!&quot;);
    +<span class="nc" id="L367">            return;</span>
    +        }
    +        else {
    +            // Remove the info object from the info object's list
    +<span class="nc" id="L371">            registeredPlugins.remove(pluginInfo.getHashcode());</span>
    +<span class="nc" id="L372">            logger.info(</span>
    +<span class="nc" id="L373">                    &quot;Plug-in service (&quot; + pluginInfo.getPluginName() + &quot;)&quot;</span>
    +<span class="nc" id="L374">                    + &quot; is unregistering.&quot;);</span>
    +        }
    +<span class="nc" id="L376">    }</span>
    +
    +    /**
    +     * Performs various maintenance operations upon a change in an existing
    +     * metric plug-in's service
    +     *
    +     * @param srefPlugin - the metric plug-in's service reference
    +     */
    +    private void pluginModified (ServiceReference srefPlugin) {
    +        // Get the PluginInfo object assigned to this plug-in
    +<span class="nc" id="L386">        PluginInfo pluginInfo = getPluginInfo(srefPlugin);</span>
    +<span class="nc bnc" id="L387" title="All 2 branches missed.">        if (pluginInfo != null) {</span>
    +<span class="nc" id="L388">            logger.info(</span>
    +<span class="nc" id="L389">                    &quot;Plug-in service (&quot; + pluginInfo.getPluginName() + &quot;)&quot;</span>
    +<span class="nc" id="L390">                    + &quot; was modified.&quot;);</span>
    +        }
    +<span class="nc" id="L392">    }</span>
    +
    +/* ===[ Implementation of the ServiceListener interface ]================= */
    +
    +    public void serviceChanged(ServiceEvent event) {
    +        // Get a reference to the affected service
    +<span class="nc" id="L398">        ServiceReference affectedService = event.getServiceReference();</span>
    +
    +<span class="nc" id="L400">        sobjDB.startDBSession();</span>
    +        
    +        // Find out what happened to the service
    +<span class="nc bnc" id="L403" title="All 4 branches missed.">        switch (event.getType()) {</span>
    +        // New service was registered
    +        case ServiceEvent.REGISTERED:
    +<span class="nc" id="L406">            pluginRegistered(affectedService);</span>
    +<span class="nc" id="L407">            break;</span>
    +        // An existing service is unregistering
    +        case ServiceEvent.UNREGISTERING:
    +<span class="nc" id="L410">            pluginUnregistering(affectedService);</span>
    +<span class="nc" id="L411">            break;</span>
    +        // The configuration of an existing service was modified
    +        case ServiceEvent.MODIFIED:
    +<span class="nc" id="L414">            pluginModified(affectedService);</span>
    +        }
    +
    +        // Close the DB session
    +<span class="nc" id="L418">        sobjDB.commitDBSession();</span>
    +<span class="nc" id="L419">    }</span>
    +
    +/* ===[ Implementation of the PluginAdmin interface ]===================== */
    +
    +    /* (non-Javadoc)
    +     * @see eu.sqooss.service.pa.PluginAdmin#listPlugins()
    +     */
    +    public Collection&lt;PluginInfo&gt; listPlugins() {
    +<span class="nc" id="L427">        return registeredPlugins.values();</span>
    +    }
    +
    +    /* (non-Javadoc)
    +     * @see eu.sqooss.service.pa.PluginAdmin#installPlugin(java.lang.String)
    +     */
    +    public boolean installPlugin(String hash) {
    +<span class="nc" id="L434">        Long sid = getServiceId(hash);</span>
    +<span class="nc bnc" id="L435" title="All 2 branches missed.">        if (sid != null) {</span>
    +<span class="nc" id="L436">            return installPlugin (sid);</span>
    +        }
    +<span class="nc" id="L438">        return false;</span>
    +    }
    +
    +    /* (non-Javadoc)
    +     * @see eu.sqooss.service.pa.PluginAdmin#installPlugin(java.lang.Long)
    +     */
    +    public boolean installPlugin(Long serviceID) {
    +<span class="nc" id="L445">        logger.info (</span>
    +<span class="nc" id="L446">                &quot;Installing plugin with service ID &quot; + serviceID);</span>
    +
    +        // Pre-formated error messages
    +<span class="nc" id="L449">        final String INSTALL_FAILED =</span>
    +<span class="nc" id="L450">            &quot;The installation of plugin with&quot;</span>
    +<span class="nc" id="L451">            + &quot; service ID &quot;+ serviceID</span>
    +<span class="nc" id="L452">            + &quot; failed : &quot;;</span>
    +
    +        try {
    +            // Get the metric plug-in's service
    +<span class="nc" id="L456">            ServiceReference srefPlugin = getPluginService(serviceID);</span>
    +
    +            // Get the metric plug-in's object
    +<span class="nc" id="L459">            AlitheiaPlugin sobjPlugin = getPluginObject(srefPlugin);</span>
    +<span class="nc bnc" id="L460" title="All 2 branches missed.">            if (sobjPlugin != null) {</span>
    +                // Execute the install() method of this metric plug-in,
    +                // and update the plug-in's information object upon success.
    +<span class="nc bnc" id="L463" title="All 2 branches missed.">                if (sobjPlugin.install()) {</span>
    +                    // Get the DAO that belongs to this metric plug-in
    +<span class="nc" id="L465">                    Plugin daoPlugin = pluginRefToPluginDAO(srefPlugin);</span>
    +<span class="nc bnc" id="L466" title="All 2 branches missed.">                    if (daoPlugin != null) {</span>
    +                        // Create an info object for installed plug-in
    +<span class="nc" id="L468">                        PluginInfo pluginInfo = createInstalledPI(srefPlugin,</span>
    +<span class="nc" id="L469">                                daoPlugin);</span>
    +<span class="nc bnc" id="L470" title="All 2 branches missed.">                        if (pluginInfo != null) {</span>
    +                            // Remove the old &quot;registered&quot; info object
    +<span class="nc" id="L472">                            registeredPlugins.remove(</span>
    +<span class="nc" id="L473">                                    sobjPlugin.getUniqueKey());</span>
    +                            // Store the info object
    +<span class="nc" id="L475">                            registeredPlugins.put(</span>
    +<span class="nc" id="L476">                                    pluginInfo.getHashcode(), pluginInfo);</span>
    +<span class="nc" id="L477">                            return true;</span>
    +                        }
    +                    }
    +                }
    +            }
    +            else {
    +<span class="nc" id="L483">                logger.warn(INSTALL_FAILED + CANT_GET_SOBJ);</span>
    +            }
    +<span class="nc" id="L485">        } catch (Error e) {</span>
    +<span class="nc" id="L486">            logger.warn(INSTALL_FAILED + e);</span>
    +        }
    +
    +<span class="nc" id="L489">        return false;</span>
    +    }
    +
    +    /* (non-Javadoc)
    +     * @see eu.sqooss.service.pa.PluginAdmin#uninstallPlugin(java.lang.String)
    +     */
    +    public boolean uninstallPlugin(String hash) {
    +<span class="nc" id="L496">        Long sid = getServiceId(hash);</span>
    +<span class="nc bnc" id="L497" title="All 2 branches missed.">        if (sid != null) {</span>
    +<span class="nc" id="L498">            return uninstallPlugin (sid);</span>
    +        }
    +<span class="nc" id="L500">        return false;</span>
    +    }
    +
    +    /* (non-Javadoc)
    +     * @see eu.sqooss.service.pa.PluginAdmin#uninstallPlugin(java.lang.Long)
    +     */
    +    public boolean uninstallPlugin(Long serviceID) {
    +<span class="nc" id="L507">        Scheduler s = AlitheiaCore.getInstance().getScheduler();</span>
    +        try {
    +<span class="nc" id="L509">            PluginUninstallJob puj = new PluginUninstallJob(serviceID);</span>
    +<span class="nc" id="L510">            s.enqueue(puj);</span>
    +<span class="nc" id="L511">        } catch (SchedulerException e) {</span>
    +<span class="nc" id="L512">            ServiceReference srefPlugin = getPluginService(serviceID);</span>
    +            // Get the metric plug-in's object
    +<span class="nc" id="L514">            AlitheiaPlugin sobjPlugin = getPluginObject(srefPlugin);</span>
    +<span class="nc" id="L515">            logger.warn(&quot;Failed to enqueue plugin uninstall job for plug-in &lt;&quot; </span>
    +<span class="nc" id="L516">                    +  sobjPlugin.getName() + &quot;&gt;. Error was: &quot; + e.getMessage());</span>
    +<span class="nc" id="L517">            return false;</span>
    +        }
    +<span class="nc" id="L519">        return true;</span>
    +    }
    +
    +    public &lt;T extends DAObject&gt; List&lt;PluginInfo&gt; listPluginProviders(Class&lt;T&gt; o) {
    +
    +<span class="nc" id="L524">        Iterator&lt;PluginInfo&gt; plugins = registeredPlugins.values().iterator();</span>
    +<span class="nc" id="L525">        ArrayList&lt;PluginInfo&gt; matching = new ArrayList&lt;PluginInfo&gt;();</span>
    +
    +<span class="nc bnc" id="L527" title="All 2 branches missed.">        while (plugins.hasNext()) {</span>
    +<span class="nc" id="L528">            PluginInfo pi = plugins.next();</span>
    +<span class="nc bnc" id="L529" title="All 2 branches missed.">            if ((pi.installed)</span>
    +<span class="nc bnc" id="L530" title="All 2 branches missed.">                    &amp;&amp; (pi.isActivationType(o))</span>
    +<span class="nc bnc" id="L531" title="All 2 branches missed.">                    &amp;&amp; (pi.getServiceRef() != null)) {</span>
    +<span class="nc" id="L532">                matching.add(pi);</span>
    +            }
    +        }
    +<span class="nc" id="L535">        return matching;</span>
    +    }
    +
    +    public PluginInfo getPluginInfo(AlitheiaPlugin m) {
    +<span class="nc" id="L539">        PluginInfo mi = null;</span>
    +<span class="nc" id="L540">        Collection&lt;PluginInfo&gt; c = listPlugins();</span>
    +<span class="nc" id="L541">        Iterator&lt;PluginInfo&gt; i = c.iterator();</span>
    +
    +<span class="nc bnc" id="L543" title="All 2 branches missed.">        while (i.hasNext()) {</span>
    +<span class="nc" id="L544">            mi = i.next();</span>
    +
    +<span class="nc bnc" id="L546" title="All 2 branches missed.">            if (mi.getPluginName().equals(m.getName())</span>
    +<span class="nc bnc" id="L547" title="All 2 branches missed.">                    &amp;&amp; mi.getPluginVersion().equals(m.getVersion())) {</span>
    +<span class="nc" id="L548">                return mi;</span>
    +            }
    +        }
    +<span class="nc" id="L551">        return null;</span>
    +    }
    +
    +    public PluginInfo getPluginInfo(String hash) {
    +<span class="nc" id="L555">        return registeredPlugins.get(hash);</span>
    +    }
    +
    +    /* (non-Javadoc)
    +     * @see eu.sqooss.service.pa.PluginAdmin#getPlugin(eu.sqooss.service.pa.PluginInfo)
    +     */
    +    public AlitheiaPlugin getPlugin(PluginInfo pluginInfo) {
    +<span class="nc bnc" id="L562" title="All 2 branches missed.">        if (pluginInfo != null) {</span>
    +<span class="nc" id="L563">            return getPluginObject(pluginInfo.getServiceRef());</span>
    +        }
    +
    +<span class="nc" id="L566">        return null;</span>
    +    }
    +
    +    public void pluginUpdated(AlitheiaPlugin p) {
    +        // Get the plug-in's info object
    +<span class="nc" id="L571">        PluginInfo pi = getPluginInfo(p);</span>
    +        // Will happen if called during bundle's startup
    +<span class="nc bnc" id="L573" title="All 2 branches missed.">        if (pi == null) {</span>
    +<span class="nc" id="L574">            logger.warn(&quot;Ignoring configuration update for not active&quot; +</span>
    +<span class="nc" id="L575">                    &quot; plugin &lt;&quot; + p.getName() + &quot;&gt; bundle.&quot;);</span>
    +<span class="nc" id="L576">            return;</span>
    +        }
    +        // Check for installed metric plug-in
    +<span class="nc bnc" id="L579" title="All 2 branches missed.">        if (pi.installed) {</span>
    +<span class="nc" id="L580">            ServiceReference srefPlugin = pi.getServiceRef();</span>
    +<span class="nc" id="L581">            Plugin pDao = pluginRefToPluginDAO(srefPlugin);</span>
    +<span class="nc" id="L582">            pi = createInstalledPI(srefPlugin, pDao);</span>
    +<span class="nc bnc" id="L583" title="All 2 branches missed.">            if (pi != null) {</span>
    +<span class="nc" id="L584">                registeredPlugins.put(pi.getHashcode(), pi);</span>
    +<span class="nc" id="L585">                logger.info(&quot;Plug-in (&quot; + pi.getPluginName()</span>
    +<span class="nc" id="L586">                        + &quot;) successfuly updated&quot;);</span>
    +                // TODO: Not sure, if this is the correct plug-in method
    +                //       to call upon configuration update, but it is the
    +                //       only one which performs something in that scope.
    +                //getPlugin(pi).update();
    +            }
    +<span class="nc" id="L592">        }</span>
    +        // The given metric plug-in is not installed
    +        else {
    +<span class="nc" id="L595">            logger.warn(&quot;Ignoring configuration update for registered&quot;</span>
    +<span class="nc" id="L596">                    + &quot; plug-in (&quot; + p.getName() + &quot;)&quot;);</span>
    +        }
    +<span class="nc" id="L598">    }</span>
    +
    +    public AlitheiaPlugin getImplementingPlugin(String mnemonic) {
    +<span class="nc" id="L601">        Iterator&lt;String&gt; i = registeredPlugins.keySet().iterator();</span>
    +
    +<span class="nc bnc" id="L603" title="All 2 branches missed.">        while (i.hasNext()) {</span>
    +<span class="nc" id="L604">            PluginInfo pi = registeredPlugins.get(i.next());</span>
    +            // Skip metric plug-ins that are registered but not installed
    +<span class="nc bnc" id="L606" title="All 2 branches missed.">            if (pi.installed) {</span>
    +<span class="nc" id="L607">                ServiceReference sr = pi.getServiceRef();</span>
    +<span class="nc" id="L608">                Plugin p = pluginRefToPluginDAO(sr);</span>
    +<span class="nc" id="L609">                Set&lt;Metric&gt; lm = p.getSupportedMetrics();</span>
    +<span class="nc bnc" id="L610" title="All 2 branches missed.">                for (Metric m : lm){</span>
    +<span class="nc bnc" id="L611" title="All 2 branches missed.">                    if (m.getMnemonic().equals(mnemonic)) {</span>
    +<span class="nc" id="L612">                        return getPlugin(pi);</span>
    +                    }
    +                }
    +            }
    +        }
    +        // No plug-ins found
    +<span class="nc" id="L618">        return null;</span>
    +    }
    +    
    +    private class PluginUninstallJob extends Job {
    +
    +        private Long serviceID;
    +        
    +<span class="nc" id="L625">        public PluginUninstallJob(Long serviceID) {</span>
    +<span class="nc" id="L626">            this.serviceID = serviceID;</span>
    +<span class="nc" id="L627">        }</span>
    +        
    +        @Override
    +        public long priority() {
    +            // TODO Auto-generated method stub
    +<span class="nc" id="L632">            return 0x3;</span>
    +        }
    +
    +        @Override
    +        protected void run() throws Exception {
    +            // TODO Auto-generated method stub
    +<span class="nc" id="L638">            logger.info (</span>
    +<span class="nc" id="L639">                    &quot;Uninstalling plugin with service ID &quot; + serviceID);</span>
    +
    +            // Pre-formated error messages
    +<span class="nc" id="L642">            final String UNINSTALL_FAILED =</span>
    +<span class="nc" id="L643">                &quot;The uninstallation of plugin with&quot;</span>
    +<span class="nc" id="L644">                + &quot; service ID &quot;+ serviceID</span>
    +<span class="nc" id="L645">                + &quot; failed : &quot;;</span>
    +
    +            try {
    +<span class="nc" id="L648">                DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L649">                dbs.startDBSession();</span>
    +                // Get the metric plug-in's service
    +<span class="nc" id="L651">                ServiceReference srefPlugin = getPluginService(serviceID);</span>
    +
    +                // Get the metric plug-in's object
    +<span class="nc" id="L654">                AlitheiaPlugin sobjPlugin = getPluginObject(srefPlugin);</span>
    +<span class="nc bnc" id="L655" title="All 2 branches missed.">                if (sobjPlugin == null) {</span>
    +<span class="nc" id="L656">                    logger.warn(UNINSTALL_FAILED + CANT_GET_SOBJ);</span>
    +                }
    +                // Execute the remove() method of this metric plug-in,
    +                // and update the plug-in's information object upon success.
    +<span class="nc bnc" id="L660" title="All 2 branches missed.">                if (sobjPlugin.remove()) {</span>
    +                    // Release the stored configuration DAOs
    +<span class="nc" id="L662">                    getPluginInfo(sobjPlugin).setPluginConfiguration(</span>
    +<span class="nc" id="L663">                            new HashSet&lt;PluginConfiguration&gt;());</span>
    +                    
    +                    // Create an info object for registered plug-in
    +<span class="nc" id="L666">                    PluginInfo pluginInfo =</span>
    +<span class="nc" id="L667">                        createRegisteredPI(srefPlugin);</span>
    +<span class="nc bnc" id="L668" title="All 2 branches missed.">                    if (pluginInfo != null) {</span>
    +                        // Remove the old &quot;installed&quot; info object
    +<span class="nc" id="L670">                        registeredPlugins.remove(</span>
    +<span class="nc" id="L671">                                sobjPlugin.getUniqueKey());</span>
    +                        // Store the info object
    +<span class="nc" id="L673">                        registeredPlugins.put(</span>
    +<span class="nc" id="L674">                                pluginInfo.getHashcode(), pluginInfo);</span>
    +                    }
    +                }
    +<span class="nc" id="L677">                dbs.commitDBSession();</span>
    +<span class="nc" id="L678">            } catch (Exception e) {</span>
    +<span class="nc" id="L679">                logger.warn(UNINSTALL_FAILED, e);</span>
    +            }
    +<span class="nc" id="L681">        }</span>
    +        
    +        @Override
    +        public String toString() {
    +<span class="nc" id="L685">            return &quot;PluginUninstallJob - ServiceID:{&quot; + serviceID + &quot;}&quot; ;</span>
    +        }
    +    }
    +
    +	@Override
    +	public boolean startUp() {
    +<span class="nc" id="L691">	    logger.info(&quot;Starting the PluginAdmin component.&quot;);</span>
    +
    +        // Get the AlitheiaCore's object
    +<span class="nc" id="L694">        sobjCore = AlitheiaCore.getInstance();</span>
    +
    +<span class="nc bnc" id="L696" title="All 2 branches missed.">        if (sobjCore != null) {</span>
    +            // Obtain the required core components
    +<span class="nc" id="L698">            sobjDB = sobjCore.getDBService();</span>
    +<span class="nc bnc" id="L699" title="All 2 branches missed.">            if (sobjDB == null) {</span>
    +<span class="nc" id="L700">                logger.error(&quot;Can not obtain the DB object!&quot;);</span>
    +            }
    +
    +            try {
    +<span class="nc" id="L704">                bc.addServiceListener(this, SREF_FILTER_PLUGIN);</span>
    +<span class="nc" id="L705">            } catch (InvalidSyntaxException e) {</span>
    +<span class="nc" id="L706">                logger.error(&quot;Invalid filter syntax &quot;, e);</span>
    +            }
    +            
    +<span class="nc" id="L709">            logger.debug(&quot;The PluginAdmin component was successfully started.&quot;);</span>
    +<span class="nc" id="L710">        }</span>
    +        else {
    +<span class="nc" id="L712">            logger.error(&quot;Can not obtain the Core object!&quot;);</span>
    +        }
    +<span class="nc" id="L714">		return true;</span>
    +	}
    +
    +	@Override
    +	public void shutDown() {
    +<span class="nc" id="L719">		return ;</span>
    +	}
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L724">	    this.bc = bc;</span>
    +<span class="nc" id="L725">        this.logger = l;</span>
    +<span class="nc" id="L726">	}</span>
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/index.html
    new file mode 100644
    index 000000000..15b3e5efa
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.pa</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.pa</span></div><h1>eu.sqooss.impl.service.pa</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">892 of 892</td><td class="ctr2">0%</td><td class="bar">90 of 90</td><td class="ctr2">0%</td><td class="ctr1">77</td><td class="ctr2">77</td><td class="ctr1">250</td><td class="ctr2">250</td><td class="ctr1">31</td><td class="ctr2">31</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="PAServiceImpl.html" class="el_class">PAServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="771" alt="771"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="84" alt="84"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">70</td><td class="ctr2" id="g0">70</td><td class="ctr1" id="h0">219</td><td class="ctr2" id="i0">219</td><td class="ctr1" id="j0">27</td><td class="ctr2" id="k0">27</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="PAServiceImpl$PluginUninstallJob.html" class="el_class">PAServiceImpl.PluginUninstallJob</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="18" height="10" title="121" alt="121"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">7</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h1">31</td><td class="ctr2" id="i1">31</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/index.source.html
    new file mode 100644
    index 000000000..2f6804304
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.pa/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.pa</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.pa</span></div><h1>eu.sqooss.impl.service.pa</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">892 of 892</td><td class="ctr2">0%</td><td class="bar">90 of 90</td><td class="ctr2">0%</td><td class="ctr1">77</td><td class="ctr2">77</td><td class="ctr1">250</td><td class="ctr2">250</td><td class="ctr1">31</td><td class="ctr2">31</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="PAServiceImpl.java.html" class="el_source">PAServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="892" alt="892"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="90" alt="90"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">77</td><td class="ctr2" id="g0">77</td><td class="ctr1" id="h0">250</td><td class="ctr2" id="i0">250</td><td class="ctr1" id="j0">31</td><td class="ctr2" id="k0">31</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/RestServiceRegistry.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/RestServiceRegistry.html
    new file mode 100644
    index 000000000..9084a5b7f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/RestServiceRegistry.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RestServiceRegistry</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.rest</a> &gt; <span class="el_class">RestServiceRegistry</span></div><h1>RestServiceRegistry</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">31 of 31</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">11</td><td class="ctr2">11</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="RestServiceRegistry.java.html#L39" class="el_method">RestServiceRegistry()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="RestServiceRegistry.java.html#L44" class="el_method">getInstance()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="RestServiceRegistry.java.html#L50" class="el_method">add(Class)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="RestServiceRegistry.java.html#L54" class="el_method">remove(Class)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="RestServiceRegistry.java.html#L58" class="el_method">getResources()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="45" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/RestServiceRegistry.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/RestServiceRegistry.java.html
    new file mode 100644
    index 000000000..00c50b427
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/RestServiceRegistry.java.html
    @@ -0,0 +1,61 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RestServiceRegistry.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.rest</a> &gt; <span class="el_source">RestServiceRegistry.java</span></div><h1>RestServiceRegistry.java</h1><pre class="source lang-java linenums">/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +package eu.sqooss.impl.service.rest;
    +
    +import java.util.HashSet;
    +import java.util.Set;
    +
    +public class RestServiceRegistry {
    +	private Set&lt;Class&lt;?&gt;&gt; resources;
    +	private static RestServiceRegistry instance;
    +	
    +<span class="nc" id="L39">	private RestServiceRegistry() {</span>
    +<span class="nc" id="L40">		resources = new HashSet&lt;Class&lt;?&gt;&gt;();</span>
    +<span class="nc" id="L41">	}</span>
    +	
    +	public static RestServiceRegistry getInstance() {
    +<span class="nc bnc" id="L44" title="All 2 branches missed.">		if (instance == null)</span>
    +<span class="nc" id="L45">			instance = new RestServiceRegistry();</span>
    +<span class="nc" id="L46">		return instance;</span>
    +	}
    +	
    +	public void add (Class&lt;?&gt; resource) {
    +<span class="nc" id="L50">		resources.add(resource);</span>
    +<span class="nc" id="L51">	}</span>
    +	
    +	public void remove (Class&lt;?&gt; resource) {
    +<span class="nc" id="L54">		resources.remove(resource);</span>
    +<span class="nc" id="L55">	}</span>
    +	
    +	public Set&lt;Class&lt;?&gt;&gt; getResources() {
    +<span class="nc" id="L58">		return resources;</span>
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServiceImpl.html
    new file mode 100644
    index 000000000..569b7a725
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ResteasyServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.rest</a> &gt; <span class="el_class">ResteasyServiceImpl</span></div><h1>ResteasyServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">102 of 102</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">37</td><td class="ctr2">37</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a2"><a href="ResteasyServiceImpl.java.html#L62" class="el_method">registerApp()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="35" alt="35"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="ResteasyServiceImpl.java.html#L82" class="el_method">getHttpService()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="78" height="10" title="23" alt="23"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ResteasyServiceImpl.java.html#L49" class="el_method">addResource(Class)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="27" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="ResteasyServiceImpl.java.html#L56" class="el_method">removeResource(Class)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="27" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="ResteasyServiceImpl.java.html#L97" class="el_method">startUp()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="27" height="10" title="8" alt="8"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="ResteasyServiceImpl.java.html#L77" class="el_method">unregisterApp()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="24" height="10" title="7" alt="7"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="ResteasyServiceImpl.java.html#L109" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="24" height="10" title="7" alt="7"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a4"><a href="ResteasyServiceImpl.java.html#L42" class="el_method">ResteasyServiceImpl()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a6"><a href="ResteasyServiceImpl.java.html#L104" class="el_method">shutDown()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServiceImpl.java.html
    new file mode 100644
    index 000000000..392037d50
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServiceImpl.java.html
    @@ -0,0 +1,113 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ResteasyServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.rest</a> &gt; <span class="el_source">ResteasyServiceImpl.java</span></div><h1>ResteasyServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +package eu.sqooss.impl.service.rest;
    +
    +import java.util.Dictionary;
    +import java.util.Hashtable;
    +
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.ServiceReference;
    +import org.osgi.service.http.HttpService;
    +
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.rest.RestService;
    +
    +<span class="nc" id="L42">public class ResteasyServiceImpl implements RestService {</span>
    +
    +	private BundleContext bc;
    +    private Logger log ;
    +   
    +	@Override
    +	public void addResource(Class&lt;?&gt; resource) {
    +<span class="nc" id="L49">		unregisterApp();</span>
    +<span class="nc" id="L50">		RestServiceRegistry.getInstance().add(resource);</span>
    +<span class="nc" id="L51">		registerApp();</span>
    +<span class="nc" id="L52">	}</span>
    +
    +	@Override
    +	public void removeResource(Class&lt;?&gt; resource) {
    +<span class="nc" id="L56">		unregisterApp();</span>
    +<span class="nc" id="L57">		RestServiceRegistry.getInstance().remove(resource);</span>
    +<span class="nc" id="L58">		registerApp();</span>
    +<span class="nc" id="L59">	}</span>
    +	
    +	private void registerApp() {
    +<span class="nc" id="L62">		HttpService http = getHttpService();</span>
    +
    +<span class="nc" id="L64">		Dictionary&lt;String, String&gt; params = new Hashtable&lt;String, String&gt;();</span>
    +<span class="nc" id="L65">		params.put(&quot;resteasy.scan&quot;, &quot;false&quot;);</span>
    +<span class="nc" id="L66">		params.put(&quot;javax.ws.rs.Application&quot;, &quot;eu.sqooss.service.rest.RestServiceApp&quot;);</span>
    +
    +<span class="nc" id="L68">		ResteasyServlet bridge = new ResteasyServlet();</span>
    +		try {
    +<span class="nc" id="L70">			http.registerServlet(&quot;/api&quot;, bridge, params, null);</span>
    +<span class="nc" id="L71">		} catch (Exception e) {</span>
    +<span class="nc" id="L72">			log.error(&quot;Error registering ResteasyServlet&quot;, e);</span>
    +		}
    +<span class="nc" id="L74">	}</span>
    +
    +	private void unregisterApp() {
    +<span class="nc" id="L77">		HttpService http = getHttpService();</span>
    +<span class="nc" id="L78">		http.unregister(&quot;/api&quot;);</span>
    +<span class="nc" id="L79">	}</span>
    +	
    +	private HttpService getHttpService() {
    +<span class="nc" id="L82">		HttpService http = null;</span>
    +<span class="nc" id="L83">		ServiceReference httpRef = bc.getServiceReference(</span>
    +<span class="nc" id="L84">				HttpService.class.getName());</span>
    +
    +<span class="nc bnc" id="L86" title="All 2 branches missed.">		if (httpRef != null) {</span>
    +<span class="nc" id="L87">			http = (HttpService) bc.getService(httpRef);</span>
    +<span class="nc" id="L88">		} else {</span>
    +<span class="nc" id="L89">			log.error(&quot;Could not find a HTTP service!&quot;);</span>
    +		}
    +		
    +<span class="nc" id="L92">		return http;</span>
    +	}
    +
    +    @Override
    +    public boolean startUp() {
    +<span class="nc" id="L97">        addResource(eu.sqooss.rest.api.StoredProjectResource.class);</span>
    +<span class="nc" id="L98">        addResource(eu.sqooss.rest.api.MetricsResource.class);</span>
    +<span class="nc" id="L99">        return true;</span>
    +    }
    +
    +    @Override
    +    public void shutDown() {
    +<span class="nc" id="L104">        unregisterApp();</span>
    +<span class="nc" id="L105">    }</span>
    +
    +    @Override
    +    public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L109">        this.bc = bc;</span>
    +<span class="nc" id="L110">        this.log = l;</span>
    +<span class="nc" id="L111">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServlet.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServlet.html
    new file mode 100644
    index 000000000..76897920b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServlet.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ResteasyServlet</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.rest</a> &gt; <span class="el_class">ResteasyServlet</span></div><h1>ResteasyServlet</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">23 of 23</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="ResteasyServlet.java.html#L52" class="el_method">service(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="ResteasyServlet.java.html#L43" class="el_method">ResteasyServlet()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServlet.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServlet.java.html
    new file mode 100644
    index 000000000..98fe2544e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/ResteasyServlet.java.html
    @@ -0,0 +1,63 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ResteasyServlet.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.rest</a> &gt; <span class="el_source">ResteasyServlet.java</span></div><h1>ResteasyServlet.java</h1><pre class="source lang-java linenums">/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +package eu.sqooss.impl.service.rest;
    +
    +import java.io.IOException;
    +
    +import javax.servlet.ServletException;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
    +import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.db.DBService;
    +
    +<span class="nc" id="L43">public class ResteasyServlet extends HttpServletDispatcher {</span>
    +
    +	private static final long serialVersionUID = 5968966644419029725L;
    +	
    +	@Override
    +	protected void service(HttpServletRequest httpServletRequest,
    +	        HttpServletResponse httpServletResponse) throws ServletException,
    +	        IOException {
    +	    
    +<span class="nc" id="L52">	    DBService db = AlitheiaCore.getInstance().getDBService();</span>
    +	    
    +<span class="nc bnc" id="L54" title="All 2 branches missed.">	    if (!db.isDBSessionActive())</span>
    +<span class="nc" id="L55">	        db.startDBSession();</span>
    +	    
    +<span class="nc" id="L57">	    super.service(httpServletRequest, httpServletResponse);</span>
    +	    
    +<span class="nc bnc" id="L59" title="All 2 branches missed.">	    if (db.isDBSessionActive())</span>
    +<span class="nc" id="L60">	        db.commitDBSession();</span>
    +<span class="nc" id="L61">	}</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/index.html
    new file mode 100644
    index 000000000..d6c5fd62b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.rest</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.rest</span></div><h1>eu.sqooss.impl.service.rest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">156 of 156</td><td class="ctr2">0%</td><td class="bar">8 of 8</td><td class="ctr2">0%</td><td class="ctr1">20</td><td class="ctr2">20</td><td class="ctr1">56</td><td class="ctr2">56</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="ResteasyServiceImpl.html" class="el_class">ResteasyServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="102" alt="102"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">10</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h0">37</td><td class="ctr2" id="i0">37</td><td class="ctr1" id="j0">9</td><td class="ctr2" id="k0">9</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="RestServiceRegistry.html" class="el_class">RestServiceRegistry</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="36" height="10" title="31" alt="31"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">11</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j1">5</td><td class="ctr2" id="k1">5</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="ResteasyServlet.html" class="el_class">ResteasyServlet</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="27" height="10" title="23" alt="23"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">8</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k2">2</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/index.source.html
    new file mode 100644
    index 000000000..3ca6863b0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.rest/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.rest</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.rest</span></div><h1>eu.sqooss.impl.service.rest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">156 of 156</td><td class="ctr2">0%</td><td class="bar">8 of 8</td><td class="ctr2">0%</td><td class="ctr1">20</td><td class="ctr2">20</td><td class="ctr1">56</td><td class="ctr2">56</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="ResteasyServiceImpl.java.html" class="el_source">ResteasyServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="102" alt="102"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">10</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h0">37</td><td class="ctr2" id="i0">37</td><td class="ctr1" id="j0">9</td><td class="ctr2" id="k0">9</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="RestServiceRegistry.java.html" class="el_source">RestServiceRegistry.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="36" height="10" title="31" alt="31"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">11</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j1">5</td><td class="ctr2" id="k1">5</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="ResteasyServlet.java.html" class="el_source">ResteasyServlet.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="27" height="10" title="23" alt="23"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">8</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k2">2</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/JobPriorityComparator.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/JobPriorityComparator.html
    new file mode 100644
    index 000000000..42b1ee8d6
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/JobPriorityComparator.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>JobPriorityComparator</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.scheduler</a> &gt; <span class="el_class">JobPriorityComparator</span></div><h1>JobPriorityComparator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3 of 13</td><td class="ctr2">77%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="JobPriorityComparator.java.html#L66" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="51" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="JobPriorityComparator.java.html#L57" class="el_method">compare(Job, Job)</a></td><td class="bar" id="b1"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="7" alt="7"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="JobPriorityComparator.java.html#L45" class="el_method">JobPriorityComparator()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="51" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/JobPriorityComparator.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/JobPriorityComparator.java.html
    new file mode 100644
    index 000000000..890a950dd
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/JobPriorityComparator.java.html
    @@ -0,0 +1,69 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>JobPriorityComparator.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.scheduler</a> &gt; <span class="el_source">JobPriorityComparator.java</span></div><h1>JobPriorityComparator.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.scheduler;
    +
    +import java.util.Comparator;
    +
    +import eu.sqooss.service.scheduler.Job;
    +
    +/**
    + * Comparator for jobs comparing by priority.
    + *
    + * @author Christoph Schleifenbaum
    + */
    +<span class="fc" id="L45">public class JobPriorityComparator implements Comparator&lt;Job&gt;</span>
    +{
    +    
    +    /**
    +     * Compares its two arguments for order.
    +     * @param lhs the first object to be compared.
    +     * @param rhs the second object to be compared.
    +     * @return a negative integer, zero, or a positive integer as the first 
    +     * argument is less than, equal to, or greater than the second.
    +     */
    +    public int compare(Job lhs, Job rhs)
    +    {
    +<span class="fc" id="L57">        return (int)(lhs.priority() - rhs.priority());</span>
    +    }
    +
    +    /**
    +     * Indicates whether some other object is &quot;equal to&quot; this Comparator.
    +     * @param obj the reference object with which to compare.
    +     */
    +    public boolean equals(Object obj)
    +    {
    +<span class="nc" id="L66">        return obj instanceof JobPriorityComparator;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/SchedulerServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/SchedulerServiceImpl.html
    new file mode 100644
    index 000000000..4c53a9fca
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/SchedulerServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.scheduler</a> &gt; <span class="el_class">SchedulerServiceImpl</span></div><h1>SchedulerServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">471 of 686</td><td class="ctr2">31%</td><td class="bar">49 of 64</td><td class="ctr2">23%</td><td class="ctr1">42</td><td class="ctr2">53</td><td class="ctr1">89</td><td class="ctr2">142</td><td class="ctr1">12</td><td class="ctr2">21</td></tr></tfoot><tbody><tr><td id="a1"><a href="SchedulerServiceImpl.java.html#L117" class="el_method">dequeue(Job)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="98" height="10" title="69" alt="69"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="8" alt="8"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="SchedulerServiceImpl.java.html#L103" class="el_method">enqueueBlock(List)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="91" height="10" title="64" alt="64"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="4" alt="4"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f3">3</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h3">10</td><td class="ctr2" id="i4">10</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a10"><a href="SchedulerServiceImpl.java.html#L156" class="el_method">jobStateChanged(Job, Job.State)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="90" height="10" title="63" alt="63"/><img src="../../../.resources/greenbar.gif" width="30" height="10" title="21" alt="21"/></td><td class="ctr2" id="c8">25%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="90" height="10" title="9" alt="9"/><img src="../../../.resources/greenbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="e5">25%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h2">11</td><td class="ctr2" id="i0">18</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="SchedulerServiceImpl.java.html#L90" class="el_method">enqueueNoDependencies(Set)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="71" height="10" title="50" alt="50"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h4">9</td><td class="ctr2" id="i6">9</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a16"><a href="SchedulerServiceImpl.java.html#L264" class="el_method">startUp()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="71" height="10" title="50" alt="50"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="8" alt="8"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h1">12</td><td class="ctr2" id="i2">12</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a19"><a href="SchedulerServiceImpl.java.html#L145" class="el_method">takeJob(Job)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="50" height="10" title="35" alt="35"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h6">6</td><td class="ctr2" id="i11">6</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="SchedulerServiceImpl.java.html#L289" class="el_method">createAuxQueue(Job, Deque, ResumePoint)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="44" height="10" title="31" alt="31"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="40" height="10" title="4" alt="4"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h5">8</td><td class="ctr2" id="i8">8</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a20"><a href="SchedulerServiceImpl.java.html#L305" class="el_method">yield(Job, ResumePoint)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="25" height="10" title="18" alt="18"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e12">0%</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h7">5</td><td class="ctr2" id="i12">5</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a9"><a href="SchedulerServiceImpl.java.html#L181" class="el_method">jobDependenciesChanged(Job)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="24" height="10" title="17" alt="17"/><img src="../../../.resources/greenbar.gif" width="37" height="10" title="26" alt="26"/></td><td class="ctr2" id="c7">60%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="40" height="10" title="4" alt="4"/><img src="../../../.resources/greenbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">33%</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">8</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a14"><a href="SchedulerServiceImpl.java.html#L193" class="el_method">startExecute(int)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="21" height="10" title="15" alt="15"/><img src="../../../.resources/greenbar.gif" width="60" height="10" title="42" alt="42"/></td><td class="ctr2" id="c4">74%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/><img src="../../../.resources/greenbar.gif" width="40" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">67%</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i3">11</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="SchedulerServiceImpl.java.html#L78" class="el_method">enqueue(Job)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="20" height="10" title="14" alt="14"/><img src="../../../.resources/greenbar.gif" width="44" height="10" title="31" alt="31"/></td><td class="ctr2" id="c5">69%</td><td class="bar" id="d12"><img src="../../../.resources/redbar.gif" width="10" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="10" height="10" title="1" alt="1"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i7">9</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a5"><a href="SchedulerServiceImpl.java.html#L239" class="el_method">getFailedQueue()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="15" height="10" title="11" alt="11"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h10">2</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a8"><a href="SchedulerServiceImpl.java.html#L225" class="el_method">isExecuting()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="12" height="10" title="9" alt="9"/><img src="../../../.resources/greenbar.gif" width="21" height="10" title="15" alt="15"/></td><td class="ctr2" id="c6">62%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/><img src="../../../.resources/greenbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">50%</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i13">4</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a15"><a href="SchedulerServiceImpl.java.html#L248" class="el_method">startOneShotWorkerThread()</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="12" height="10" title="9" alt="9"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h8">3</td><td class="ctr2" id="i14">3</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a17"><a href="SchedulerServiceImpl.java.html#L210" class="el_method">stopExecute()</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="8" height="10" title="6" alt="6"/><img src="../../../.resources/greenbar.gif" width="44" height="10" title="31" alt="31"/></td><td class="ctr2" id="c3">84%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="10" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">75%</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i10">8</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a7"><a href="SchedulerServiceImpl.java.html#L244" class="el_method">getWorkerThreads()</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="7" height="10" title="5" alt="5"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a12"><a href="SchedulerServiceImpl.java.html#L254" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h11">2</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a13"><a href="SchedulerServiceImpl.java.html#L259" class="el_method">shutDown()</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="1" height="10" title="1" alt="1"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a11"><a href="SchedulerServiceImpl.java.html#L60" class="el_method">SchedulerServiceImpl()</a></td><td class="bar" id="b18"><img src="../../../.resources/greenbar.gif" width="58" height="10" title="41" alt="41"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">0</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">0</td><td class="ctr2" id="i5">10</td><td class="ctr1" id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a18"><a href="SchedulerServiceImpl.java.html#L141" class="el_method">takeJob()</a></td><td class="bar" id="b19"><img src="../../../.resources/greenbar.gif" width="7" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">0</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">0</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">0</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a6"><a href="SchedulerServiceImpl.java.html#L235" class="el_method">getSchedulerStats()</a></td><td class="bar" id="b20"><img src="../../../.resources/greenbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">0</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">0</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">0</td><td class="ctr2" id="k20">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/SchedulerServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/SchedulerServiceImpl.java.html
    new file mode 100644
    index 000000000..5b0d44177
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/SchedulerServiceImpl.java.html
    @@ -0,0 +1,313 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.scheduler</a> &gt; <span class="el_source">SchedulerServiceImpl.java</span></div><h1>SchedulerServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.scheduler;
    +
    +import java.util.Deque;
    +import java.util.LinkedList;
    +import java.util.List;
    +import java.util.PriorityQueue;
    +import java.util.Set;
    +import java.util.concurrent.ArrayBlockingQueue;
    +import java.util.concurrent.BlockingQueue;
    +import java.util.concurrent.PriorityBlockingQueue;
    +
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.scheduler.ResumePoint;
    +import eu.sqooss.service.scheduler.Scheduler;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +import eu.sqooss.service.scheduler.SchedulerStats;
    +import eu.sqooss.service.scheduler.WorkerThread;
    +
    +public class SchedulerServiceImpl implements Scheduler {
    +
    +    private static final String START_THREADS_PROPERTY = &quot;eu.sqooss.scheduler.numthreads&quot;;
    +    private static final String PERF_LOG_PROPERTY = &quot;eu.sqooss.log.perf&quot;;
    +    
    +<span class="fc" id="L60">    private Logger logger = null;</span>
    +<span class="fc" id="L61">    private boolean perfLog = false;</span>
    +
    +<span class="fc" id="L63">    private SchedulerStats stats = new SchedulerStats();</span>
    +
    +    // thread safe job queue
    +<span class="fc" id="L66">    private PriorityQueue&lt;Job&gt; blockedQueue = new PriorityQueue&lt;Job&gt;(1,</span>
    +<span class="fc" id="L67">            new JobPriorityComparator());</span>
    +<span class="fc" id="L68">    private BlockingQueue&lt;Job&gt; workQueue = new PriorityBlockingQueue&lt;Job&gt;(1,</span>
    +<span class="fc" id="L69">            new JobPriorityComparator());</span>
    +
    +<span class="fc" id="L71">    private BlockingQueue&lt;Job&gt; failedQueue = new ArrayBlockingQueue&lt;Job&gt;(1000);</span>
    +
    +<span class="fc" id="L73">    private List&lt;WorkerThread&gt; myWorkerThreads = null;</span>
    +    
    +<span class="fc" id="L75">    public SchedulerServiceImpl() { }</span>
    +
    +    public void enqueue(Job job) throws SchedulerException {
    +<span class="pc" id="L78">        synchronized (this) {</span>
    +<span class="pc bpc" id="L79" title="1 of 2 branches missed.">            if (logger != null)</span>
    +<span class="nc" id="L80">                logger.debug(&quot;SchedulerServiceImpl: queuing job &quot; + job.toString());</span>
    +<span class="fc" id="L81">            job.callAboutToBeEnqueued(this);</span>
    +<span class="fc" id="L82">            blockedQueue.add(job);</span>
    +<span class="fc" id="L83">            stats.addWaitingJob(job.getClass().toString());</span>
    +<span class="fc" id="L84">            stats.incTotalJobs();</span>
    +        }
    +<span class="fc" id="L86">        jobDependenciesChanged(job);</span>
    +<span class="fc" id="L87">    }</span>
    +    
    +    public void enqueueNoDependencies(Set&lt;Job&gt; jobs) throws SchedulerException {
    +<span class="nc" id="L90">        synchronized (this) {</span>
    +<span class="nc bnc" id="L91" title="All 2 branches missed.">            for (Job job : jobs) {</span>
    +<span class="nc" id="L92">                logger.debug(&quot;Scheduler ServiceImpl: queuing job &quot;</span>
    +<span class="nc" id="L93">                        + job.toString());</span>
    +<span class="nc" id="L94">                job.callAboutToBeEnqueued(this);</span>
    +<span class="nc" id="L95">                workQueue.add(job);</span>
    +<span class="nc" id="L96">                stats.addWaitingJob(job.getClass().toString());</span>
    +<span class="nc" id="L97">                stats.incTotalJobs();</span>
    +            }
    +        }
    +<span class="nc" id="L100">    }</span>
    +    
    +    public void enqueueBlock(List&lt;Job&gt; jobs) throws SchedulerException {
    +<span class="nc" id="L103">        synchronized (this) {</span>
    +<span class="nc bnc" id="L104" title="All 2 branches missed.">            for (Job job : jobs) {</span>
    +<span class="nc" id="L105">                logger.debug(&quot;SchedulerServiceImpl: queuing job &quot; + job.toString());</span>
    +<span class="nc" id="L106">                job.callAboutToBeEnqueued(this);</span>
    +<span class="nc" id="L107">                blockedQueue.add(job);</span>
    +<span class="nc" id="L108">                stats.addWaitingJob(job.getClass().toString());</span>
    +<span class="nc" id="L109">                stats.incTotalJobs();</span>
    +            }
    +        }
    +<span class="nc bnc" id="L112" title="All 2 branches missed.">        for (Job job : jobs)</span>
    +<span class="nc" id="L113">            jobDependenciesChanged(job);</span>
    +<span class="nc" id="L114">    }</span>
    +
    +    public void dequeue(Job job) {
    +<span class="nc" id="L117">        synchronized (this) {</span>
    +<span class="nc bnc" id="L118" title="All 4 branches missed.">            if (!blockedQueue.contains(job) &amp;&amp; !workQueue.contains(job)) {</span>
    +<span class="nc bnc" id="L119" title="All 2 branches missed.">                if (logger != null) {</span>
    +<span class="nc" id="L120">                    logger.info(&quot;SchedulerServiceImpl: job &quot; + job.toString()</span>
    +<span class="nc" id="L121">                            + &quot; not found in the queue.&quot;);</span>
    +                }
    +<span class="nc" id="L123">                return;</span>
    +            }
    +<span class="nc" id="L125">            job.callAboutToBeDequeued(this);</span>
    +<span class="nc" id="L126">            blockedQueue.remove(job);</span>
    +<span class="nc" id="L127">            workQueue.remove(job);</span>
    +        }
    +<span class="nc bnc" id="L129" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L130">            logger.warn(&quot;SchedulerServiceImpl: job &quot; + job.toString()</span>
    +<span class="nc" id="L131">                    + &quot; not found in the queue.&quot;);</span>
    +        }
    +<span class="nc" id="L133">    }</span>
    +
    +    public Job takeJob() throws java.lang.InterruptedException {
    +        /*
    +         * no synchronize needed here, the queue is doing that adding
    +         * synchronize here would actually dead-lock this, since no new items
    +         * can be added as long someone is waiting for items
    +         */
    +<span class="fc" id="L141">        return workQueue.take();</span>
    +    }
    +
    +    public Job takeJob(Job job) throws SchedulerException {
    +<span class="nc" id="L145">        synchronized (workQueue) {</span>
    +<span class="nc bnc" id="L146" title="All 2 branches missed.">            if (!workQueue.contains(job)) {</span>
    +<span class="nc" id="L147">                throw new SchedulerException(&quot;Can't take job &quot; + job</span>
    +<span class="nc" id="L148">                        + &quot;: It is not in the scheduler's queue right now.&quot;);</span>
    +            }
    +<span class="nc" id="L150">            workQueue.remove(job);</span>
    +<span class="nc" id="L151">            return job;</span>
    +        }
    +    }
    +    
    +    public void jobStateChanged(Job job, Job.State state) {
    +<span class="pc bpc" id="L156" title="1 of 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L157">            logger.debug(&quot;Job &quot; + job + &quot; changed to state &quot; + state);</span>
    +        }
    +
    +<span class="pc bpc" id="L160" title="1 of 2 branches missed.">        if (state == Job.State.Finished) {</span>
    +<span class="nc" id="L161">            stats.removeRunJob(job);</span>
    +<span class="nc" id="L162">            stats.incFinishedJobs();</span>
    +<span class="pc bpc" id="L163" title="1 of 2 branches missed.">        } else if (state == Job.State.Running) {</span>
    +<span class="fc" id="L164">            stats.removeWaitingJob(job.getClass().toString());</span>
    +<span class="fc" id="L165">            stats.addRunJob(job);</span>
    +<span class="pc bnc" id="L166" title="All 2 branches missed.">        } else if (state == Job.State.Yielded) {</span>
    +<span class="nc" id="L167">            stats.removeRunJob(job);</span>
    +<span class="nc" id="L168">            stats.addWaitingJob(job.getClass().toString());</span>
    +<span class="nc bnc" id="L169" title="All 2 branches missed.">        } else if (state == Job.State.Error) {</span>
    +
    +<span class="nc bnc" id="L171" title="All 2 branches missed.">            if (failedQueue.remainingCapacity() == 1)</span>
    +<span class="nc" id="L172">                failedQueue.remove();</span>
    +<span class="nc" id="L173">            failedQueue.add(job);</span>
    +            
    +<span class="nc" id="L175">            stats.removeRunJob(job);</span>
    +<span class="nc" id="L176">            stats.addFailedJob(job.getClass().toString());</span>
    +        }
    +<span class="fc" id="L178">    }</span>
    +
    +    public void jobDependenciesChanged(Job job) {
    +<span class="pc" id="L181">        synchronized (this) {</span>
    +<span class="pc bpc" id="L182" title="3 of 4 branches missed.">            if (workQueue.contains(job) &amp;&amp; !job.canExecute()) {</span>
    +<span class="nc" id="L183">                workQueue.remove(job);</span>
    +<span class="nc" id="L184">                blockedQueue.add(job);</span>
    +<span class="pc bpc" id="L185" title="1 of 2 branches missed.">            } else if (job.canExecute()) {</span>
    +<span class="fc" id="L186">                blockedQueue.remove(job);</span>
    +<span class="fc" id="L187">                workQueue.add(job);</span>
    +            }
    +        }
    +<span class="fc" id="L190">    }</span>
    +
    +    public void startExecute(int n) {
    +<span class="pc bpc" id="L193" title="1 of 2 branches missed.">        if (logger != null)</span>
    +<span class="nc" id="L194">            logger.info(&quot;Starting &quot; + n + &quot; worker threads&quot;);</span>
    +<span class="pc" id="L195">        synchronized (this) {</span>
    +<span class="pc bpc" id="L196" title="1 of 2 branches missed.">            if (myWorkerThreads == null) {</span>
    +<span class="fc" id="L197">                myWorkerThreads = new LinkedList&lt;WorkerThread&gt;();</span>
    +            }
    +
    +<span class="fc bfc" id="L200" title="All 2 branches covered.">            for (int i = 0; i &lt; n; ++i) {</span>
    +<span class="fc" id="L201">                WorkerThread t = new WorkerThreadImpl(this, i);</span>
    +<span class="fc" id="L202">                t.start();</span>
    +<span class="fc" id="L203">                myWorkerThreads.add(t);</span>
    +<span class="fc" id="L204">                stats.incWorkerThreads();</span>
    +            }
    +        }
    +<span class="fc" id="L207">    }</span>
    +
    +    public void stopExecute() {
    +<span class="pc" id="L210">        synchronized (this) {</span>
    +<span class="pc bpc" id="L211" title="1 of 2 branches missed.">            if (myWorkerThreads == null) {</span>
    +<span class="nc" id="L212">                return;</span>
    +            }
    +
    +<span class="fc bfc" id="L215" title="All 2 branches covered.">            for (WorkerThread t : myWorkerThreads) {</span>
    +<span class="fc" id="L216">                t.stopProcessing();</span>
    +<span class="fc" id="L217">                stats.decWorkerThreads();</span>
    +            }
    +
    +<span class="fc" id="L220">            myWorkerThreads.clear();</span>
    +        }
    +<span class="fc" id="L222">    }</span>
    +
    +    synchronized public boolean isExecuting() {
    +<span class="pc" id="L225">        synchronized (this) {</span>
    +<span class="pc bpc" id="L226" title="1 of 2 branches missed.">            if (myWorkerThreads == null) {</span>
    +<span class="nc" id="L227">                return false;</span>
    +            } else {
    +<span class="pc bpc" id="L229" title="1 of 2 branches missed.">                return !myWorkerThreads.isEmpty();</span>
    +            }
    +        }
    +    }
    +
    +    public SchedulerStats getSchedulerStats() {
    +<span class="fc" id="L235">        return stats;</span>
    +    }
    +
    +    public Job[] getFailedQueue() {
    +<span class="nc" id="L239">        Job[] failedJobs = new Job[failedQueue.size()];</span>
    +<span class="nc" id="L240">        return failedQueue.toArray(failedJobs);</span>
    +    }
    +
    +    public WorkerThread[] getWorkerThreads() {
    +<span class="nc" id="L244">        return (WorkerThread[]) this.myWorkerThreads.toArray();</span>
    +    }
    +
    +    public void startOneShotWorkerThread() {
    +<span class="nc" id="L248">        WorkerThread t = new WorkerThreadImpl(this, true);</span>
    +<span class="nc" id="L249">        t.start();</span>
    +<span class="nc" id="L250">    }</span>
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L254">		this.logger = l;</span>
    +<span class="nc" id="L255">	}</span>
    +
    +	@Override
    +	public void shutDown() {
    +<span class="nc" id="L259">	}</span>
    +
    +	@Override
    +	public boolean startUp() {
    +        
    +<span class="nc" id="L264">        int numThreads = 2 * Runtime.getRuntime().availableProcessors(); </span>
    +<span class="nc" id="L265">        String threadsProperty = System.getProperty(START_THREADS_PROPERTY);</span>
    +        
    +<span class="nc bnc" id="L267" title="All 4 branches missed.">        if (threadsProperty != null &amp;&amp; !threadsProperty.equals(&quot;-1&quot;)) {</span>
    +            try {
    +<span class="nc" id="L269">                numThreads = Integer.parseInt(threadsProperty);</span>
    +<span class="nc" id="L270">            } catch (NumberFormatException nfe) {</span>
    +<span class="nc" id="L271">                logger.warn(&quot;Invalid number of threads to start:&quot; + threadsProperty);</span>
    +            }
    +        }
    +<span class="nc" id="L274">        startExecute(numThreads);</span>
    +        
    +<span class="nc" id="L276">        String perfLog = System.getProperty(PERF_LOG_PROPERTY);</span>
    +<span class="nc bnc" id="L277" title="All 4 branches missed.">        if (perfLog != null &amp;&amp; perfLog.equals(&quot;true&quot;)) {</span>
    +<span class="nc" id="L278">            logger.info(&quot;Using performance logging&quot;);</span>
    +<span class="nc" id="L279">            this.perfLog = true;</span>
    +        }
    +
    +<span class="nc" id="L282">        return true;</span>
    +	}
    +
    +    @Override
    +    public boolean createAuxQueue(Job j, Deque&lt;Job&gt; jobs, ResumePoint p)
    +            throws SchedulerException {
    +        
    +<span class="nc bnc" id="L289" title="All 2 branches missed.">        if (jobs.isEmpty()) {</span>
    +<span class="nc" id="L290">            logger.warn(&quot;Empty job queue passed to createAuxQueue(). Ignoring request&quot;);</span>
    +<span class="nc" id="L291">            return false;</span>
    +        }
    +        
    +<span class="nc" id="L294">        j.yield(p);</span>
    +<span class="nc bnc" id="L295" title="All 2 branches missed.">        for (Job job : jobs) {</span>
    +<span class="nc" id="L296">            j.addDependency(job);</span>
    +<span class="nc" id="L297">            enqueue(job);</span>
    +        }
    +<span class="nc" id="L299">        return true;</span>
    +    }
    +
    +    @Override
    +    public synchronized void yield(Job j, ResumePoint p) throws SchedulerException {
    +        
    +<span class="nc bnc" id="L305" title="All 2 branches missed.">        if (j.state() != Job.State.Yielded)</span>
    +<span class="nc" id="L306">            j.yield(p);</span>
    +<span class="nc" id="L307">        workQueue.remove(j);</span>
    +<span class="nc" id="L308">        blockedQueue.add(j);</span>
    +<span class="nc" id="L309">    }</span>
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl$TemporaryWorkerThread.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl$TemporaryWorkerThread.html
    new file mode 100644
    index 000000000..952334b3d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl$TemporaryWorkerThread.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>WorkerThreadImpl.TemporaryWorkerThread</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.scheduler</a> &gt; <span class="el_class">WorkerThreadImpl.TemporaryWorkerThread</span></div><h1>WorkerThreadImpl.TemporaryWorkerThread</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">31 of 31</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="WorkerThreadImpl.java.html#L153" class="el_method">WorkerThreadImpl.TemporaryWorkerThread(WorkerThreadImpl, Job)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="13" alt="13"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="WorkerThreadImpl.java.html#L157" class="el_method">WorkerThreadImpl.TemporaryWorkerThread(WorkerThreadImpl, WorkerThreadImpl, Job)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="110" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="WorkerThreadImpl.java.html#L163" class="el_method">run()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="55" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl.html
    new file mode 100644
    index 000000000..4e556e4c8
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>WorkerThreadImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.scheduler</a> &gt; <span class="el_class">WorkerThreadImpl</span></div><h1>WorkerThreadImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">179 of 241</td><td class="ctr2">26%</td><td class="bar">13 of 18</td><td class="ctr2">28%</td><td class="ctr1">11</td><td class="ctr2">16</td><td class="ctr1">25</td><td class="ctr2">49</td><td class="ctr1">3</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a1"><a href="WorkerThreadImpl.java.html#L117" class="el_method">executeJob(Job)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="108" height="10" title="131" alt="131"/><img src="../../../.resources/greenbar.gif" width="11" height="10" title="14" alt="14"/></td><td class="ctr2" id="c3">10%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="108" height="10" title="9" alt="9"/><img src="../../../.resources/greenbar.gif" width="12" height="10" title="1" alt="1"/></td><td class="ctr2" id="e2">10%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="WorkerThreadImpl.java.html#L52" class="el_method">WorkerThreadImpl(Scheduler, boolean)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="14" height="10" title="18" alt="18"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="WorkerThreadImpl.java.html#L169" class="el_method">takeJob(Job)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="14" height="10" title="17" alt="17"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h2">6</td><td class="ctr2" id="i4">6</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="WorkerThreadImpl.java.html#L52" class="el_method">WorkerThreadImpl(Scheduler, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="5" height="10" title="7" alt="7"/><img src="../../../.resources/greenbar.gif" width="19" height="10" title="23" alt="23"/></td><td class="ctr2" id="c2">77%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="36" height="10" title="3" alt="3"/><img src="../../../.resources/greenbar.gif" width="12" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">25%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="WorkerThreadImpl.java.html#L89" class="el_method">run()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="2" height="10" title="3" alt="3"/><img src="../../../.resources/greenbar.gif" width="15" height="10" title="19" alt="19"/></td><td class="ctr2" id="c1">86%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="12" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="36" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">75%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="WorkerThreadImpl.java.html#L113" class="el_method">executedJob()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="WorkerThreadImpl.java.html#L108" class="el_method">stopProcessing()</a></td><td class="bar" id="b6"><img src="../../../.resources/greenbar.gif" width="4" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl.java.html
    new file mode 100644
    index 000000000..f50e1c533
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/WorkerThreadImpl.java.html
    @@ -0,0 +1,176 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>WorkerThreadImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.scheduler</a> &gt; <span class="el_source">WorkerThreadImpl.java</span></div><h1>WorkerThreadImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.scheduler;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.scheduler.ResumePoint;
    +import eu.sqooss.service.scheduler.Scheduler;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +import eu.sqooss.service.scheduler.WorkerThread;
    +
    +/**
    + * Worker thread executing jobs given by a scheduler.
    + *
    + * @author Christoph Schleifenbaum
    + */
    +class WorkerThreadImpl extends Thread implements WorkerThread {
    +    private static final String PERF_LOG_PROPERTY = &quot;eu.sqooss.log.perf&quot;;
    +    
    +<span class="pc" id="L52">    private boolean perfLog = false;</span>
    +
    +    private Scheduler m_scheduler;
    +
    +    private volatile boolean m_processing;
    +
    +<span class="pc" id="L58">    private volatile Job m_job = null;</span>
    +    
    +<span class="pc" id="L60">    private boolean m_oneshot = false;</span>
    +    
    +    /**
    +     * Constructor creating a new WorkerThread
    +     * @param s the schedule being asked for jobs.
    +     */
    +    public WorkerThreadImpl(Scheduler s, int n) {
    +
    +<span class="fc" id="L68">    	super(null, null, &quot;Worker &quot;);</span>
    +<span class="fc" id="L69">        m_scheduler = s;</span>
    +<span class="fc" id="L70">        String perfLog = System.getProperty(PERF_LOG_PROPERTY);</span>
    +<span class="pc bpc" id="L71" title="3 of 4 branches missed.">        if (perfLog != null &amp;&amp; perfLog.equals(&quot;true&quot;)) {</span>
    +<span class="nc" id="L72">            this.perfLog = true;</span>
    +        }
    +<span class="fc" id="L74">    }</span>
    +
    +    /**
    +     * Constructor creating a new WorkerThread
    +     * @param s the schedule being asked for jobs.
    +     */
    +    public WorkerThreadImpl(Scheduler s, boolean oneshot) {
    +<span class="nc" id="L81">    	super(null, null, &quot;OneShot Worker Thread&quot;);</span>
    +<span class="nc" id="L82">        m_scheduler = s;</span>
    +<span class="nc" id="L83">    }</span>
    +
    +    /**
    +     * Runs the worker thread.
    +     */
    +    public void run() {
    +<span class="fc" id="L89">        m_processing = true;</span>
    +<span class="fc bfc" id="L90" title="All 2 branches covered.">        while (m_processing) {</span>
    +            try {
    +                // get a job from the scheduler
    +<span class="fc" id="L93">                executeJob(m_scheduler.takeJob());</span>
    +<span class="fc" id="L94">            } catch (InterruptedException e) {</span>
    +                // we were interrupted, just try again
    +<span class="fc" id="L96">                continue;</span>
    +            }
    +<span class="pc bpc" id="L98" title="1 of 2 branches missed.">            if (m_oneshot) {</span>
    +<span class="nc" id="L99">            	m_processing = false;</span>
    +            }
    +        }
    +<span class="fc" id="L102">    }</span>
    +
    +    /**
    +     * Stops processing of jobs, after the current job has finished.
    +     */
    +    public void stopProcessing() {
    +<span class="fc" id="L108">        m_processing = false;</span>
    +<span class="fc" id="L109">        interrupt();</span>
    +<span class="fc" id="L110">    }</span>
    +
    +	public Job executedJob() {
    +<span class="nc" id="L113">		return m_job;</span>
    +	}
    +
    +	protected void executeJob(Job j) {
    +<span class="fc" id="L117">		Job oldJob = m_job;</span>
    +<span class="fc" id="L118">		long time = -1;</span>
    +		try {
    +<span class="nc" id="L120">			m_job = j;</span>
    +<span class="nc bnc" id="L121" title="All 2 branches missed.">			if (m_job.state() == Job.State.Yielded) {</span>
    +<span class="nc" id="L122">			    time = m_job.resume();</span>
    +<span class="nc" id="L123">			} else { </span>
    +<span class="nc" id="L124">			    time = m_job.execute();</span>
    +			}
    +<span class="nc" id="L126">		} catch (ClassCastException cce) { </span>
    +<span class="nc" id="L127">		    AlitheiaCore.getInstance().getLogManager().createLogger(</span>
    +<span class="nc" id="L128">		            Logger.NAME_SQOOSS_SCHEDULING).error(&quot;Job &quot; + j + &quot; is not resumable&quot;);</span>
    +<span class="fc" id="L129">		} catch (Exception e) {</span>
    +			// no error handling needed here, the job
    +			// itself takes care of that.
    +<span class="nc" id="L132">		} finally {</span>
    +<span class="pc bpc" id="L133" title="7 of 8 branches missed.">		    if (perfLog) {</span>
    +<span class="nc" id="L134">		        AlitheiaCore.getInstance().getLogManager().</span>
    +<span class="nc" id="L135">		            createLogger(&quot;sqooss.jobtimer&quot;).</span>
    +<span class="nc" id="L136">		            debug(m_job.toString() + &quot;, time: &quot; + time + &quot; ms&quot;);</span>
    +		    }
    +<span class="pc" id="L138">			m_job = oldJob;</span>
    +<span class="nc" id="L139">		}</span>
    +<span class="fc" id="L140">	}</span>
    +	
    +	/**
    +	 * Temporary Worker Thread is used to trigger instant
    +	 * execution of a job.
    +	 * @author christoph
    +	 *
    +	 */
    +	public class TemporaryWorkerThread implements Runnable {
    +
    +		private WorkerThreadImpl worker;
    +		private Job job;
    +		
    +<span class="nc" id="L153">		public TemporaryWorkerThread(Job job) {</span>
    +<span class="nc" id="L154">			this.worker = new WorkerThreadImpl(null, -1);</span>
    +<span class="nc" id="L155">		}</span>
    +		
    +<span class="nc" id="L157">		TemporaryWorkerThread(WorkerThreadImpl worker,Job job) {</span>
    +<span class="nc" id="L158">			this.worker = worker;</span>
    +<span class="nc" id="L159">			this.job = job;</span>
    +<span class="nc" id="L160">		}</span>
    +		
    +		public void run() {
    +<span class="nc" id="L163">			worker.executeJob(job);</span>
    +<span class="nc" id="L164">		}</span>
    +		
    +	}
    +	
    +	public void takeJob(Job job) throws SchedulerException {
    +<span class="nc" id="L169">		Thread thread = new Thread(</span>
    +<span class="nc" id="L170">				new TemporaryWorkerThread(</span>
    +<span class="nc" id="L171">						this,</span>
    +<span class="nc" id="L172">						m_scheduler.takeJob(job)), &quot;Temporary Scheduler Worker Thread&quot;);</span>
    +<span class="nc" id="L173">		thread.start();</span>
    +<span class="nc" id="L174">	}</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/index.html
    new file mode 100644
    index 000000000..5f94c9b86
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.scheduler</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.scheduler</span></div><h1>eu.sqooss.impl.service.scheduler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">684 of 971</td><td class="ctr2">30%</td><td class="bar">62 of 82</td><td class="ctr2">24%</td><td class="ctr1">57</td><td class="ctr2">75</td><td class="ctr1">124</td><td class="ctr2">203</td><td class="ctr1">19</td><td class="ctr2">34</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="SchedulerServiceImpl.html" class="el_class">SchedulerServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="82" height="10" title="471" alt="471"/><img src="../../../.resources/greenbar.gif" width="37" height="10" title="215" alt="215"/></td><td class="ctr2" id="c1">31%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="91" height="10" title="49" alt="49"/><img src="../../../.resources/greenbar.gif" width="28" height="10" title="15" alt="15"/></td><td class="ctr2" id="e1">23%</td><td class="ctr1" id="f0">42</td><td class="ctr2" id="g0">53</td><td class="ctr1" id="h0">89</td><td class="ctr2" id="i0">142</td><td class="ctr1" id="j0">12</td><td class="ctr2" id="k0">21</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="WorkerThreadImpl.html" class="el_class">WorkerThreadImpl</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="31" height="10" title="179" alt="179"/><img src="../../../.resources/greenbar.gif" width="10" height="10" title="62" alt="62"/></td><td class="ctr2" id="c2">26%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="24" height="10" title="13" alt="13"/><img src="../../../.resources/greenbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="e0">28%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">25</td><td class="ctr2" id="i1">49</td><td class="ctr1" id="j1">3</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a3"><a href="WorkerThreadImpl$TemporaryWorkerThread.html" class="el_class">WorkerThreadImpl.TemporaryWorkerThread</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="5" height="10" title="31" alt="31"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h2">9</td><td class="ctr2" id="i2">9</td><td class="ctr1" id="j2">3</td><td class="ctr2" id="k2">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a0"><a href="JobPriorityComparator.html" class="el_class">JobPriorityComparator</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="1" height="10" title="10" alt="10"/></td><td class="ctr2" id="c0">77%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">3</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/index.source.html
    new file mode 100644
    index 000000000..9a84ef84b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.scheduler/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.scheduler</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.scheduler</span></div><h1>eu.sqooss.impl.service.scheduler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">684 of 971</td><td class="ctr2">30%</td><td class="bar">62 of 82</td><td class="ctr2">24%</td><td class="ctr1">57</td><td class="ctr2">75</td><td class="ctr1">124</td><td class="ctr2">203</td><td class="ctr1">19</td><td class="ctr2">34</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="SchedulerServiceImpl.java.html" class="el_source">SchedulerServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="82" height="10" title="471" alt="471"/><img src="../../../.resources/greenbar.gif" width="37" height="10" title="215" alt="215"/></td><td class="ctr2" id="c1">31%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="91" height="10" title="49" alt="49"/><img src="../../../.resources/greenbar.gif" width="28" height="10" title="15" alt="15"/></td><td class="ctr2" id="e1">23%</td><td class="ctr1" id="f0">42</td><td class="ctr2" id="g0">53</td><td class="ctr1" id="h0">89</td><td class="ctr2" id="i0">142</td><td class="ctr1" id="j0">12</td><td class="ctr2" id="k0">21</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="WorkerThreadImpl.java.html" class="el_source">WorkerThreadImpl.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="36" height="10" title="210" alt="210"/><img src="../../../.resources/greenbar.gif" width="10" height="10" title="62" alt="62"/></td><td class="ctr2" id="c2">23%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="24" height="10" title="13" alt="13"/><img src="../../../.resources/greenbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="e0">28%</td><td class="ctr1" id="f1">14</td><td class="ctr2" id="g1">19</td><td class="ctr1" id="h1">34</td><td class="ctr2" id="i1">58</td><td class="ctr1" id="j1">6</td><td class="ctr2" id="k1">10</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">2</td></tr><tr><td id="a0"><a href="JobPriorityComparator.java.html" class="el_source">JobPriorityComparator.java</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="1" height="10" title="10" alt="10"/></td><td class="ctr2" id="c0">77%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">3</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/DiffChunkImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/DiffChunkImpl.html
    new file mode 100644
    index 000000000..658cc3937
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/DiffChunkImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiffChunkImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.tds.diff</a> &gt; <span class="el_class">DiffChunkImpl</span></div><h1>DiffChunkImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">55 of 55</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">23</td><td class="ctr2">23</td><td class="ctr1">16</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a9"><a href="DiffChunkImpl.java.html#L50" class="el_method">setDiffOp(DiffChunk.DiffOp)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a8"><a href="DiffChunkImpl.java.html#L54" class="el_method">setChunk(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a10"><a href="DiffChunkImpl.java.html#L58" class="el_method">setPath(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a11"><a href="DiffChunkImpl.java.html#L62" class="el_method">setSourceLenght(int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a12"><a href="DiffChunkImpl.java.html#L66" class="el_method">setSourceStartLine(int)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a13"><a href="DiffChunkImpl.java.html#L70" class="el_method">setTargetLength(int)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a14"><a href="DiffChunkImpl.java.html#L74" class="el_method">setTargetStartLine(int)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="DiffChunkImpl.java.html#L42" class="el_method">DiffChunkImpl()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="DiffChunkImpl.java.html#L78" class="el_method">getChunk()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="DiffChunkImpl.java.html#L82" class="el_method">getPath()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a4"><a href="DiffChunkImpl.java.html#L86" class="el_method">getSourceLenght()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a5"><a href="DiffChunkImpl.java.html#L90" class="el_method">getSourceStartLine()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a6"><a href="DiffChunkImpl.java.html#L94" class="el_method">getTargetLength()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a7"><a href="DiffChunkImpl.java.html#L98" class="el_method">getTargetStartLine()</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a2"><a href="DiffChunkImpl.java.html#L102" class="el_method">getDiffOp()</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a15"><a href="DiffChunkImpl.java.html#L107" class="el_method">toString()</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/DiffChunkImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/DiffChunkImpl.java.html
    new file mode 100644
    index 000000000..70ec48252
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/DiffChunkImpl.java.html
    @@ -0,0 +1,110 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiffChunkImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.tds.diff</a> &gt; <span class="el_source">DiffChunkImpl.java</span></div><h1>DiffChunkImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.tds.diff;
    +
    +import eu.sqooss.service.tds.DiffChunk;
    +
    +/**
    + * A simple DTO holding information about a diff chunk 
    + *
    + */
    +<span class="nc" id="L42">public class DiffChunkImpl implements DiffChunk {</span>
    +
    +	private String chunk;
    +	private DiffOp diffOp;
    +	private String path;
    +	private int sourceLenght, sourceStartLine, targetLength, targetStartLine;
    +
    +	public void setDiffOp(DiffOp getDiffOp) {
    +<span class="nc" id="L50">		this.diffOp = getDiffOp;</span>
    +<span class="nc" id="L51">	}</span>
    +
    +	public void setChunk(String chunk) {
    +<span class="nc" id="L54">		this.chunk = chunk;</span>
    +<span class="nc" id="L55">	}</span>
    +
    +	public void setPath(String path) {
    +<span class="nc" id="L58">		this.path = path;</span>
    +<span class="nc" id="L59">	}</span>
    +
    +	public void setSourceLenght(int sourceLenght) {
    +<span class="nc" id="L62">		this.sourceLenght = sourceLenght;</span>
    +<span class="nc" id="L63">	}</span>
    +
    +	public void setSourceStartLine(int sourceStartLine) {
    +<span class="nc" id="L66">		this.sourceStartLine = sourceStartLine;</span>
    +<span class="nc" id="L67">	}</span>
    +
    +	public void setTargetLength(int targetLength) {
    +<span class="nc" id="L70">		this.targetLength = targetLength;</span>
    +<span class="nc" id="L71">	}</span>
    +
    +	public void setTargetStartLine(int targetStartLine) {
    +<span class="nc" id="L74">		this.targetStartLine = targetStartLine;</span>
    +<span class="nc" id="L75">	}</span>
    +
    +	public String getChunk() {
    +<span class="nc" id="L78">		return chunk;</span>
    +	}
    +
    +	public String getPath() {
    +<span class="nc" id="L82">		return path;</span>
    +	}
    +
    +	public int getSourceLenght() {
    +<span class="nc" id="L86">		return sourceLenght;</span>
    +	}
    +
    +	public int getSourceStartLine() {
    +<span class="nc" id="L90">		return sourceStartLine;</span>
    +	}
    +
    +	public int getTargetLength() {
    +<span class="nc" id="L94">		return targetLength;</span>
    +	}
    +
    +	public int getTargetStartLine() {
    +<span class="nc" id="L98">		return targetStartLine;</span>
    +	}
    +
    +	public DiffOp getDiffOp() {
    +<span class="nc" id="L102">		return diffOp;</span>
    +	}
    +	
    +	@Override
    +	public String toString() {
    +<span class="nc" id="L107">		return chunk;</span>
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/UnifiedDiffParser.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/UnifiedDiffParser.html
    new file mode 100644
    index 000000000..83390f116
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/UnifiedDiffParser.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UnifiedDiffParser</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.tds.diff</a> &gt; <span class="el_class">UnifiedDiffParser</span></div><h1>UnifiedDiffParser</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">375 of 375</td><td class="ctr2">0%</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="ctr1">27</td><td class="ctr2">27</td><td class="ctr1">110</td><td class="ctr2">110</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a6"><a href="UnifiedDiffParser.java.html#L131" class="el_method">parseDiff()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="308" alt="308"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">18</td><td class="ctr2" id="g0">18</td><td class="ctr1" id="h0">86</td><td class="ctr2" id="i0">86</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a8"><a href="UnifiedDiffParser.java.html#L79" class="el_method">UnifiedDiffParser(Revision, Revision, String, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="14" height="10" title="36" alt="36"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="7" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">12</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a7"><a href="UnifiedDiffParser.java.html#L67" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="5" height="10" title="13" alt="13"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">6</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="UnifiedDiffParser.java.html#L97" class="el_method">getError()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="UnifiedDiffParser.java.html#L102" class="el_method">getSourceRevision()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="UnifiedDiffParser.java.html#L107" class="el_method">getTargetRevision()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="UnifiedDiffParser.java.html#L112" class="el_method">getChangedPaths()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="UnifiedDiffParser.java.html#L117" class="el_method">getDiffChunks()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="UnifiedDiffParser.java.html#L122" class="el_method">getDiffData()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/UnifiedDiffParser.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/UnifiedDiffParser.java.html
    new file mode 100644
    index 000000000..116055537
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/UnifiedDiffParser.java.html
    @@ -0,0 +1,292 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UnifiedDiffParser.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.tds.diff</a> &gt; <span class="el_source">UnifiedDiffParser.java</span></div><h1>UnifiedDiffParser.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.tds.diff;
    +
    +import java.io.BufferedReader;
    +import java.io.IOException;
    +import java.io.StringReader;
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.HashMap;
    +import java.util.HashSet;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Set;
    +import java.util.regex.Matcher;
    +import java.util.regex.Pattern;
    +
    +import eu.sqooss.service.tds.Diff;
    +import eu.sqooss.service.tds.DiffChunk;
    +import eu.sqooss.service.tds.Revision;
    +import eu.sqooss.service.tds.DiffChunk.DiffOp;
    +import eu.sqooss.service.util.FileUtils;
    +
    +/**
    + * An implementation of the Diff interface, for the unified diff format.
    + *  
    + * @author Georgios Gousios - &lt;gousiosg@gmail.com&gt;
    + * @see {@link http://en.wikipedia.org/wiki/Diff#Unified_format}
    + *
    + */
    +public class UnifiedDiffParser implements Diff {
    +	/* 
    +	 * Most patterns copied verbatim from Perl unified diff parser implementation:
    +	 * http://search.cpan.org/~nikc/SVN-Web-0.53/lib/SVN/Web/Diff.pm
    +	 */
    +<span class="nc" id="L67">	private static String diffChunkStart = &quot;^\\@\\@ -(\\d+)(,\\d+)?\\s*[+](\\d+)(,\\d+)? \\@\\@$&quot;;</span>
    +<span class="nc" id="L68">	private static String propChunkStart = &quot;^Property.*:\\s*(.*)$&quot;;</span>
    +<span class="nc" id="L69">	private static String chunkFileSource = &quot;^\\-\\-\\- ([^\\s]+)\\s+(.+)$&quot;;</span>
    +<span class="nc" id="L70">	private static String chunkFileTarget = &quot;^\\+\\+\\+ ([^\\s]+)\\s+(.+)$&quot;;</span>
    +<span class="nc" id="L71">	private static String index = &quot;^Index:\\s?(.*)$&quot;;</span>
    +<span class="nc" id="L72">	private static String eqs = &quot;^=*&quot;;</span>
    +	
    +	private Revision revStart,revEnd;
    +	private String theDiff;
    +	private String basePath;
    +	private Set&lt;String&gt; changedPaths;
    +	private Map&lt;String, List&lt;DiffChunk&gt;&gt; diffChunks;
    +<span class="nc" id="L79">    private String error = &quot;&quot;;</span>
    +<span class="nc" id="L80">	private boolean parsed = false;</span>
    +	
    +<span class="nc" id="L82">    public UnifiedDiffParser(Revision start, Revision end, </span>
    +    		String basePath, String diff) {
    +<span class="nc" id="L84">        revStart = start;</span>
    +<span class="nc bnc" id="L85" title="All 2 branches missed.">        if (end!=null) {</span>
    +<span class="nc" id="L86">            revEnd = end;</span>
    +        } 
    +        
    +<span class="nc" id="L89">        theDiff = diff;</span>
    +<span class="nc" id="L90">        this.basePath = basePath;</span>
    +<span class="nc" id="L91">        changedPaths = new HashSet&lt;String&gt;();</span>
    +<span class="nc" id="L92">        diffChunks = new HashMap&lt;String, List&lt;DiffChunk&gt;&gt;();</span>
    +<span class="nc" id="L93">        this.parsed = false;</span>
    +<span class="nc" id="L94">    }</span>
    +    
    +    public String getError() {
    +<span class="nc" id="L97">    	return error;</span>
    +    }
    +    
    +    /** {@inheritDoc} */
    +    public Revision getSourceRevision() {
    +<span class="nc" id="L102">        return revStart;</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public Revision getTargetRevision() {
    +<span class="nc" id="L107">        return revEnd;</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +	public Set&lt;String&gt; getChangedPaths() {
    +<span class="nc" id="L112">		return changedPaths;</span>
    +	}
    +
    +	/** {@inheritDoc} */
    +	public Map&lt;String, List&lt;DiffChunk&gt;&gt; getDiffChunks() {
    +<span class="nc" id="L117">		return diffChunks;</span>
    +	}
    +	
    +	/** {@inheritDoc} */
    +	public String getDiffData() {
    +<span class="nc" id="L122">		return theDiff;</span>
    +	}
    +	
    +	/**
    +	 * Parse a unified diff and return true on success or false
    +	 * and set the error message.
    +	 */
    +	public boolean parseDiff() {
    +		//Don't re-parse the parsed diff
    +<span class="nc bnc" id="L131" title="All 2 branches missed.">		if (parsed)</span>
    +<span class="nc" id="L132">			return true;</span>
    +		
    +<span class="nc" id="L134">		Pattern chunkStart = Pattern.compile(diffChunkStart);</span>
    +<span class="nc" id="L135">		Pattern propChunk = Pattern.compile(propChunkStart);</span>
    +<span class="nc" id="L136">		Pattern fileTarget = Pattern.compile(chunkFileTarget);</span>
    +<span class="nc" id="L137">		Pattern fileSource = Pattern.compile(chunkFileSource);</span>
    +<span class="nc" id="L138">		Pattern idx = Pattern.compile(index);</span>
    +<span class="nc" id="L139">		Pattern equals = Pattern.compile(eqs);</span>
    +		
    +<span class="nc" id="L141">		Matcher m = null;</span>
    +		
    +<span class="nc" id="L143">		BufferedReader r = new BufferedReader(new StringReader(theDiff));</span>
    +		String line;
    +		
    +<span class="nc" id="L146">		boolean diffStart = false, chnkStart = false;</span>
    +<span class="nc" id="L147">		StringBuffer curChunkText = null;</span>
    +<span class="nc" id="L148">		String curPath = null;</span>
    +<span class="nc" id="L149">		DiffChunkImpl curChunk = null;</span>
    +<span class="nc" id="L150">		List&lt;DiffChunk&gt; curChunkList = null;</span>
    +		try {
    +<span class="nc bnc" id="L152" title="All 2 branches missed.">			while ((line = r.readLine()) != null) {</span>
    +				/*
    +				 * Skip SVN introduced lines like
    +				 * Index: specs/src/eu/sqooss/impl/service/dsl/SpRevision.java
    +				 * ===========================================================
    +				 */
    +<span class="nc bnc" id="L158" title="All 2 branches missed.">				if (idx.matcher(line).matches() || </span>
    +<span class="nc bnc" id="L159" title="All 2 branches missed.">						equals.matcher(line).matches()) {</span>
    +<span class="nc" id="L160">					continue;</span>
    +				}
    +				
    +				/* Match lines like
    +				 * --- specs/src/eu/sqooss/impl/service/dsl/SpRevision.java
    +				 * 
    +				 * 
    +				 * and record file name. Match either of those 2 lines
    +				 * signifies start of parsing chunks
    +				 */
    +<span class="nc bnc" id="L170" title="All 2 branches missed.">				if (fileSource.matcher(line).matches()) {</span>
    +					//New group found
    +<span class="nc bnc" id="L172" title="All 2 branches missed.">					if (diffStart == true &amp;&amp; </span>
    +<span class="nc bnc" id="L173" title="All 2 branches missed.">							curChunkList.size() != 0) {</span>
    +<span class="nc" id="L174">						diffChunks.put(curPath, curChunkList);</span>
    +					}
    +					
    +<span class="nc" id="L177">					m = fileSource.matcher(line);</span>
    +<span class="nc" id="L178">					m.matches();</span>
    +<span class="nc" id="L179">					curPath = FileUtils.appendPath(basePath, m.group(1));</span>
    +<span class="nc" id="L180">					changedPaths.add(curPath);</span>
    +<span class="nc" id="L181">					curChunkList = new ArrayList&lt;DiffChunk&gt;();</span>
    +<span class="nc" id="L182">					diffStart = true;</span>
    +<span class="nc" id="L183">					continue;</span>
    +				}
    +				/* those lines are not really interesting
    +				 * +++ specs/src/eu/sqooss/impl/service/dsl/SpRevision.java
    +				 */
    +<span class="nc bnc" id="L188" title="All 2 branches missed.">				if (fileTarget.matcher(line).matches()) {</span>
    +<span class="nc" id="L189">					continue;</span>
    +				}
    +				
    +				/*
    +				 * Match a chunk describing a property change 
    +				 * (this is SVN specific code)
    +				 *  Property changes on: ProjectFile.java
    +				 */
    +<span class="nc bnc" id="L197" title="All 2 branches missed.">				if (propChunk.matcher(line).matches()) {</span>
    +					/* Match */
    +<span class="nc bnc" id="L199" title="All 2 branches missed.">					if (chnkStart == true) {</span>
    +<span class="nc" id="L200">						curChunk.setChunk(curChunkText.toString());</span>
    +<span class="nc" id="L201">						curChunkList.add(curChunk);</span>
    +					}
    +					
    +<span class="nc" id="L204">					chnkStart = true;</span>
    +<span class="nc" id="L205">					curChunk = new DiffChunkImpl();</span>
    +<span class="nc" id="L206">					curChunk.setDiffOp(DiffOp.UNDEF);</span>
    +<span class="nc" id="L207">					curChunkText = new StringBuffer();</span>
    +					
    +					/* If the property change is the only thing
    +					 * appearing in the diff, we need to start 
    +					 * parsing and init some variables first. 
    +					 */
    +<span class="nc bnc" id="L213" title="All 2 branches missed.">					if (!diffStart) {</span>
    +<span class="nc" id="L214">						curChunkList = new ArrayList&lt;DiffChunk&gt;();</span>
    +<span class="nc" id="L215">						diffStart = true;</span>
    +<span class="nc" id="L216">						m = propChunk.matcher(line);</span>
    +<span class="nc" id="L217">						m.matches();</span>
    +<span class="nc" id="L218">						curPath = FileUtils.appendPath(basePath, m.group(1));</span>
    +<span class="nc" id="L219">						changedPaths.add(curPath);</span>
    +					}
    +				}
    +				
    +<span class="nc bnc" id="L223" title="All 2 branches missed.">				if (!diffStart) {</span>
    +<span class="nc" id="L224">					error = &quot;Not a chunk header: &quot; + line;</span>
    +<span class="nc" id="L225">					return false;</span>
    +				}
    +				
    +				
    +				
    +				/* Match chunk start lines like
    +				 * @@ -111,10 +111,10 @@ or
    +				 * @@ -1 +1 @@
    +				 */
    +<span class="nc bnc" id="L234" title="All 2 branches missed.">				if (chunkStart.matcher(line).matches()) {</span>
    +					
    +<span class="nc bnc" id="L236" title="All 2 branches missed.">					if (chnkStart == true) {</span>
    +<span class="nc" id="L237">						curChunk.setChunk(curChunkText.toString());</span>
    +<span class="nc" id="L238">						curChunkList.add(curChunk);</span>
    +					}
    +					
    +<span class="nc" id="L241">					chnkStart = true;</span>
    +<span class="nc" id="L242">					curChunk = new DiffChunkImpl();</span>
    +<span class="nc" id="L243">					m = chunkStart.matcher(line);</span>
    +					//We already know that it matches, just trigger the group extraction
    +<span class="nc" id="L245">					m.matches(); </span>
    +					
    +					//Unified diffs do not support this
    +<span class="nc" id="L248">					curChunk.setDiffOp(DiffOp.UNDEF);</span>
    +<span class="nc" id="L249">					curChunk.setPath(curPath);					</span>
    +<span class="nc" id="L250">					curChunk.setSourceStartLine(Integer.parseInt(m.group(1)));</span>
    +<span class="nc bnc" id="L251" title="All 2 branches missed.">					if (m.group(2) != null) {</span>
    +<span class="nc" id="L252">						curChunk.setSourceLenght(Integer.parseInt(m.group(2).substring(1)));</span>
    +<span class="nc" id="L253">					} else {</span>
    +<span class="nc" id="L254">						curChunk.setSourceLenght(0);</span>
    +					}
    +<span class="nc" id="L256">					curChunk.setTargetStartLine(Integer.parseInt(m.group(3)));</span>
    +<span class="nc bnc" id="L257" title="All 2 branches missed.">					if (m.group(4) != null) {</span>
    +<span class="nc" id="L258">						curChunk.setTargetLength(Integer.parseInt(m.group(4).substring(1)));</span>
    +<span class="nc" id="L259">					} else {</span>
    +<span class="nc" id="L260">						curChunk.setTargetLength(0);</span>
    +					}
    +<span class="nc" id="L262">					curChunkText = new StringBuffer();</span>
    +<span class="nc" id="L263">					continue;</span>
    +				}
    +				
    +<span class="nc" id="L266">				curChunkText.append(line).append(&quot;\n&quot;);</span>
    +			}
    +<span class="nc" id="L268">		} catch (IOException e) {</span>
    +<span class="nc" id="L269">			error = &quot;Error reading diff file&quot;;</span>
    +<span class="nc" id="L270">			return false;</span>
    +		}
    +		//Clean up
    +<span class="nc bnc" id="L273" title="All 2 branches missed.">		if (curChunk != null) { </span>
    +<span class="nc" id="L274">			curChunk.setChunk(curChunkText.toString());</span>
    +<span class="nc" id="L275">			curChunkList.add(curChunk);</span>
    +<span class="nc" id="L276">			diffChunks.put(curPath, curChunkList);</span>
    +<span class="nc" id="L277">		} else {</span>
    +			//This means that the actual diff was empty
    +<span class="nc" id="L279">			List&lt;DiffChunk&gt; l = Collections.emptyList();</span>
    +<span class="nc" id="L280">			diffChunks.put(curPath, l);</span>
    +		}
    +		
    +		//Don't hold up space now that the diff is parsed
    +<span class="nc" id="L284">		theDiff = null;</span>
    +<span class="nc" id="L285">		parsed = true;</span>
    +<span class="nc" id="L286">		return true;</span>
    +	}
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/index.html
    new file mode 100644
    index 000000000..75f884ff8
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.tds.diff</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.tds.diff</span></div><h1>eu.sqooss.impl.service.tds.diff</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">430 of 430</td><td class="ctr2">0%</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="ctr1">43</td><td class="ctr2">43</td><td class="ctr1">133</td><td class="ctr2">133</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="UnifiedDiffParser.html" class="el_class">UnifiedDiffParser</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="375" alt="375"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">27</td><td class="ctr2" id="g0">27</td><td class="ctr1" id="h0">110</td><td class="ctr2" id="i0">110</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="DiffChunkImpl.html" class="el_class">DiffChunkImpl</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="17" height="10" title="55" alt="55"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">23</td><td class="ctr2" id="i1">23</td><td class="ctr1" id="j0">16</td><td class="ctr2" id="k0">16</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/index.source.html
    new file mode 100644
    index 000000000..25ab07d9d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds.diff/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.tds.diff</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.tds.diff</span></div><h1>eu.sqooss.impl.service.tds.diff</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">430 of 430</td><td class="ctr2">0%</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="ctr1">43</td><td class="ctr2">43</td><td class="ctr1">133</td><td class="ctr2">133</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="UnifiedDiffParser.java.html" class="el_source">UnifiedDiffParser.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="375" alt="375"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">27</td><td class="ctr2" id="g0">27</td><td class="ctr1" id="h0">110</td><td class="ctr2" id="i0">110</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="DiffChunkImpl.java.html" class="el_source">DiffChunkImpl.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="17" height="10" title="55" alt="55"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">23</td><td class="ctr2" id="i1">23</td><td class="ctr1" id="j0">16</td><td class="ctr2" id="k0">16</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/DataAccessorFactory.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/DataAccessorFactory.html
    new file mode 100644
    index 000000000..593aec92b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/DataAccessorFactory.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DataAccessorFactory</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.tds</a> &gt; <span class="el_class">DataAccessorFactory</span></div><h1>DataAccessorFactory</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">212 of 212</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">49</td><td class="ctr2">49</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a2"><a href="DataAccessorFactory.java.html#L119" class="el_method">getInstance(URI, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="113" alt="113"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">26</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="DataAccessorFactory.java.html#L82" class="el_method">removeImplementation(Class)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="47" height="10" title="45" alt="45"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">10</td><td class="ctr2" id="i1">10</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="DataAccessorFactory.java.html#L68" class="el_method">addImplementation(String, Class)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="41" height="10" title="39" alt="39"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="DataAccessorFactory.java.html#L54" class="el_method">DataAccessorFactory(Logger)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="9" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="DataAccessorFactory.java.html#L52" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="DataAccessorFactory.java.html#L103" class="el_method">getSupportedSchemes()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/DataAccessorFactory.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/DataAccessorFactory.java.html
    new file mode 100644
    index 000000000..9d3777361
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/DataAccessorFactory.java.html
    @@ -0,0 +1,155 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DataAccessorFactory.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.tds</a> &gt; <span class="el_source">DataAccessorFactory.java</span></div><h1>DataAccessorFactory.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + * 
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software, 
    + *                 Athens, Greece.
    + * 
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + * 
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + * 
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + * 
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + * 
    + */
    +
    +package eu.sqooss.impl.service.tds;
    +
    +import java.net.URI;
    +import java.util.Map;
    +import java.util.Set;
    +import java.util.concurrent.ConcurrentHashMap;
    +
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.AccessorException;
    +import eu.sqooss.service.tds.DataAccessor;
    +
    +/** 
    + * A factory class that registers all data accessor implementations and returns
    + *  DataAccessor instances according to data store URIs.   
    + */
    +public class DataAccessorFactory {
    +    
    +    private static Logger log;
    +<span class="nc" id="L52">    private static Map&lt;String, Class&lt;?&gt;&gt; implementations = null;</span>
    +    
    +<span class="nc" id="L54">    DataAccessorFactory(Logger l) {</span>
    +<span class="nc" id="L55">        DataAccessorFactory.log = l;</span>
    +<span class="nc" id="L56">        implementations = new ConcurrentHashMap&lt;String, Class&lt;?&gt;&gt;();</span>
    +<span class="nc" id="L57">    }</span>
    +    
    +    /**
    +     * Register a DataAccessor implementation class. If there is another 
    +     * implementation for the provided scheme, it will be overwritten. 
    +     * 
    +     * @param scheme The URL scheme this implementation supports
    +     * @param impl The implementing class
    +     */
    +    public synchronized static void addImplementation(String scheme, 
    +            Class&lt;? extends DataAccessor&gt; impl) {
    +<span class="nc bnc" id="L68" title="All 2 branches missed.">        if (implementations.containsKey(scheme)) {</span>
    +<span class="nc" id="L69">            log.warn(&quot;Overwriting implementation class &quot; </span>
    +<span class="nc" id="L70">                    + implementations.get(scheme) + &quot; for scheme &quot; + scheme);</span>
    +        }
    +<span class="nc" id="L72">        log.info(&quot;Adding handler class &quot; + impl.getName() + &quot; for scheme &quot;</span>
    +<span class="nc" id="L73">                + scheme);</span>
    +<span class="nc" id="L74">        implementations.put(scheme, impl);</span>
    +<span class="nc" id="L75">    }</span>
    +    
    +    /**
    +     * Unregister a TDS implementation class.
    +     * @param impl
    +     */
    +    public synchronized static void removeImplementation(Class&lt;? extends DataAccessor&gt; impl) {
    +<span class="nc" id="L82">        String foundKey = null;</span>
    +        
    +<span class="nc bnc" id="L84" title="All 2 branches missed.">        for (String protocol : implementations.keySet()) {</span>
    +<span class="nc bnc" id="L85" title="All 2 branches missed.">            if (implementations.get(protocol).equals(impl)) {</span>
    +<span class="nc" id="L86">                foundKey = protocol;</span>
    +<span class="nc" id="L87">                break;</span>
    +            }
    +        }
    +        
    +<span class="nc bnc" id="L91" title="All 2 branches missed.">        if (foundKey != null) {</span>
    +<span class="nc" id="L92">            implementations.remove(foundKey);</span>
    +<span class="nc" id="L93">            log.info(&quot;Removing handler class &quot; + impl.getName() + &quot; for scheme &quot;</span>
    +<span class="nc" id="L94">                    + foundKey);</span>
    +        }
    +<span class="nc" id="L96">    }</span>
    +     
    +    /**
    +     * Get a list of all supported URI schemes.
    +     * @return A, possibly empty, Set of supported URI schemes.
    +     */
    +    public static Set&lt;String&gt; getSupportedSchemes() {
    +<span class="nc" id="L103">        return implementations.keySet();</span>
    +    }
    +    
    +    
    +    
    +    /**
    +     * Get the appropriate accessor for the provided URL. Will  attempt
    +     * to initialize the accessor.
    +     * @param url The location of the data store the accessor must handle
    +     * @param name the project name to retrieve an accessor for
    +     * @return The accessor instance, or null if there are errors when
    +     * initialising the accessor or if there is no accessor to handle
    +     * the provided URI.
    +     */
    +    public static DataAccessor getInstance(URI url, String name) {
    +
    +<span class="nc bnc" id="L119" title="All 4 branches missed.">        if (url == null || url.getScheme() == null) {</span>
    +<span class="nc" id="L120">            log.warn(&quot;Request for accessor with empty URI&quot;);</span>
    +<span class="nc" id="L121">            return null;</span>
    +        }
    +        
    +<span class="nc" id="L124">        Class&lt;?&gt; handler = implementations.get(url.getScheme());</span>
    +
    +<span class="nc bnc" id="L126" title="All 2 branches missed.">        if (handler == null) {</span>
    +<span class="nc" id="L127">            log.warn(&quot;No accessor found for scheme &quot; + url.getScheme());</span>
    +<span class="nc" id="L128">            return null;</span>
    +        }
    +
    +        try {
    +            //DataAccessor da = (DataAccessor) handler.newInstance();
    +<span class="nc" id="L133">            Object o = handler.newInstance();</span>
    +<span class="nc" id="L134">            DataAccessor da = (DataAccessor)o;</span>
    +<span class="nc" id="L135">            da.init(url, name);</span>
    +<span class="nc" id="L136">            return da;</span>
    +<span class="nc" id="L137">        } catch (InstantiationException e) {</span>
    +<span class="nc" id="L138">            log.error(&quot;Error instantiating data accessor class &quot;</span>
    +<span class="nc" id="L139">                    + handler.getName() + &quot; for URI &quot; + url.toString() + &quot;:&quot;</span>
    +<span class="nc" id="L140">                    + e.getMessage());</span>
    +<span class="nc" id="L141">            return null;</span>
    +<span class="nc" id="L142">        } catch (IllegalAccessException e) {</span>
    +<span class="nc" id="L143">            log.error(&quot;Error instantiating data accessor class &quot;</span>
    +<span class="nc" id="L144">                    + handler.getName() + &quot; for URI &quot; + url.toString() + &quot;:&quot;</span>
    +<span class="nc" id="L145">                    + e.getMessage());</span>
    +<span class="nc" id="L146">            return null;</span>
    +<span class="nc" id="L147">        } catch (AccessorException e) {</span>
    +<span class="nc" id="L148">            log.error(&quot;The accessor class &quot; + handler.getName() + &quot; failed&quot;</span>
    +<span class="nc" id="L149">                    + &quot; while instantiating accessor for URI &quot; + url.toString()</span>
    +<span class="nc" id="L150">                    + &quot;:&quot; + e.getMessage());</span>
    +<span class="nc" id="L151">            return null;</span>
    +        }
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/ProjectDataAccessorImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/ProjectDataAccessorImpl.html
    new file mode 100644
    index 000000000..1785bd84c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/ProjectDataAccessorImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectDataAccessorImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.tds</a> &gt; <span class="el_class">ProjectDataAccessorImpl</span></div><h1>ProjectDataAccessorImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">212 of 212</td><td class="ctr2">0%</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">52</td><td class="ctr2">52</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a4"><a href="ProjectDataAccessorImpl.java.html#L120" class="el_method">getSCMAccessor()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="65" alt="65"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">15</td><td class="ctr2" id="i0">15</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="ProjectDataAccessorImpl.java.html#L74" class="el_method">getBTSAccessor()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="101" height="10" title="55" alt="55"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">12</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="ProjectDataAccessorImpl.java.html#L96" class="el_method">getMailAccessor()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="101" height="10" title="55" alt="55"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">12</td><td class="ctr2" id="i2">12</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="ProjectDataAccessorImpl.java.html#L55" class="el_method">ProjectDataAccessorImpl(long, String, String, String, String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="49" height="10" title="27" alt="27"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">10</td><td class="ctr2" id="i3">10</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="ProjectDataAccessorImpl.java.html#L148" class="el_method">getId()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="ProjectDataAccessorImpl.java.html#L59" class="el_method">static {...}</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="ProjectDataAccessorImpl.java.html#L155" class="el_method">getName()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/ProjectDataAccessorImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/ProjectDataAccessorImpl.java.html
    new file mode 100644
    index 000000000..e237debd3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/ProjectDataAccessorImpl.java.html
    @@ -0,0 +1,161 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectDataAccessorImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.tds</a> &gt; <span class="el_source">ProjectDataAccessorImpl.java</span></div><h1>ProjectDataAccessorImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.tds;
    +
    +import java.net.URI;
    +
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.InvalidAccessorException;
    +import eu.sqooss.service.tds.ProjectAccessor;
    +import eu.sqooss.service.tds.BTSAccessor;
    +import eu.sqooss.service.tds.MailAccessor;
    +import eu.sqooss.service.tds.SCMAccessor;
    +import eu.sqooss.service.util.URIUtills;
    +
    +/**
    + * A collection of accessors to project data sources. 
    + */
    +public class ProjectDataAccessorImpl implements ProjectAccessor {
    +    private String bts;
    +    private String mail;
    +    private String scm;
    +    private String name;
    +    private long id;
    +<span class="nc" id="L55">    private BTSAccessor btsAccessor = null;</span>
    +<span class="nc" id="L56">    private SCMAccessor scmAccessor = null;</span>
    +<span class="nc" id="L57">    private MailAccessor mailAccessor = null;</span>
    +
    +<span class="nc" id="L59">    public static Logger logger = null;</span>
    +
    +<span class="nc" id="L61">    public ProjectDataAccessorImpl(long id, String name, String bts,</span>
    +            String mail, String scm) {
    +<span class="nc" id="L63">        this.bts = bts;</span>
    +<span class="nc" id="L64">        this.mail = mail;</span>
    +<span class="nc" id="L65">        this.scm = scm;</span>
    +<span class="nc" id="L66">        this.id = id;</span>
    +<span class="nc" id="L67">        this.name = name;</span>
    +<span class="nc" id="L68">    }</span>
    +
    +    // Interface functions
    +    /** {@inheritDoc} */
    +	public BTSAccessor getBTSAccessor() throws InvalidAccessorException {
    +
    +<span class="nc" id="L74">		URI uri = null;</span>
    +
    +<span class="nc bnc" id="L76" title="All 2 branches missed.">		if ((uri = URIUtills.toURI(bts)) == null) {</span>
    +<span class="nc" id="L77">			logger.warn(&quot;Error converting to URI: &quot; + bts);</span>
    +<span class="nc" id="L78">			return null;</span>
    +		}
    +
    +<span class="nc bnc" id="L81" title="All 2 branches missed.">		if (btsAccessor == null) {</span>
    +<span class="nc" id="L82">			btsAccessor = (BTSAccessor) DataAccessorFactory.getInstance(uri,</span>
    +<span class="nc" id="L83">					name);</span>
    +<span class="nc bnc" id="L84" title="All 2 branches missed.">			if (btsAccessor == null) {</span>
    +<span class="nc" id="L85">				logger.warn(&quot;Bug data accessor for project &lt;&quot; + name</span>
    +<span class="nc" id="L86">						+ &quot;&gt; could not be initialized&quot;);</span>
    +<span class="nc" id="L87">				throw new InvalidAccessorException(btsAccessor, uri);</span>
    +			}
    +		}
    +
    +<span class="nc" id="L91">		return btsAccessor;</span>
    +	}
    +
    +    /** {@inheritDoc} */
    +	public MailAccessor getMailAccessor() throws InvalidAccessorException {
    +<span class="nc" id="L96">		URI uri = null;</span>
    +
    +<span class="nc bnc" id="L98" title="All 2 branches missed.">		if ((uri = URIUtills.toURI(mail)) == null) {</span>
    +<span class="nc" id="L99">			logger.warn(&quot;Error converting to URI: &quot; + mail);</span>
    +<span class="nc" id="L100">			return null;</span>
    +		}
    +
    +<span class="nc bnc" id="L103" title="All 2 branches missed.">		if (mailAccessor == null) {</span>
    +<span class="nc" id="L104">			mailAccessor = (MailAccessor) DataAccessorFactory.getInstance(uri,</span>
    +<span class="nc" id="L105">					name);</span>
    +<span class="nc bnc" id="L106" title="All 2 branches missed.">			if (mailAccessor == null) {</span>
    +<span class="nc" id="L107">				logger.warn(&quot;Mailing list accessor for project &lt;&quot; + name</span>
    +<span class="nc" id="L108">						+ &quot;&gt; could not be initialized&quot;);</span>
    +<span class="nc" id="L109">				throw new InvalidAccessorException(mailAccessor, uri);</span>
    +			}
    +		}
    +
    +<span class="nc" id="L113">		return mailAccessor;</span>
    +	}
    +
    +    /** {@inheritDoc} */
    +    public SCMAccessor getSCMAccessor() throws InvalidAccessorException {
    +    	
    +    	try {
    +<span class="nc" id="L120">    		URI uri = null;</span>
    +    		
    +<span class="nc bnc" id="L122" title="All 2 branches missed.">    		if ((uri = URIUtills.toURI(scm)) == null) {</span>
    +<span class="nc" id="L123">            	logger.warn(&quot;Error converting to URI: &quot; + scm);</span>
    +<span class="nc" id="L124">            	return null;</span>
    +            }
    +
    +<span class="nc bnc" id="L127" title="All 2 branches missed.">			if (scmAccessor == null) {</span>
    +<span class="nc" id="L128">				scmAccessor = (SCMAccessor) DataAccessorFactory.getInstance(</span>
    +<span class="nc" id="L129">						uri, name);</span>
    +<span class="nc bnc" id="L130" title="All 2 branches missed.">				if (scmAccessor == null) {</span>
    +<span class="nc" id="L131">					logger.warn(&quot;SCM accessor for project &lt;&quot; + name</span>
    +<span class="nc" id="L132">							+ &quot;&gt; could not be initialized&quot;);</span>
    +<span class="nc" id="L133">					throw new InvalidAccessorException(scmAccessor, uri);</span>
    +				}
    +			}
    +<span class="nc" id="L136">		} catch (Exception e) {</span>
    +<span class="nc" id="L137">			throw new InvalidAccessorException(scmAccessor, </span>
    +<span class="nc" id="L138">					URIUtills.toURI(scm));</span>
    +		}
    +
    +<span class="nc" id="L141">        return scmAccessor;</span>
    +    }
    +
    +    /**
    +     * Get the project's system id
    +     */
    +    public Long getId() {
    +<span class="nc" id="L148">        return this.id;</span>
    +    }
    +
    +    /**
    +     * Get the project's name
    +     */
    +    public String getName() {
    +<span class="nc" id="L155">        return this.name;</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/TDSServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/TDSServiceImpl.html
    new file mode 100644
    index 000000000..d58c59445
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/TDSServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TDSServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.tds</a> &gt; <span class="el_class">TDSServiceImpl</span></div><h1>TDSServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">341 of 341</td><td class="ctr2">0%</td><td class="bar">20 of 20</td><td class="ctr2">0%</td><td class="ctr1">23</td><td class="ctr2">23</td><td class="ctr1">66</td><td class="ctr2">66</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a3"><a href="TDSServiceImpl.java.html#L121" class="el_method">isURLSupported(String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="TDSServiceImpl.java.html#L109" class="el_method">addAccessor(long, String, String, String, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="96" height="10" title="58" alt="58"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h4">7</td><td class="ctr2" id="i4">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="TDSServiceImpl.java.html#L77" class="el_method">getAccessor(long)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="83" height="10" title="50" alt="50"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="TDSServiceImpl.java.html#L95" class="el_method">releaseAccessor(ProjectAccessor)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="76" height="10" title="46" alt="46"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h2">9</td><td class="ctr2" id="i2">9</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a10"><a href="TDSServiceImpl.java.html#L146" class="el_method">stuffer()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="73" height="10" title="44" alt="44"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h3">9</td><td class="ctr2" id="i3">9</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="TDSServiceImpl.java.html#L168" class="el_method">startUp()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="41" height="10" title="25" alt="25"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="TDSServiceImpl.java.html#L190" class="el_method">registerPlugin(String[], Class)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="33" height="10" title="20" alt="20"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a4"><a href="TDSServiceImpl.java.html#L67" class="el_method">projectExists(long)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a11"><a href="TDSServiceImpl.java.html#L53" class="el_method">TDSServiceImpl()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="10" height="10" title="6" alt="6"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a0"><a href="TDSServiceImpl.java.html#L72" class="el_method">accessorExists(long)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a7"><a href="TDSServiceImpl.java.html#L185" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a12"><a href="TDSServiceImpl.java.html#L197" class="el_method">unregisterPlugin(Class)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a8"><a href="TDSServiceImpl.java.html#L164" class="el_method">shutDown()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="1" height="10" title="1" alt="1"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/TDSServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/TDSServiceImpl.java.html
    new file mode 100644
    index 000000000..57ecac667
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/TDSServiceImpl.java.html
    @@ -0,0 +1,202 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TDSServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.tds</a> &gt; <span class="el_source">TDSServiceImpl.java</span></div><h1>TDSServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.tds;
    +
    +import java.net.URI;
    +import java.util.concurrent.ConcurrentHashMap;
    +
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.core.AlitheiaCoreService;
    +import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.DataAccessor;
    +import eu.sqooss.service.tds.ProjectAccessor;
    +import eu.sqooss.service.tds.TDSService;
    +import eu.sqooss.service.util.URIUtills;
    +
    +public class TDSServiceImpl implements TDSService, AlitheiaCoreService {
    +<span class="nc" id="L53">    private Logger logger = null;</span>
    +    private ConcurrentHashMap&lt;Long, ProjectDataAccessorImpl&gt; accessorPool;
    +    private ConcurrentHashMap&lt;ProjectDataAccessorImpl, Integer&gt; accessorClaims;
    +    
    +<span class="nc" id="L57">    public TDSServiceImpl() {}</span>
    +
    +    // Interface methods
    +
    +    // For now, there is no difference between projectExists and
    +    // accessorExists; in future there may be when accessor pooling
    +    // and limiting is implemented. Then it may be that a project
    +    // exists for the TDS but has no accessor yet.
    +    /**{@inheritDoc}}*/
    +    public boolean projectExists( long projectId ) {
    +<span class="nc" id="L67">        return accessorPool.containsKey(new Long(projectId));</span>
    +    }
    +
    +    /**{@inheritDoc}}*/
    +    public boolean accessorExists( long projectId ) {
    +<span class="nc" id="L72">        return projectExists(projectId);</span>
    +    }
    +
    +    /**{@inheritDoc}}*/
    +    public ProjectAccessor getAccessor( long projectId ) {
    +<span class="nc bnc" id="L77" title="All 2 branches missed.">        if (accessorExists(projectId)) {</span>
    +<span class="nc" id="L78">            ProjectDataAccessorImpl a = accessorPool.get(projectId);</span>
    +<span class="nc" id="L79">            synchronized (this) {</span>
    +<span class="nc" id="L80">                int claims = accessorClaims.get(a);</span>
    +<span class="nc" id="L81">                claims++;</span>
    +<span class="nc" id="L82">                accessorClaims.put(a, claims);</span>
    +            }
    +            //logger.debug(&quot;Retrieving accessor for project &quot; + projectId);
    +<span class="nc" id="L85">            return a;</span>
    +        } else {
    +<span class="nc" id="L87">            logger.warn(&quot;Retrieval request for non-existent project &quot; + projectId);</span>
    +        }
    +
    +<span class="nc" id="L90">        return null;</span>
    +    }
    +
    +    /**{@inheritDoc}}*/
    +    public void releaseAccessor(ProjectAccessor td) {
    +<span class="nc" id="L95">        logger.debug(&quot;Release accessor for &quot; + td.getName());</span>
    +<span class="nc" id="L96">        synchronized (accessorClaims) {</span>
    +<span class="nc" id="L97">            int claims = accessorClaims.get(td);</span>
    +<span class="nc bnc" id="L98" title="All 2 branches missed.">            if (claims &lt;= 0) {</span>
    +<span class="nc" id="L99">                logger.error(&quot;Request to release not claimed accessor&quot;);</span>
    +<span class="nc" id="L100">            } else {</span>
    +<span class="nc" id="L101">                claims--;</span>
    +<span class="nc" id="L102">                accessorClaims.put((ProjectDataAccessorImpl)td, claims);</span>
    +            }
    +        }
    +<span class="nc" id="L105">    }</span>
    +
    +    /**{@inheritDoc}}*/
    +    public void addAccessor( long id, String name, String bts, String mail, String scm ) {
    +<span class="nc bnc" id="L109" title="All 2 branches missed.">        if (accessorExists(id)) {</span>
    +<span class="nc" id="L110">            logger.warn(&quot;Adding duplicate project id &quot; + id + &quot; &lt;&quot; + name + &quot;&gt;&quot;);</span>
    +            // Continue anyway
    +        }
    +<span class="nc" id="L113">        ProjectDataAccessorImpl a = new ProjectDataAccessorImpl(id,name,bts,mail,scm);</span>
    +<span class="nc" id="L114">        accessorPool.putIfAbsent(new Long(id),a);</span>
    +<span class="nc" id="L115">        accessorClaims.putIfAbsent(a, 1);</span>
    +<span class="nc" id="L116">        logger.info(&quot;Added project &lt;&quot; + name + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L117">    }</span>
    +    
    +    /**{@inheritDoc}}*/
    +    public boolean isURLSupported(String url) {
    +<span class="nc" id="L121">        boolean supported = false;</span>
    +<span class="nc" id="L122">        URI toTest = null;</span>
    +        
    +<span class="nc bnc" id="L124" title="All 2 branches missed.">        if ((toTest = URIUtills.toURI(url)) == null) {</span>
    +<span class="nc" id="L125">        	logger.warn(&quot;Error converting to URI: &quot; + url);</span>
    +<span class="nc" id="L126">        	return false;</span>
    +        }
    +
    +<span class="nc" id="L129">        logger.debug(&quot;Checking URI: &quot; + toTest);</span>
    +<span class="nc bnc" id="L130" title="All 2 branches missed.">        for (String scheme : DataAccessorFactory.getSupportedSchemes()) {</span>
    +<span class="nc" id="L131">        	logger.debug(&quot;Trying scheme: &quot; + scheme);</span>
    +<span class="nc bnc" id="L132" title="All 2 branches missed.">            if (scheme.equals(toTest.getScheme())) {</span>
    +<span class="nc" id="L133">                supported = true;</span>
    +<span class="nc" id="L134">                logger.debug(&quot;Found scheme: &quot; + scheme);</span>
    +<span class="nc" id="L135">                break;</span>
    +            }
    +        }
    +        
    +<span class="nc" id="L139">        return supported;</span>
    +    }
    +    
    +    /**
    +     * Tell the TDS which projects are installed.
    +     */
    +    private void stuffer() {
    +<span class="nc" id="L146">        logger.info(&quot;TDS is now running the stuffer.&quot;);</span>
    +<span class="nc" id="L147">        DBService db = AlitheiaCore.getInstance().getDBService();</span>
    +        
    +<span class="nc bnc" id="L149" title="All 4 branches missed.">        if (db != null &amp;&amp; db.startDBSession()) {</span>
    +            
    +<span class="nc bnc" id="L151" title="All 2 branches missed.">            for (StoredProject p : ClusterNode.thisNode().getProjects()) {</span>
    +<span class="nc" id="L152">                addAccessor(p.getId(), p.getName(), p.getBtsUrl(), </span>
    +<span class="nc" id="L153">                        p.getMailUrl(), p.getScmUrl());</span>
    +            }
    +<span class="nc" id="L155">            db.commitDBSession();</span>
    +        }
    +
    +<span class="nc" id="L158">        logger.info(&quot;TDS Stuffer is finished.&quot;);</span>
    +<span class="nc" id="L159">    }</span>
    +
    +	@Override
    +	public void shutDown() {
    +		
    +<span class="nc" id="L164">	}</span>
    +
    +	@Override
    +	public boolean startUp() {
    +<span class="nc" id="L168">        ProjectDataAccessorImpl.logger = logger;</span>
    +
    +        //Wake up the DataAccessorFactory
    +<span class="nc" id="L171">        new DataAccessorFactory(logger);</span>
    +
    +        //Init accessor store
    +<span class="nc" id="L174">        accessorPool = new ConcurrentHashMap&lt;Long,ProjectDataAccessorImpl&gt;();</span>
    +<span class="nc" id="L175">        accessorClaims = new ConcurrentHashMap&lt;ProjectDataAccessorImpl, Integer&gt;();</span>
    +       
    +<span class="nc" id="L177">        logger.info(&quot;TDS service created.&quot;);</span>
    +        
    +<span class="nc" id="L179">		stuffer();</span>
    +<span class="nc" id="L180">		return true;</span>
    +	}
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L185">	    this.logger = l;</span>
    +<span class="nc" id="L186">	}</span>
    +
    +    @Override
    +    public void registerPlugin(String[] protocols, Class&lt;? extends DataAccessor&gt; clazz) {
    +<span class="nc bnc" id="L190" title="All 2 branches missed.">        for (String protocol : protocols) {</span>
    +<span class="nc" id="L191">            DataAccessorFactory.addImplementation(protocol, clazz);</span>
    +        }
    +<span class="nc" id="L193">    }</span>
    +
    +    @Override
    +    public void unregisterPlugin(Class&lt;? extends DataAccessor&gt; clazz) {
    +<span class="nc" id="L197">        DataAccessorFactory.removeImplementation(clazz);</span>
    +<span class="nc" id="L198">    }</span>
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/index.html
    new file mode 100644
    index 000000000..a8fa6bc20
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.tds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.tds</span></div><h1>eu.sqooss.impl.service.tds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">765 of 765</td><td class="ctr2">0%</td><td class="bar">52 of 52</td><td class="ctr2">0%</td><td class="ctr1">52</td><td class="ctr2">52</td><td class="ctr1">167</td><td class="ctr2">167</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="TDSServiceImpl.html" class="el_class">TDSServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="341" alt="341"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">23</td><td class="ctr2" id="g0">23</td><td class="ctr1" id="h0">66</td><td class="ctr2" id="i0">66</td><td class="ctr1" id="j0">13</td><td class="ctr2" id="k0">13</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="DataAccessorFactory.html" class="el_class">DataAccessorFactory</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="74" height="10" title="212" alt="212"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="84" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">13</td><td class="ctr2" id="g2">13</td><td class="ctr1" id="h2">49</td><td class="ctr2" id="i2">49</td><td class="ctr1" id="j2">6</td><td class="ctr2" id="k2">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="ProjectDataAccessorImpl.html" class="el_class">ProjectDataAccessorImpl</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="74" height="10" title="212" alt="212"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="108" height="10" title="18" alt="18"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">52</td><td class="ctr2" id="i1">52</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/index.source.html
    new file mode 100644
    index 000000000..74abbf096
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.tds/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.tds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.tds</span></div><h1>eu.sqooss.impl.service.tds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">765 of 765</td><td class="ctr2">0%</td><td class="bar">52 of 52</td><td class="ctr2">0%</td><td class="ctr1">52</td><td class="ctr2">52</td><td class="ctr1">167</td><td class="ctr2">167</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="TDSServiceImpl.java.html" class="el_source">TDSServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="341" alt="341"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">23</td><td class="ctr2" id="g0">23</td><td class="ctr1" id="h0">66</td><td class="ctr2" id="i0">66</td><td class="ctr1" id="j0">13</td><td class="ctr2" id="k0">13</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="DataAccessorFactory.java.html" class="el_source">DataAccessorFactory.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="74" height="10" title="212" alt="212"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="84" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">13</td><td class="ctr2" id="g2">13</td><td class="ctr1" id="h2">49</td><td class="ctr2" id="i2">49</td><td class="ctr1" id="j2">6</td><td class="ctr2" id="k2">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="ProjectDataAccessorImpl.java.html" class="el_source">ProjectDataAccessorImpl.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="74" height="10" title="212" alt="212"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="108" height="10" title="18" alt="18"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">16</td><td class="ctr1" id="h1">52</td><td class="ctr2" id="i1">52</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater$1.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater$1.html
    new file mode 100644
    index 000000000..17852fcee
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater$1.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>OhlohUpdater.new FilenameFilter() {...}</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_class">OhlohUpdater.new FilenameFilter() {...}</span></div><h1>OhlohUpdater.new FilenameFilter() {...}</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">10 of 10</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="OhlohUpdater.java.html#L1" class="el_method">{...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="OhlohUpdater.java.html#L103" class="el_method">accept(File, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater$2.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater$2.html
    new file mode 100644
    index 000000000..636592558
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater$2.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>OhlohUpdater.new EntityResolver() {...}</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_class">OhlohUpdater.new EntityResolver() {...}</span></div><h1>OhlohUpdater.new EntityResolver() {...}</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">17 of 17</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="OhlohUpdater.java.html#L118" class="el_method">resolveEntity(String, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="11" alt="11"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="OhlohUpdater.java.html#L1" class="el_method">{...}</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater.html
    new file mode 100644
    index 000000000..e3a6f0dbc
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>OhlohUpdater</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_class">OhlohUpdater</span></div><h1>OhlohUpdater</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">246 of 246</td><td class="ctr2">0%</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">57</td><td class="ctr2">57</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="OhlohUpdater.java.html#L84" class="el_method">run()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="228" alt="228"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">49</td><td class="ctr2" id="i0">49</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="OhlohUpdater.java.html#L73" class="el_method">OhlohUpdater()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="3" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="OhlohUpdater.java.html#L171" class="el_method">getString(Element)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="3" height="10" title="7" alt="7"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="15" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="OhlohUpdater.java.html#L79" class="el_method">priority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="OhlohUpdater.java.html#L180" class="el_method">getJob()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater.java.html
    new file mode 100644
    index 000000000..39d009dc6
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/OhlohUpdater.java.html
    @@ -0,0 +1,183 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>OhlohUpdater.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_source">OhlohUpdater.java</span></div><h1>OhlohUpdater.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2009 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.updater;
    +
    +import java.io.ByteArrayInputStream;
    +import java.io.File;
    +import java.io.FileNotFoundException;
    +import java.io.FileReader;
    +import java.io.FilenameFilter;
    +import java.io.InputStream;
    +import java.util.Date;
    +import java.util.Iterator;
    +
    +import org.dom4j.Document;
    +import org.dom4j.DocumentException;
    +import org.dom4j.Element;
    +import org.dom4j.io.SAXReader;
    +import org.xml.sax.EntityResolver;
    +import org.xml.sax.InputSource;
    +
    +import eu.sqooss.service.db.OhlohDeveloper;
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.updater.UpdaterBaseJob;
    +import eu.sqooss.service.util.FileUtils;
    +
    +/**
    + * Parses Ohloh account description files and stores them in the OhlohDeveloper
    + * table, to be used for as an additional source of developer name-email matches
    + * when updating our own Developer table.
    + * 
    + * @see &lt;a href=&quot;https://www.ohloh.net/api/reference/account&quot;&gt;Ohloh Account API&lt;/a&gt;
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + */
    +public class OhlohUpdater extends UpdaterBaseJob {
    +    
    +    private static final String OHLOH_PATH = &quot;eu.sqooss.updater.ohloh.path&quot;;
    +    //private static final String OHLOH_PATH = &quot;eu.sqooss.updater.ohloh.path&quot;;
    +    
    +    private String ohlohPath;
    +    
    +<span class="nc" id="L73">    public OhlohUpdater() {</span>
    +<span class="nc" id="L74">        ohlohPath = System.getProperty(OHLOH_PATH); </span>
    +<span class="nc" id="L75">    }</span>
    +
    +    @Override
    +    public long priority() {
    +<span class="nc" id="L79">        return 3;</span>
    +    }
    +
    +    @Override
    +    protected void run() throws Exception {
    +<span class="nc" id="L84">        File f = null;</span>
    +        try {
    +<span class="nc bnc" id="L86" title="All 2 branches missed.">            if (ohlohPath == null) {</span>
    +<span class="nc" id="L87">                logger.error(&quot;Cannot continue without a valid path to look into&quot;);</span>
    +<span class="nc" id="L88">                throw new FileNotFoundException(&quot;Cannot find Ohloh XML files&quot;);</span>
    +            }
    +
    +<span class="nc" id="L91">            f = new File(ohlohPath);</span>
    +<span class="nc bnc" id="L92" title="All 4 branches missed.">            if (!f.exists() || !f.isDirectory()) {</span>
    +<span class="nc" id="L93">                logger.error(&quot;Path&quot; + ohlohPath</span>
    +<span class="nc" id="L94">                        + &quot; does not exist or is not a directory&quot;);</span>
    +<span class="nc" id="L95">                throw new FileNotFoundException(&quot;Cannot find Ohloh XML files&quot;);</span>
    +            }
    +        } finally {
    +            //updater.removeUpdater(p, t);
    +        }
    +        
    +<span class="nc" id="L101">        String[] files = f.list(new FilenameFilter() {</span>
    +            public boolean accept(File dir, String name) {
    +<span class="nc" id="L103">                return name.endsWith(&quot;.xml&quot;);</span>
    +            }            
    +        });
    +        
    +        
    +<span class="nc bnc" id="L108" title="All 2 branches missed.">        for (String file : files) {</span>
    +<span class="nc" id="L109">            dbs.startDBSession();</span>
    +            
    +<span class="nc" id="L111">            SAXReader reader = new SAXReader(false);</span>
    +<span class="nc" id="L112">            Document document = null;</span>
    +            
    +            //Dummy entity resolver to avoid downloading the bugzilla DTD from 
    +            //the web on parsing a bug
    +<span class="nc" id="L116">            EntityResolver resolver = new EntityResolver() {</span>
    +                public InputSource resolveEntity(String publicId, String systemId) {
    +<span class="nc" id="L118">                    InputStream in = new ByteArrayInputStream(&quot;&quot;.getBytes());</span>
    +<span class="nc" id="L119">                    return new InputSource(in);</span>
    +                }
    +            };
    +            
    +<span class="nc" id="L123">            reader.setValidation(false);</span>
    +<span class="nc" id="L124">            reader.setEntityResolver(resolver);</span>
    +<span class="nc" id="L125">            reader.setIncludeExternalDTDDeclarations(false);</span>
    +<span class="nc" id="L126">            reader.setIncludeInternalDTDDeclarations(false);</span>
    +<span class="nc" id="L127">            reader.setStripWhitespaceText(true);</span>
    +            
    +            //Parse the file
    +            try {
    +<span class="nc" id="L131">                document = reader.read(new FileReader(</span>
    +<span class="nc" id="L132">                        FileUtils.appendPath(f.getAbsolutePath(), file)));</span>
    +<span class="nc" id="L133">            } catch (FileNotFoundException fex) {</span>
    +<span class="nc" id="L134">                logger.warn(&quot;Cannot read file &quot; + f.getAbsolutePath() + </span>
    +<span class="nc" id="L135">                        fex.toString());</span>
    +<span class="nc" id="L136">                continue;</span>
    +<span class="nc" id="L137">            } catch (DocumentException e) {</span>
    +<span class="nc" id="L138">                logger.warn(&quot;Cannot parse Ohloh file &quot; + f.getAbsolutePath() </span>
    +<span class="nc" id="L139">                        + &quot; &quot; + e.getMessage());</span>
    +<span class="nc" id="L140">                continue;</span>
    +            }
    +            
    +<span class="nc" id="L143">            Element root = (Element) document.getRootElement();</span>
    +<span class="nc" id="L144">            Iterator i = root.element(&quot;result&quot;).elementIterator(&quot;account&quot;);</span>
    +            
    +<span class="nc bnc" id="L146" title="All 4 branches missed.">            if (i == null || !i.hasNext()) {</span>
    +<span class="nc" id="L147">                logger.warn(&quot;Cannot find &lt;account&gt; element in file &quot; + document.getPath());</span>
    +            }
    +            
    +<span class="nc bnc" id="L150" title="All 2 branches missed.">            while (i.hasNext()) {</span>
    +<span class="nc" id="L151">                Element account = (Element) i.next();</span>
    +<span class="nc" id="L152">                String id = getString(account.element(&quot;id&quot;));</span>
    +<span class="nc" id="L153">                String uname = getString(account.element(&quot;name&quot;));</span>
    +<span class="nc" id="L154">                String mailhash = getString(account.element(&quot;email_sha1&quot;));</span>
    +                
    +<span class="nc" id="L156">                OhlohDeveloper od = OhlohDeveloper.getByOhlohId(id);</span>
    +<span class="nc bnc" id="L157" title="All 2 branches missed.">                if (od != null) { //Exists, update fields to track updates</span>
    +<span class="nc" id="L158">                    od.setEmailHash(mailhash);</span>
    +<span class="nc" id="L159">                    od.setTimestamp(new Date());</span>
    +<span class="nc" id="L160">                    od.setUname(uname);</span>
    +<span class="nc" id="L161">                } else {</span>
    +<span class="nc" id="L162">                    od = new OhlohDeveloper(uname, mailhash, id);</span>
    +<span class="nc" id="L163">                    dbs.addRecord(od);</span>
    +                }
    +            }
    +<span class="nc" id="L166">            dbs.commitDBSession();</span>
    +        }
    +<span class="nc" id="L168">    }</span>
    +    
    +    private String getString(Element element) {
    +<span class="nc bnc" id="L171" title="All 2 branches missed.">        if (element != null) {</span>
    +<span class="nc" id="L172">            return element.getStringValue();</span>
    +        } else {
    +<span class="nc" id="L174">            return &quot;&quot;;</span>
    +        }
    +    }
    +
    +    @Override
    +    public Job getJob() {
    +<span class="nc" id="L180">        return this;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterJob.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterJob.html
    new file mode 100644
    index 000000000..d0bd1b88f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_class">UpdaterJob</span></div><h1>UpdaterJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="UpdaterJob.java.html#L49" class="el_method">UpdaterJob(MetadataUpdater)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="UpdaterJob.java.html#L60" class="el_method">run()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="UpdaterJob.java.html#L69" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="UpdaterJob.java.html#L64" class="el_method">getUpdater()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="UpdaterJob.java.html#L55" class="el_method">priority()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterJob.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterJob.java.html
    new file mode 100644
    index 000000000..f768f8031
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterJob.java.html
    @@ -0,0 +1,72 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterJob.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_source">UpdaterJob.java</span></div><h1>UpdaterJob.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2010 - Organization for Free and Open Source Software,
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.updater;
    +
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.updater.MetadataUpdater;
    +
    +/**
    + * Job that encapsulates an updater run.
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + *
    + */
    +public class UpdaterJob extends Job {
    +
    +    MetadataUpdater mu;
    +    
    +<span class="nc" id="L49">    public UpdaterJob(MetadataUpdater updater) {</span>
    +<span class="nc" id="L50">        mu = updater;</span>
    +<span class="nc" id="L51">    }</span>
    +    
    +    @Override
    +    public final long priority() {
    +<span class="nc" id="L55">        return 0;</span>
    +    }
    +
    +    @Override
    +    protected void run() throws Exception {
    +<span class="nc" id="L60">        mu.update();</span>
    +<span class="nc" id="L61">    }</span>
    +    
    +    public MetadataUpdater getUpdater() {
    +<span class="nc" id="L64">        return mu;</span>
    +    }
    +    
    +    @Override
    +    public String toString() {
    +<span class="nc" id="L69">        return mu.toString();</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl$DependencyJob.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl$DependencyJob.html
    new file mode 100644
    index 000000000..74bcec02d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl$DependencyJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterServiceImpl.DependencyJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_class">UpdaterServiceImpl.DependencyJob</span></div><h1>UpdaterServiceImpl.DependencyJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">27 of 27</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="UpdaterServiceImpl.java.html#L591" class="el_method">UpdaterServiceImpl.DependencyJob(UpdaterServiceImpl, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="UpdaterServiceImpl.java.html#L597" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="UpdaterServiceImpl.java.html#L590" class="el_method">UpdaterServiceImpl.DependencyJob(UpdaterServiceImpl)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="UpdaterServiceImpl.java.html#L592" class="el_method">priority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="26" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="UpdaterServiceImpl.java.html#L593" class="el_method">run()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="13" height="10" title="1" alt="1"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl.html
    new file mode 100644
    index 000000000..f49da138b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_class">UpdaterServiceImpl</span></div><h1>UpdaterServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,235 of 1,235</td><td class="ctr2">0%</td><td class="bar">134 of 134</td><td class="ctr2">0%</td><td class="ctr1">87</td><td class="ctr2">87</td><td class="ctr1">259</td><td class="ctr2">259</td><td class="ctr1">20</td><td class="ctr2">20</td></tr></tfoot><tbody><tr><td id="a18"><a href="UpdaterServiceImpl.java.html#L301" class="el_method">update(StoredProject, UpdaterService.UpdaterStage, Updater)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="580" alt="580"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="70" alt="70"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">36</td><td class="ctr2" id="g0">36</td><td class="ctr1" id="h0">124</td><td class="ctr2" id="i0">124</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="UpdaterServiceImpl.java.html#L549" class="el_method">jobStateChanged(Job, Job.State)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="25" height="10" title="121" alt="121"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="30" height="10" title="18" alt="18"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">10</td><td class="ctr2" id="g1">10</td><td class="ctr1" id="h1">25</td><td class="ctr2" id="i1">25</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="UpdaterServiceImpl.java.html#L155" class="el_method">getUpdaters(StoredProject)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="18" height="10" title="89" alt="89"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h2">16</td><td class="ctr2" id="i2">16</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="UpdaterServiceImpl.java.html#L274" class="el_method">checkDependencies(Updater)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="16" height="10" title="82" alt="82"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h3">15</td><td class="ctr2" id="i3">15</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a8"><a href="UpdaterServiceImpl.java.html#L91" class="el_method">registerUpdaterService(Class)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="15" height="10" title="73" alt="73"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">14</td><td class="ctr2" id="i4">14</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="UpdaterServiceImpl.java.html#L240" class="el_method">getUpdatersByProtocol(String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="9" height="10" title="45" alt="45"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="10" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h6">7</td><td class="ctr2" id="i6">7</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a12"><a href="UpdaterServiceImpl.java.html#L216" class="el_method">startUp()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="7" height="10" title="35" alt="35"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f11">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h5">10</td><td class="ctr2" id="i5">10</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="UpdaterServiceImpl.java.html#L185" class="el_method">getUpdaters(StoredProject, UpdaterService.UpdaterStage)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="5" height="10" title="28" alt="28"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h9">5</td><td class="ctr2" id="i9">5</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="UpdaterServiceImpl.java.html#L255" class="el_method">getUpdatersByStage(UpdaterService.UpdaterStage)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="5" height="10" title="28" alt="28"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h10">5</td><td class="ctr2" id="i10">5</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a15"><a href="UpdaterServiceImpl.java.html#L144" class="el_method">update(StoredProject, String)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="4" height="10" title="23" alt="23"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d12"><img src="../../../.resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f12">2</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h11">5</td><td class="ctr2" id="i11">5</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a1"><a href="UpdaterServiceImpl.java.html#L266" class="el_method">getUpdaterByMnemonic(String)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="4" height="10" title="22" alt="22"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h12">4</td><td class="ctr2" id="i12">4</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a9"><a href="UpdaterServiceImpl.java.html#L532" class="el_method">removeUpdater(StoredProject, Updater)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="4" height="10" title="22" alt="22"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h7">7</td><td class="ctr2" id="i7">7</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a6"><a href="UpdaterServiceImpl.java.html#L196" class="el_method">isUpdateRunning(StoredProject, Updater)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="4" height="10" title="21" alt="21"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e12">0%</td><td class="ctr1" id="f9">3</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h8">6</td><td class="ctr2" id="i8">6</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a13"><a href="UpdaterServiceImpl.java.html#L117" class="el_method">unregisterUpdaterService(Class)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="4" height="10" title="20" alt="20"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">3</td><td class="ctr2" id="i14">3</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a16"><a href="UpdaterServiceImpl.java.html#L136" class="el_method">update(StoredProject, Updater)</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="2" height="10" title="14" alt="14"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d13"><img src="../../../.resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="e13">0%</td><td class="ctr1" id="f13">2</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h15">3</td><td class="ctr2" id="i15">3</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a19"><a href="UpdaterServiceImpl.java.html#L72" class="el_method">UpdaterServiceImpl()</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="2" height="10" title="12" alt="12"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h13">4</td><td class="ctr2" id="i13">4</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a10"><a href="UpdaterServiceImpl.java.html#L234" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="1" height="10" title="7" alt="7"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">3</td><td class="ctr2" id="i16">3</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a14"><a href="UpdaterServiceImpl.java.html#L124" class="el_method">update(StoredProject)</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="1" height="10" title="6" alt="6"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a17"><a href="UpdaterServiceImpl.java.html#L130" class="el_method">update(StoredProject, UpdaterService.UpdaterStage)</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="1" height="10" title="6" alt="6"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a11"><a href="UpdaterServiceImpl.java.html#L212" class="el_method">shutDown()</a></td><td class="bar" id="b19"/><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl.java.html
    new file mode 100644
    index 000000000..4d71252b3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/UpdaterServiceImpl.java.html
    @@ -0,0 +1,601 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.updater</a> &gt; <span class="el_source">UpdaterServiceImpl.java</span></div><h1>UpdaterServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.updater;
    +
    +import java.net.URI;
    +import java.util.ArrayList;
    +import java.util.Arrays;
    +import java.util.Collection;
    +import java.util.HashMap;
    +import java.util.HashSet;
    +import java.util.LinkedList;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Set;
    +import java.util.concurrent.ConcurrentHashMap;
    +import java.util.concurrent.ConcurrentMap;
    +
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.ServiceReference;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.cluster.ClusterNodeActionException;
    +import eu.sqooss.service.cluster.ClusterNodeService;
    +import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.scheduler.Job.State;
    +import eu.sqooss.service.scheduler.JobStateListener;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +import eu.sqooss.service.tds.InvalidAccessorException;
    +import eu.sqooss.service.tds.ProjectAccessor;
    +import eu.sqooss.service.tds.TDSService;
    +import eu.sqooss.service.updater.MetadataUpdater;
    +import eu.sqooss.service.updater.Updater;
    +import eu.sqooss.service.updater.UpdaterService;
    +import eu.sqooss.service.util.BidiMap;
    +import eu.sqooss.service.util.GraphTS;
    +
    +<span class="nc" id="L72">public class UpdaterServiceImpl implements UpdaterService, JobStateListener {</span>
    +
    +<span class="nc" id="L74">    private Logger logger = null;</span>
    +<span class="nc" id="L75">    private AlitheiaCore core = null;</span>
    +    private BundleContext context;
    +<span class="nc" id="L77">    private DBService dbs = null;</span>
    +    
    +    /* Maps project-ids to the jobs that have been scheduled for 
    +     * each update target*/
    +    private ConcurrentMap&lt;Long,Map&lt;Updater, UpdaterJob&gt;&gt; scheduledUpdates;
    +    
    +    /* List of registered updaters */
    +    private BidiMap&lt;Updater, Class&lt;? extends MetadataUpdater&gt;&gt; updaters;
    +
    +    /* UpdaterService interface methods*/
    +    /** {@inheritDoc} */
    +    @Override
    +    public void registerUpdaterService(Class&lt;? extends MetadataUpdater&gt; clazz) {
    +
    +<span class="nc" id="L91">        Updater u = clazz.getAnnotation(Updater.class);</span>
    +
    +<span class="nc bnc" id="L93" title="All 2 branches missed.">        if (u == null) {</span>
    +<span class="nc" id="L94">            logger.error(&quot;Class &quot; + clazz + &quot; is missing required annotation&quot; +</span>
    +<span class="nc" id="L95">            		&quot; @Updater&quot;);</span>
    +<span class="nc" id="L96">            return;</span>
    +        }
    +
    +<span class="nc bnc" id="L99" title="All 2 branches missed.">        if (getUpdaterByMnemonic(u.mnem()) != null) {</span>
    +<span class="nc" id="L100">            logger.error(&quot;Mnemonic already used by updater &quot; </span>
    +<span class="nc" id="L101">                    + updaters.get(getUpdaterByMnemonic(u.mnem())));</span>
    +<span class="nc" id="L102">            return;</span>
    +        }
    +        
    +        
    +        
    +<span class="nc" id="L107">        updaters.put(u, clazz);</span>
    +            
    +<span class="nc" id="L109">        logger.info(&quot;Registering updater class &quot; + clazz.getCanonicalName() + </span>
    +<span class="nc" id="L110">                &quot; for protocols (&quot; + Arrays.toString(u.protocols()) +</span>
    +<span class="nc" id="L111">                &quot;) and stage &quot; + u.stage());</span>
    +<span class="nc" id="L112">    }</span>
    +
    +    /** {@inheritDoc} */
    +    @Override
    +    public void unregisterUpdaterService(Class&lt;? extends MetadataUpdater&gt; clazz) {
    +<span class="nc" id="L117">        updaters.remove(updaters.getKey(clazz));</span>
    +<span class="nc" id="L118">        logger.info(&quot;Unregistering updater class &quot; + clazz.getCanonicalName());</span>
    +<span class="nc" id="L119">    }</span>
    +    
    +    /**{@inheritDoc}*/
    +    @Override
    +    public boolean update(StoredProject project) {
    +<span class="nc" id="L124">        return update(project, null, null);</span>
    +    }
    +    
    +    /**{@inheritDoc}*/
    +    @Override
    +    public boolean update(StoredProject project, UpdaterStage stage) {
    +<span class="nc" id="L130">        return update(project, stage, null);</span>
    +    }
    +    
    +    /**{@inheritDoc}*/
    +    @Override
    +    public boolean update(StoredProject sp, Updater u) {
    +<span class="nc bnc" id="L136" title="All 2 branches missed.">        if (!getUpdaters(sp).contains(u))</span>
    +<span class="nc" id="L137">            return false;</span>
    +<span class="nc" id="L138">        return update(sp, null, u);</span>
    +    }
    +    
    +    /**{@inheritDoc}*/
    +    @Override
    +    public boolean update(StoredProject sp, String updater) {
    +<span class="nc" id="L144">        Updater u = getUpdaterByMnemonic(updater);</span>
    +<span class="nc bnc" id="L145" title="All 2 branches missed.">        if (u == null) {</span>
    +<span class="nc" id="L146">            logger.warn(&quot;No such updater: &quot; + updater);</span>
    +<span class="nc" id="L147">            return false;</span>
    +        }
    +<span class="nc" id="L149">        return update(sp, u);</span>
    +    }
    +
    +    /**{@inheritDoc}*/
    +    @Override
    +    public Set&lt;Updater&gt; getUpdaters(StoredProject project) {
    +<span class="nc" id="L155">        Set&lt;Updater&gt; upds = new HashSet&lt;Updater&gt;();</span>
    +<span class="nc" id="L156">        TDSService tds = AlitheiaCore.getInstance().getTDSService();</span>
    +<span class="nc" id="L157">        ProjectAccessor pa = tds.getAccessor(project.getId());</span>
    +<span class="nc" id="L158">        Set&lt;URI&gt; schemes = new HashSet&lt;URI&gt;();</span>
    +
    +        //Import phase updaters
    +        try {
    +<span class="nc" id="L162">            schemes.addAll(pa.getSCMAccessor().getSupportedURLSchemes());</span>
    +<span class="nc" id="L163">            schemes.addAll(pa.getBTSAccessor().getSupportedURLSchemes());</span>
    +<span class="nc" id="L164">            schemes.addAll(pa.getMailAccessor().getSupportedURLSchemes());</span>
    +<span class="nc" id="L165">        } catch (InvalidAccessorException e) {</span>
    +<span class="nc" id="L166">            logger.warn(&quot;Project &quot; + project</span>
    +<span class="nc" id="L167">                    + &quot; does not include a Mail accessor: &quot; + e.getMessage());</span>
    +        }
    +
    +<span class="nc bnc" id="L170" title="All 2 branches missed.">        for (URI uri : schemes) {</span>
    +<span class="nc" id="L171">            upds.addAll(getUpdatersByProtocol(uri.getScheme()));</span>
    +        }
    +        
    +        //Other updaters
    +<span class="nc" id="L175">        upds.addAll(getUpdatersByStage(UpdaterStage.PARSE));</span>
    +<span class="nc" id="L176">        upds.addAll(getUpdatersByStage(UpdaterStage.INFERENCE));</span>
    +<span class="nc" id="L177">        upds.addAll(getUpdatersByStage(UpdaterStage.DEFAULT));</span>
    +        
    +<span class="nc" id="L179">        return upds;</span>
    +    }
    +    
    +    /**{@inheritDoc}*/
    +    @Override
    +    public Set&lt;Updater&gt; getUpdaters(StoredProject sp, UpdaterStage st) {
    +<span class="nc" id="L185">        Set&lt;Updater&gt; upd = new HashSet&lt;Updater&gt;();</span>
    +        
    +<span class="nc bnc" id="L187" title="All 2 branches missed.">        for (Updater updater : getUpdaters(sp)) {</span>
    +<span class="nc bnc" id="L188" title="All 2 branches missed.">            if (updater.stage().equals(st))</span>
    +<span class="nc" id="L189">                upd.add(updater);</span>
    +        }
    +<span class="nc" id="L191">        return upd;</span>
    +    }
    +
    +    /** {@inheritDoc}}*/
    +    public synchronized boolean isUpdateRunning(StoredProject p, Updater u) {
    +<span class="nc" id="L196">        Map&lt;Updater, UpdaterJob&gt; m = scheduledUpdates.get(p.getId());</span>
    +<span class="nc bnc" id="L197" title="All 2 branches missed.">        if (m == null) {</span>
    +            // Nothing in progress
    +<span class="nc" id="L199">            return false;</span>
    +        }
    +
    +<span class="nc bnc" id="L202" title="All 2 branches missed.">        if (m.keySet().contains(u)) {</span>
    +<span class="nc" id="L203">            return true;</span>
    +        }
    +<span class="nc" id="L205">        return false;</span>
    +    }
    +    
    +    /* AlitheiaCoreService interface methods*/
    +    @Override
    +    public void shutDown() {
    +        
    +<span class="nc" id="L212">    }</span>
    +
    +    @Override
    +    public boolean startUp() {
    +<span class="nc" id="L216">        core = AlitheiaCore.getInstance();</span>
    +<span class="nc bnc" id="L217" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L218">            logger.info(&quot;Got a valid reference to the logger&quot;);</span>
    +<span class="nc" id="L219">        } else {</span>
    +<span class="nc" id="L220">            System.out.println(&quot;ERROR: Updater got no logger&quot;);</span>
    +        }
    +        
    +<span class="nc" id="L223">        dbs = core.getDBService();</span>
    +        
    +<span class="nc" id="L225">        updaters = new BidiMap&lt;Updater, Class&lt;? extends MetadataUpdater&gt;&gt;();</span>
    +<span class="nc" id="L226">        scheduledUpdates = new ConcurrentHashMap&lt;Long, Map&lt;Updater, UpdaterJob&gt;&gt;();</span>
    +        
    +<span class="nc" id="L228">        logger.info(&quot;Succesfully started updater service&quot;);</span>
    +<span class="nc" id="L229">        return true;</span>
    +    }
    +
    +    @Override
    +    public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L234">        this.context = bc;</span>
    +<span class="nc" id="L235">        this.logger = l;</span>
    +<span class="nc" id="L236">    }</span>
    +
    +    /*Private service methods*/
    +    private List&lt;Updater&gt; getUpdatersByProtocol(String protocol) {
    +<span class="nc" id="L240">        List&lt;Updater&gt; upds = new ArrayList&lt;Updater&gt;();</span>
    +        
    +<span class="nc bnc" id="L242" title="All 2 branches missed.">        for (Updater u : updaters.keySet()) {</span>
    +<span class="nc bnc" id="L243" title="All 2 branches missed.">            for (String p : u.protocols()) {</span>
    +<span class="nc bnc" id="L244" title="All 2 branches missed.">                if (protocol.equals(p)) {</span>
    +<span class="nc" id="L245">                    upds.add(u);</span>
    +<span class="nc" id="L246">                    break;</span>
    +                }
    +            }
    +        }
    +        
    +<span class="nc" id="L251">        return upds;</span>
    +    }
    + 
    +    private List&lt;Updater&gt; getUpdatersByStage(UpdaterStage u) {
    +<span class="nc" id="L255">        List&lt;Updater&gt; upds = new ArrayList&lt;Updater&gt;();</span>
    +       
    +<span class="nc bnc" id="L257" title="All 2 branches missed.">        for (Updater upd : updaters.keySet()) {</span>
    +<span class="nc bnc" id="L258" title="All 2 branches missed.">            if (upd.stage().equals(u))</span>
    +<span class="nc" id="L259">                upds.add(upd);</span>
    +        }
    +        
    +<span class="nc" id="L262">        return upds;</span>
    +    }
    +    
    +    private Updater getUpdaterByMnemonic(String updater) {
    +<span class="nc bnc" id="L266" title="All 2 branches missed.">        for (Updater upd : updaters.keySet()) {</span>
    +<span class="nc bnc" id="L267" title="All 2 branches missed.">            if (upd.mnem().equals(updater))</span>
    +<span class="nc" id="L268">                return upd;</span>
    +        }
    +<span class="nc" id="L270">        return null;</span>
    +    }
    +
    +    private boolean checkDependencies(Updater upd) {
    +<span class="nc" id="L274">        boolean met = true;</span>
    +<span class="nc bnc" id="L275" title="All 2 branches missed.">        for (String dep : upd.dependencies()) {</span>
    +<span class="nc" id="L276">            boolean found = false;</span>
    +<span class="nc bnc" id="L277" title="All 2 branches missed.">            for (Updater other : updaters.keySet()) {</span>
    +<span class="nc bnc" id="L278" title="All 2 branches missed.">                if (dep.equals(other.mnem())) {</span>
    +<span class="nc bnc" id="L279" title="All 2 branches missed.">                    if (other.stage().equals(upd.stage())) {</span>
    +<span class="nc" id="L280">                        found = true;</span>
    +<span class="nc" id="L281">                        break;</span>
    +                    } else {
    +<span class="nc" id="L283">                        logger.error(&quot;Updater &lt;&quot; + upd.mnem() + &quot;&gt;-&quot; + </span>
    +<span class="nc" id="L284">                                upd.stage() + </span>
    +<span class="nc" id="L285">                                &quot; depends on other stage updater &lt;&quot; </span>
    +<span class="nc" id="L286">                                + other.mnem() + &quot;&gt;-&quot; + other.stage());</span>
    +<span class="nc" id="L287">                        return false;</span>
    +                    }
    +                }
    +            }
    +<span class="nc" id="L291">            met &amp;= found;</span>
    +        }
    +<span class="nc" id="L293">        return met;</span>
    +    }
    +    
    +    /**
    +     * Add an update job of the given type or the specific updater for the project. 
    +     */
    +    private boolean update(StoredProject project, UpdaterStage stage, Updater updater) {
    +        
    +<span class="nc" id="L301">        ClusterNodeService cns = null;</span>
    +        
    +<span class="nc bnc" id="L303" title="All 2 branches missed.">        if (project == null) {</span>
    +<span class="nc" id="L304">            logger.info(&quot;Bad project name for update.&quot;);</span>
    +<span class="nc" id="L305">            return false;</span>
    +        }     
    +        
    +         /// ClusterNode Checks - Clone to MetricActivatorImpl
    +<span class="nc" id="L309">        cns = core.getClusterNodeService();</span>
    +<span class="nc bnc" id="L310" title="All 2 branches missed.">        if (cns==null) {</span>
    +<span class="nc" id="L311">            logger.warn(&quot;ClusterNodeService reference not found &quot; +</span>
    +            		&quot;- ClusterNode assignment checks will be ignored&quot;);
    +<span class="nc" id="L313">        } else {            </span>
    +           
    +<span class="nc" id="L315">            ClusterNode node = project.getClusternode();</span>
    +            
    +<span class="nc bnc" id="L317" title="All 2 branches missed.">            if (node == null) {</span>
    +<span class="nc" id="L318">                logger.warn(&quot;Project &quot; + project + </span>
    +<span class="nc" id="L319">                        &quot; not assigned to any cluster node&quot;);</span>
    +<span class="nc" id="L320">            } else { </span>
    +                // project is assigned , check if it is assigned to this Node
    +<span class="nc bnc" id="L322" title="All 2 branches missed.">                if (!cns.isProjectAssigned(project)) {</span>
    +<span class="nc" id="L323">                    logger.warn(&quot;Project &quot; + project.getName() + </span>
    +<span class="nc" id="L324">                            &quot; is not assigned to this ClusterNode - Ignoring update&quot;);</span>
    +                    // TODO: Clustering - further implementation:
    +                    // If needed, forward Update to the appropriate ClusterNode!
    +<span class="nc" id="L327">                    return true;   </span>
    +                }                
    +            }
    +        }  
    +       
    +<span class="nc" id="L332">        logger.info(&quot;Request to update project:&quot; + project.getName()  </span>
    +<span class="nc bnc" id="L333" title="All 2 branches missed.">                + &quot; stage:&quot; + (stage == null?stage:&quot;all&quot;) </span>
    +<span class="nc bnc" id="L334" title="All 2 branches missed.">                + &quot; updater:&quot; + (updater == null?updater:&quot;all&quot;));</span>
    +        
    +        //Construct a list of updater stages to iterate later
    +<span class="nc" id="L337">        List&lt;UpdaterStage&gt; stages = new ArrayList&lt;UpdaterStage&gt;(); </span>
    +        
    +<span class="nc bnc" id="L339" title="All 2 branches missed.">        if (updater == null) {</span>
    +<span class="nc bnc" id="L340" title="All 2 branches missed.">            if (stage == null) {</span>
    +<span class="nc" id="L341">                stages.add(UpdaterStage.IMPORT);</span>
    +<span class="nc" id="L342">                stages.add(UpdaterStage.PARSE);</span>
    +<span class="nc" id="L343">                stages.add(UpdaterStage.INFERENCE);</span>
    +<span class="nc" id="L344">                stages.add(UpdaterStage.DEFAULT);</span>
    +<span class="nc" id="L345">            } else {</span>
    +<span class="nc" id="L346">                stages.add(stage);</span>
    +            }
    +<span class="nc" id="L348">        } else {</span>
    +<span class="nc" id="L349">            stages.add(updater.stage());</span>
    +        }
    +        
    +        /*
    +         * For each update stage add updaters in topologically sorted order. Add
    +         * dependencies to jobs to serialize execution between updaters in the
    +         * same stage and add fake dependency jobs to serialise execution among
    +         * stages. The result of this loop is a list of jobs with properly set
    +         * dependencies to ensure correct execution.
    +         */
    +<span class="nc" id="L359">        List&lt;Job&gt; jobs = new LinkedList&lt;Job&gt;();</span>
    +<span class="nc" id="L360">        BidiMap&lt;Updater, Job&gt; toSchedule = new BidiMap&lt;Updater, Job&gt;();</span>
    +<span class="nc" id="L361">        DependencyJob oldDepJob = null;</span>
    +        try {
    +<span class="nc bnc" id="L363" title="All 2 branches missed.">            for (UpdaterStage us : stages) {</span>
    +                
    +                // Topologically sort updaters within the same stage
    +<span class="nc" id="L366">                List&lt;Updater&gt; updForStage = new ArrayList&lt;Updater&gt;();</span>
    +<span class="nc" id="L367">                updForStage.addAll(getUpdaters(project, us));</span>
    +<span class="nc" id="L368">                GraphTS&lt;Updater&gt; graph = </span>
    +<span class="nc" id="L369">                    new GraphTS&lt;Updater&gt;(updForStage.size());</span>
    +<span class="nc" id="L370">                BidiMap&lt;Updater, Integer&gt; idx = </span>
    +<span class="nc" id="L371">                    new BidiMap&lt;Updater, Integer&gt;();</span>
    +
    +                //Construct a adjacency matrix for dependencies
    +<span class="nc bnc" id="L374" title="All 2 branches missed.">                for (Updater u : updForStage) {</span>
    +<span class="nc bnc" id="L375" title="All 2 branches missed.">                    if (!checkDependencies(u))</span>
    +<span class="nc" id="L376">                        return false;</span>
    +<span class="nc bnc" id="L377" title="All 2 branches missed.">                    if (!idx.containsKey(u)) {</span>
    +<span class="nc" id="L378">                        int n = graph.addVertex(u);</span>
    +<span class="nc" id="L379">                        idx.put(u, n);</span>
    +                    }
    +
    +<span class="nc bnc" id="L382" title="All 2 branches missed.">                    for (String dependency : u.dependencies()) {</span>
    +<span class="nc" id="L383">                        Updater dep = getUpdaterByMnemonic(dependency);</span>
    +
    +                        // Updaters are allowed to introduce self depedencies
    +<span class="nc bnc" id="L386" title="All 2 branches missed.">                        if (u.equals(dep)) {</span>
    +<span class="nc" id="L387">                            continue;</span>
    +                        }
    +
    +<span class="nc bnc" id="L390" title="All 2 branches missed.">                        if (!idx.containsKey(dep)) {</span>
    +<span class="nc" id="L391">                            int n = graph.addVertex(dep);</span>
    +<span class="nc" id="L392">                            idx.put(dep, n);</span>
    +                        }
    +<span class="nc" id="L394">                        graph.addEdge(idx.get(u), idx.get(dep));</span>
    +                    }
    +                }
    +
    +                // Topo-sort
    +<span class="nc" id="L399">                updForStage = graph.topo();</span>
    +
    +                // We now have updaters in correct execution order
    +<span class="nc" id="L402">                DependencyJob depJob = new DependencyJob(us.toString());</span>
    +
    +<span class="nc" id="L404">                List&lt;String&gt; deps = new ArrayList&lt;String&gt;();</span>
    +<span class="nc bnc" id="L405" title="All 2 branches missed.">                if (updater != null)</span>
    +<span class="nc" id="L406">                    deps = Arrays.asList(updater.dependencies());</span>
    +
    +<span class="nc bnc" id="L408" title="All 2 branches missed.">                for (Updater u : updForStage) {</span>
    +                    /*
    +                     * Ignore the current in case we have an updater specified
    +                     * as argument unless the updater is the same as the
    +                     * argument of the current updater is a dependency to the
    +                     * one we have as argument :-)
    +                     */
    +<span class="nc bnc" id="L415" title="All 2 branches missed.">                    if (updater != null &amp;&amp;</span>
    +<span class="nc bnc" id="L416" title="All 2 branches missed.">                            !updater.equals(u) &amp;&amp;</span>
    +<span class="nc bnc" id="L417" title="All 2 branches missed.">                            !deps.contains(u.mnem())) {</span>
    +<span class="nc" id="L418">                            continue;</span>
    +                    }
    +
    +                    // Create an updater job
    +<span class="nc" id="L422">                    MetadataUpdater upd = updaters.get(u).newInstance();</span>
    +<span class="nc" id="L423">                    upd.setUpdateParams(project, logger);</span>
    +
    +<span class="nc" id="L425">                    UpdaterJob uj = null;</span>
    +                    /*
    +                     * If an update has already been scheduled for a specific
    +                     * updater, just re-use this job for dependency tracking.
    +                     * Also put the job in the queue of jobs that are about to
    +                     * be scheduled to allow other jobs to declare dependencies
    +                     * to it. If in the mean time the dependent job finishes
    +                     * execution, the dependee will just continue execution.
    +                     */
    +<span class="nc bnc" id="L434" title="All 2 branches missed.">                    if (isUpdateRunning(project, u)) {</span>
    +<span class="nc" id="L435">                        uj = scheduledUpdates.get(project.getId()).get(u);</span>
    +<span class="nc" id="L436">                    } else {</span>
    +<span class="nc" id="L437">                        uj = new UpdaterJob(upd);</span>
    +<span class="nc" id="L438">                        uj.addJobStateListener(this);</span>
    +<span class="nc" id="L439">                        toSchedule.put(u, uj);</span>
    +                    }
    +
    +                    // Add dependency to stage level job
    +<span class="nc" id="L443">                    depJob.addDependency(uj);</span>
    +<span class="nc" id="L444">                    jobs.add(uj);</span>
    +                    
    +<span class="nc bnc" id="L446" title="All 2 branches missed.">                    if (isUpdateRunning(project, u))</span>
    +<span class="nc" id="L447">                        continue;</span>
    +                    
    +                    //Add dependency to previous stage dependency job
    +<span class="nc bnc" id="L450" title="All 2 branches missed.">                    if (oldDepJob != null)</span>
    +<span class="nc" id="L451">                        uj.addDependency(oldDepJob);</span>
    +
    +                    // Add dependencies to previously scheduled jobs
    +                    // within the same stage
    +<span class="nc" id="L455">                    List&lt;Class&lt;? extends MetadataUpdater&gt;&gt; dependencies = </span>
    +<span class="nc" id="L456">                        new ArrayList&lt;Class&lt;? extends MetadataUpdater&gt;&gt;();</span>
    +
    +<span class="nc bnc" id="L458" title="All 2 branches missed.">                    for (String s : u.dependencies()) {</span>
    +<span class="nc" id="L459">                        dependencies.add(updaters.get(getUpdaterByMnemonic(s)));</span>
    +                    }
    +
    +<span class="nc bnc" id="L462" title="All 2 branches missed.">                    for (Class&lt;? extends MetadataUpdater&gt; d : dependencies) {</span>
    +<span class="nc bnc" id="L463" title="All 2 branches missed.">                        for (Job j : jobs) {</span>
    +<span class="nc bnc" id="L464" title="All 2 branches missed.">                            if (!(j instanceof UpdaterJob))</span>
    +<span class="nc" id="L465">                                continue;</span>
    +<span class="nc bnc" id="L466" title="All 2 branches missed.">                            if (((UpdaterJob) j).getUpdater().getClass().equals(d)) {</span>
    +<span class="nc" id="L467">                                uj.addDependency(j);</span>
    +                            }
    +                        }
    +                    }
    +                }
    +
    +<span class="nc bnc" id="L473" title="All 2 branches missed.">                if (oldDepJob != null)</span>
    +<span class="nc" id="L474">                    depJob.addDependency(oldDepJob);</span>
    +
    +<span class="nc" id="L476">                jobs.add(depJob);</span>
    +<span class="nc" id="L477">                oldDepJob = depJob;</span>
    +            }
    +
    +            //Enqueue jobs
    +<span class="nc" id="L481">            List&lt;Job&gt; toQueue = new ArrayList&lt;Job&gt;();</span>
    +<span class="nc bnc" id="L482" title="All 2 branches missed.">            for (Job job : jobs) {</span>
    +<span class="nc bnc" id="L483" title="All 2 branches missed.">                if (!scheduledUpdates.containsKey(project.getId()))</span>
    +<span class="nc" id="L484">                    scheduledUpdates.put(project.getId(),</span>
    +<span class="nc" id="L485">                            new HashMap&lt;Updater, UpdaterJob&gt;());</span>
    +
    +                //Don't schedule a job that has been scheduled before
    +<span class="nc" id="L488">                Collection&lt;UpdaterJob&gt; schedJobs = scheduledUpdates.get(project.getId()).values();</span>
    +<span class="nc" id="L489">                boolean dontSchedule = false;</span>
    +<span class="nc bnc" id="L490" title="All 2 branches missed.">                for (Job j : schedJobs) {</span>
    +<span class="nc bnc" id="L491" title="All 2 branches missed.">                    if (job.equals(j)) {</span>
    +<span class="nc" id="L492">                        dontSchedule = true; </span>
    +<span class="nc" id="L493">                        break;</span>
    +                    }
    +                }
    +
    +<span class="nc bnc" id="L497" title="All 2 branches missed.">                if (dontSchedule) {</span>
    +<span class="nc" id="L498">                    logger.warn(&quot;Job &quot; + job + &quot; has been scheduled before, ignoring&quot;);</span>
    +<span class="nc" id="L499">                    continue;</span>
    +                }
    +<span class="nc" id="L501">                toQueue.add(job);</span>
    +                //DependencyJobs don't need to be tracked
    +<span class="nc bnc" id="L503" title="All 2 branches missed.">                if (!(job instanceof UpdaterJob))</span>
    +<span class="nc" id="L504">                    continue;</span>
    +<span class="nc" id="L505">                scheduledUpdates.get(project.getId()).put(</span>
    +<span class="nc" id="L506">                        toSchedule.getKey(job), (UpdaterJob)job);</span>
    +            }
    +<span class="nc" id="L508">            AlitheiaCore.getInstance().getScheduler().enqueueBlock(toQueue);</span>
    +<span class="nc" id="L509">        } catch (SchedulerException e) {</span>
    +<span class="nc" id="L510">            logger.error(&quot;Cannot schedule update job(s):&quot; + e.getMessage(), e);</span>
    +<span class="nc" id="L511">            return false;</span>
    +<span class="nc" id="L512">        } catch (InstantiationException e) {</span>
    +<span class="nc" id="L513">            logger.error(&quot;Cannot instantiate updater:&quot; + e.getMessage(), e);</span>
    +<span class="nc" id="L514">            return false;</span>
    +<span class="nc" id="L515">        } catch (IllegalAccessException e) {</span>
    +<span class="nc" id="L516">            logger.error(&quot;Cannot load updater class:&quot; + e.getMessage(), e);</span>
    +<span class="nc" id="L517">            return false;</span>
    +        }
    +        
    +<span class="nc" id="L520">        return true;</span>
    +    }
    +
    +    /**
    +     * Removes an earlier jobs scheduled through addUpdate(). Multiple calls are
    +     * made to release all the claims in the set.
    +     * 
    +     * @param p project to release claims for
    +     * @param t set of targets to release
    +     */
    +    private synchronized void removeUpdater(StoredProject p, Updater u) {
    +        
    +<span class="nc bnc" id="L532" title="All 2 branches missed.">        if (p == null) {</span>
    +<span class="nc" id="L533">            logger.warn(&quot;Cannot remove an update job for a null project&quot;);</span>
    +<span class="nc" id="L534">            return;</span>
    +        }
    +        
    +<span class="nc" id="L537">        Map&lt;Updater, UpdaterJob&gt; m = scheduledUpdates.get(p.getId());</span>
    +<span class="nc bnc" id="L538" title="All 2 branches missed.">        if (m != null) {</span>
    +<span class="nc" id="L539">            m.remove(u);</span>
    +        }
    +<span class="nc" id="L541">    }</span>
    +
    +    /**
    +     * Does a bit of clean up when a job has finished (either by error or
    +     * normally)
    +     */
    +    public synchronized void jobStateChanged(Job j, State newState) {
    +
    +<span class="nc" id="L549">        Long projectId = null;</span>
    +
    +<span class="nc bnc" id="L551" title="All 2 branches missed.">        for (Long pid : scheduledUpdates.keySet()) {</span>
    +<span class="nc bnc" id="L552" title="All 2 branches missed.">            if (scheduledUpdates.get(pid).containsValue(j)) {</span>
    +<span class="nc" id="L553">                projectId = pid;</span>
    +<span class="nc" id="L554">                break;</span>
    +            }
    +        }
    +
    +<span class="nc" id="L558">        Map&lt;Updater, UpdaterJob&gt; updates = scheduledUpdates.get(projectId);</span>
    +<span class="nc" id="L559">        Updater ut = null;</span>
    +<span class="nc bnc" id="L560" title="All 2 branches missed.">        for (Updater t : updates.keySet()) {</span>
    +<span class="nc bnc" id="L561" title="All 2 branches missed.">            if (updates.get(t).equals(j)) {</span>
    +<span class="nc" id="L562">                ut = t;</span>
    +<span class="nc" id="L563">                break;</span>
    +            }
    +        }
    +
    +<span class="nc bnc" id="L567" title="All 4 branches missed.">        if (newState.equals(State.Error) || newState.equals(State.Finished)) {</span>
    +<span class="nc bnc" id="L568" title="All 2 branches missed.">            if (ut == null) {</span>
    +<span class="nc" id="L569">                logger.error(&quot;Update job finished with state &quot; + newState</span>
    +<span class="nc" id="L570">                        + &quot; but was not scheduled. That's weird...&quot;);</span>
    +<span class="nc" id="L571">                return;</span>
    +            }
    +
    +<span class="nc bnc" id="L574" title="All 2 branches missed.">            if (!dbs.isDBSessionActive())</span>
    +<span class="nc" id="L575">                dbs.startDBSession();</span>
    +<span class="nc" id="L576">            StoredProject sp = StoredProject.loadDAObyId(projectId, StoredProject.class);</span>
    +<span class="nc" id="L577">            removeUpdater(sp, ut);</span>
    +
    +<span class="nc bnc" id="L579" title="All 2 branches missed.">            if (newState.equals(State.Error)) {</span>
    +<span class="nc" id="L580">                logger.warn(ut + &quot; updater job for project &quot; + sp</span>
    +<span class="nc" id="L581">                        + &quot; did not finish properly&quot;);</span>
    +            }
    +<span class="nc" id="L583">            dbs.commitDBSession();</span>
    +        }
    +<span class="nc" id="L585">    }</span>
    +    
    +    /*Dummy jobs to ensure correct sequencing of jobs within updater stages */
    +    private class DependencyJob extends Job {
    +        private String name;
    +<span class="nc" id="L590">        private DependencyJob(){};</span>
    +<span class="nc" id="L591">        public DependencyJob(String name) { this.name = name;}</span>
    +<span class="nc" id="L592">        public long priority() {return 0;}</span>
    +<span class="nc" id="L593">        protected void run() throws Exception {}</span>
    +        
    +        @Override
    +        public String toString() {
    +<span class="nc" id="L597">            return &quot;Dependency Job: &quot; + name;</span>
    +        }
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/index.html
    new file mode 100644
    index 000000000..ab4070bee
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.updater</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.updater</span></div><h1>eu.sqooss.impl.service.updater</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,554 of 1,554</td><td class="ctr2">0%</td><td class="bar">152 of 152</td><td class="ctr2">0%</td><td class="ctr1">115</td><td class="ctr2">115</td><td class="ctr1">333</td><td class="ctr2">333</td><td class="ctr1">39</td><td class="ctr2">39</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a4"><a href="UpdaterServiceImpl.html" class="el_class">UpdaterServiceImpl</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,235" alt="1,235"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="134" alt="134"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">87</td><td class="ctr2" id="g0">87</td><td class="ctr1" id="h0">259</td><td class="ctr2" id="i0">259</td><td class="ctr1" id="j0">20</td><td class="ctr2" id="k0">20</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="OhlohUpdater.html" class="el_class">OhlohUpdater</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="23" height="10" title="246" alt="246"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="16" height="10" title="18" alt="18"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">14</td><td class="ctr2" id="g1">14</td><td class="ctr1" id="h1">57</td><td class="ctr2" id="i1">57</td><td class="ctr1" id="j1">5</td><td class="ctr2" id="k1">5</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a5"><a href="UpdaterServiceImpl$DependencyJob.html" class="el_class">UpdaterServiceImpl.DependencyJob</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="2" height="10" title="27" alt="27"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h3">5</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j2">5</td><td class="ctr2" id="k2">5</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a3"><a href="UpdaterJob.html" class="el_class">UpdaterJob</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g3">5</td><td class="ctr1" id="h2">8</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k3">5</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a1"><a href="OhlohUpdater$2.html" class="el_class">OhlohUpdater.new EntityResolver() {...}</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="1" height="10" title="17" alt="17"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">4</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j4">2</td><td class="ctr2" id="k4">2</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="OhlohUpdater$1.html" class="el_class">OhlohUpdater.new FilenameFilter() {...}</a></td><td class="bar" id="b5"/><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j5">2</td><td class="ctr2" id="k5">2</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/index.source.html
    new file mode 100644
    index 000000000..7782fea8f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.updater/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.updater</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.updater</span></div><h1>eu.sqooss.impl.service.updater</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,554 of 1,554</td><td class="ctr2">0%</td><td class="bar">152 of 152</td><td class="ctr2">0%</td><td class="ctr1">115</td><td class="ctr2">115</td><td class="ctr1">333</td><td class="ctr2">333</td><td class="ctr1">39</td><td class="ctr2">39</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a2"><a href="UpdaterServiceImpl.java.html" class="el_source">UpdaterServiceImpl.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,262" alt="1,262"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="134" alt="134"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">92</td><td class="ctr2" id="g0">92</td><td class="ctr1" id="h0">264</td><td class="ctr2" id="i0">264</td><td class="ctr1" id="j0">25</td><td class="ctr2" id="k0">25</td><td class="ctr1" id="l1">2</td><td class="ctr2" id="m1">2</td></tr><tr><td id="a0"><a href="OhlohUpdater.java.html" class="el_source">OhlohUpdater.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="25" height="10" title="273" alt="273"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="16" height="10" title="18" alt="18"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">18</td><td class="ctr2" id="g1">18</td><td class="ctr1" id="h1">61</td><td class="ctr2" id="i1">61</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l0">3</td><td class="ctr2" id="m0">3</td></tr><tr><td id="a1"><a href="UpdaterJob.java.html" class="el_source">UpdaterJob.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h2">8</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j2">5</td><td class="ctr2" id="k2">5</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AbstractView.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AbstractView.html
    new file mode 100644
    index 000000000..7f674f475
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AbstractView.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AbstractView</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">AbstractView</span></div><h1>AbstractView</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">761 of 761</td><td class="ctr2">0%</td><td class="bar">94 of 94</td><td class="ctr2">0%</td><td class="ctr1">67</td><td class="ctr2">67</td><td class="ctr1">170</td><td class="ctr2">170</td><td class="ctr1">20</td><td class="ctr2">20</td></tr></tfoot><tbody><tr><td id="a17"><a href="AbstractView.java.html#L328" class="el_method">normalInputRow(String, String, String, long)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="136" alt="136"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="20" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h2">18</td><td class="ctr2" id="i2">18</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a16"><a href="AbstractView.java.html#L371" class="el_method">normalInfoRow(String, String, long)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="102" height="10" title="116" alt="116"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="13" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h4">11</td><td class="ctr2" id="i4">11</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="AbstractView.java.html#L81" class="el_method">AbstractView(BundleContext, VelocityContext)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="91" height="10" title="104" alt="104"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f0">19</td><td class="ctr2" id="g0">19</td><td class="ctr1" id="h0">35</td><td class="ctr2" id="i0">35</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="AbstractView.java.html#L506" class="el_method">checkEmail(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="79" height="10" title="90" alt="90"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="18" alt="18"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f1">10</td><td class="ctr2" id="g1">10</td><td class="ctr1" id="h3">15</td><td class="ctr2" id="i3">15</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a15"><a href="AbstractView.java.html#L404" class="el_method">normalFieldset(String, String, StringBuilder, long)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="55" height="10" title="63" alt="63"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="26" height="10" title="8" alt="8"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h5">10</td><td class="ctr2" id="i5">10</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a19"><a href="AbstractView.java.html#L62" class="el_method">static {...}</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="37" height="10" title="43" alt="43"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h1">21</td><td class="ctr2" id="i1">21</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="AbstractView.java.html#L282" class="el_method">debugRequest(HttpServletRequest)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="30" height="10" title="35" alt="35"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h11">6</td><td class="ctr2" id="i11">6</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a2"><a href="AbstractView.java.html#L453" class="el_method">checkName(String)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="28" height="10" title="32" alt="32"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="20" height="10" title="6" alt="6"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h6">7</td><td class="ctr2" id="i6">7</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a3"><a href="AbstractView.java.html#L479" class="el_method">checkProjectName(String)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="28" height="10" title="32" alt="32"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="20" height="10" title="6" alt="6"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h7">7</td><td class="ctr2" id="i7">7</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a18"><a href="AbstractView.java.html#L302" class="el_method">sp(long)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="19" height="10" title="22" alt="22"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h12">4</td><td class="ctr2" id="i12">4</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a11"><a href="AbstractView.java.html#L187" class="el_method">getLbl(String)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="12" height="10" title="14" alt="14"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h8">7</td><td class="ctr2" id="i8">7</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a8"><a href="AbstractView.java.html#L212" class="el_method">getErr(String)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="12" height="10" title="14" alt="14"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h9">7</td><td class="ctr2" id="i9">7</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a13"><a href="AbstractView.java.html#L237" class="el_method">getMsg(String)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="12" height="10" title="14" alt="14"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f11">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h10">7</td><td class="ctr2" id="i10">7</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a14"><a href="AbstractView.java.html#L171" class="el_method">initResources(Locale)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="8" height="10" title="10" alt="10"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">4</td><td class="ctr2" id="i13">4</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a7"><a href="AbstractView.java.html#L433" class="el_method">fromString(String)</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="7" height="10" title="8" alt="8"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">3</td><td class="ctr2" id="i14">3</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a10"><a href="AbstractView.java.html#L254" class="el_method">getLabelsBundle(Locale)</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">2</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a9"><a href="AbstractView.java.html#L261" class="el_method">getErrorsBundle(Locale)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">2</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a12"><a href="AbstractView.java.html#L268" class="el_method">getMessagesBundle(Locale)</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">2</td><td class="ctr2" id="i17">2</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a6"><a href="AbstractView.java.html#L419" class="el_method">errorFieldset(StringBuilder, long)</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a4"><a href="AbstractView.java.html#L538" class="el_method">checkTDSUrl(String)</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AbstractView.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AbstractView.java.html
    new file mode 100644
    index 000000000..b1490109e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AbstractView.java.html
    @@ -0,0 +1,543 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AbstractView.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_source">AbstractView.java</span></div><h1>AbstractView.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.webadmin;
    +
    +import java.net.URI;
    +import java.util.Enumeration;
    +import java.util.Locale;
    +import java.util.MissingResourceException;
    +import java.util.ResourceBundle;
    +import java.util.regex.Pattern;
    +
    +import javax.servlet.http.HttpServletRequest;
    +
    +import org.apache.velocity.VelocityContext;
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.ServiceReference;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
    +import eu.sqooss.service.cluster.ClusterNodeService;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.logging.LogManager;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Scheduler;
    +import eu.sqooss.service.tds.TDSService;
    +import eu.sqooss.service.updater.UpdaterService;
    +
    +public abstract class AbstractView {
    +    // Core components
    +<span class="nc" id="L62">    protected static AlitheiaCore sobjCore = null;</span>
    +<span class="nc" id="L63">    protected static ServiceReference srefCore = null;</span>
    +
    +    // Critical logging components
    +<span class="nc" id="L66">    protected static LogManager sobjLogManager = null;</span>
    +<span class="nc" id="L67">    protected static Logger sobjLogger = null;</span>
    +
    +    // Service components
    +<span class="nc" id="L70">    protected static DBService sobjDB = null;</span>
    +<span class="nc" id="L71">    protected static MetricActivator compMA = null;</span>
    +<span class="nc" id="L72">    protected static PluginAdmin sobjPA = null;</span>
    +<span class="nc" id="L73">    protected static Scheduler sobjSched = null;</span>
    +<span class="nc" id="L74">    protected static TDSService sobjTDS = null;</span>
    +<span class="nc" id="L75">    protected static UpdaterService sobjUpdater = null;</span>
    +<span class="nc" id="L76">    protected static ClusterNodeService sobjClusterNode = null;</span>
    +<span class="nc" id="L77">    protected static SecurityManager sobjSecurity = null;</span>
    +
    +    // Velocity stuff
    +<span class="nc" id="L80">    protected static VelocityContext vc = null;</span>
    +<span class="nc" id="L81">    protected BundleContext bc = null;</span>
    +
    +    // Names of the various resource files
    +<span class="nc" id="L84">    private static String RES_LABELS_FILE   = &quot;ResourceLabels&quot;;</span>
    +<span class="nc" id="L85">    private static String RES_ERRORS_FILE   = &quot;ResourceErrors&quot;;</span>
    +<span class="nc" id="L86">    private static String RES_MESSAGES_FILE = &quot;ResourceMessages&quot;;</span>
    +
    +    // Resource bundles
    +<span class="nc" id="L89">    private static ResourceBundle resLbl = null;</span>
    +<span class="nc" id="L90">    private static ResourceBundle resMsg = null;</span>
    +<span class="nc" id="L91">    private static ResourceBundle resErr = null;</span>
    +
    +    // Debug flag - global for all views
    +<span class="nc" id="L94">    protected static boolean DEBUG = false;</span>
    +    
    +    // Some constants that are used internally
    +<span class="nc" id="L97">    private static String NULL_PARAM_NAME = &quot;Undefined parameter name!&quot;;</span>
    +
    +    /**
    +     * Instantiates a new &lt;code&gt;AbstractView&lt;/code&gt; object.
    +     * 
    +     * @param bundlecontext the parent bundle's context
    +     * @param vc the Velocity instance's context
    +     */
    +<span class="nc" id="L105">    public AbstractView(BundleContext bundlecontext, VelocityContext vc) {</span>
    +        // Keep the Velocity context instance
    +<span class="nc" id="L107">        this.vc = vc;</span>
    +<span class="nc" id="L108">        this.bc = bundlecontext;</span>
    +       
    +<span class="nc" id="L110">        sobjCore = AlitheiaCore.getInstance();</span>
    +        
    +        // Retrieve the instances of the core components
    +<span class="nc bnc" id="L113" title="All 2 branches missed.">        if (sobjCore != null) {</span>
    +            //Get the log manager's instance
    +<span class="nc" id="L115">            sobjLogManager = sobjCore.getLogManager();</span>
    +<span class="nc bnc" id="L116" title="All 2 branches missed.">            if (sobjLogManager != null) {</span>
    +                // Instantiate a dedicated logger 
    +<span class="nc" id="L118">                sobjLogger = sobjLogManager.createLogger(</span>
    +<span class="nc" id="L119">                        Logger.NAME_SQOOSS_WEBADMIN);</span>
    +            }
    +
    +            // Get the database component's instance
    +<span class="nc" id="L123">            sobjDB = sobjCore.getDBService();</span>
    +<span class="nc bnc" id="L124" title="All 4 branches missed.">            if ((sobjDB == null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L125">                sobjLogger.debug(&quot;Could not get the database component's instance.&quot;);</span>
    +
    +            // Get the plug-in admin's instance
    +<span class="nc" id="L128">            sobjPA = sobjCore.getPluginAdmin();</span>
    +<span class="nc bnc" id="L129" title="All 4 branches missed.">            if ((sobjPA == null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L130">                sobjLogger.debug(&quot;Could not get the plug-in admin's instance.&quot;);</span>
    +
    +            // Get the scheduler's instance
    +<span class="nc" id="L133">            sobjSched = sobjCore.getScheduler();</span>
    +<span class="nc bnc" id="L134" title="All 4 branches missed.">            if ((sobjSched == null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L135">                sobjLogger.debug(&quot;Could not get the scheduler's instance.&quot;);</span>
    +
    +            // Get the metric activator's instance
    +<span class="nc" id="L138">            compMA = sobjCore.getMetricActivator();</span>
    +<span class="nc bnc" id="L139" title="All 4 branches missed.">            if ((compMA == null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L140">                sobjLogger.debug(&quot;Could not get the metric activator's instance.&quot;);</span>
    +
    +            // Get the TDS component's instance
    +<span class="nc" id="L143">            sobjTDS = sobjCore.getTDSService();</span>
    +<span class="nc bnc" id="L144" title="All 4 branches missed.">            if ((sobjTDS == null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L145">                sobjLogger.debug(&quot;Could not get the TDS component's instance.&quot;);</span>
    +
    +            // Get the updater component's instance
    +<span class="nc" id="L148">            sobjUpdater = sobjCore.getUpdater();</span>
    +<span class="nc bnc" id="L149" title="All 4 branches missed.">            if ((sobjUpdater == null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L150">                sobjLogger.debug(&quot;Could not get the updater component's instance.&quot;);</span>
    +
    +            // Get the ClusterNodeService component's instance
    +<span class="nc" id="L153">            sobjClusterNode = sobjCore.getClusterNodeService();</span>
    +<span class="nc bnc" id="L154" title="All 4 branches missed.">            if ((sobjClusterNode != null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L155">                sobjLogger.debug(&quot;Got the ClusterNodeService component's instance.&quot;);</span>
    +
    +            
    +            // Get the security manager's instance
    +<span class="nc" id="L159">            sobjSecurity = sobjCore.getSecurityManager();</span>
    +<span class="nc bnc" id="L160" title="All 4 branches missed.">            if ((sobjSecurity == null) &amp;&amp; (sobjLogger != null))</span>
    +<span class="nc" id="L161">                sobjLogger.debug(&quot;Could not get the security manager's instance.&quot;);</span>
    +        }
    +<span class="nc" id="L163">    }</span>
    +
    +    /**
    +     * Initializes the various resource bundle with the specified locale.
    +     * 
    +     * @param locale the user's locale
    +     */
    +    public static void initResources (Locale locale) {
    +<span class="nc" id="L171">        resLbl = getLabelsBundle(locale);</span>
    +<span class="nc" id="L172">        resErr = getErrorsBundle(locale);</span>
    +<span class="nc" id="L173">        resMsg = getMessagesBundle(locale);</span>
    +<span class="nc" id="L174">    }</span>
    +
    +    /**
    +     * Retrieves the value of the given resource property from the
    +     * resource bundle that stores all label strings.
    +     * 
    +     * @param name the name of the resource property
    +     * 
    +     * @return The property's value, when that property can be found in the
    +     *   corresponding resource bundle, OR the provided property name's
    +     *   parameter, when such property is missing.
    +     */
    +    public static String getLbl (String name) {
    +<span class="nc bnc" id="L187" title="All 2 branches missed.">        if (resLbl != null) {</span>
    +            try {
    +<span class="nc" id="L189">                return resLbl.getString(name);</span>
    +            }
    +<span class="nc" id="L191">            catch (NullPointerException ex) {</span>
    +<span class="nc" id="L192">                return NULL_PARAM_NAME;</span>
    +            }
    +<span class="nc" id="L194">            catch (MissingResourceException ex) {</span>
    +<span class="nc" id="L195">                return name;</span>
    +            }
    +        }
    +<span class="nc" id="L198">        return name;</span>
    +    }
    +
    +    /**
    +     * Retrieves the value of the given resource property from the
    +     * resource bundle that stores all error strings.
    +     * 
    +     * @param name the name of the resource property
    +     * 
    +     * @return The property's value, when that property can be found in the
    +     *   corresponding resource bundle, OR the provided property name's
    +     *   parameter, when such property is missing.
    +     */
    +    public static String getErr (String name) {
    +<span class="nc bnc" id="L212" title="All 2 branches missed.">        if (resErr != null) {</span>
    +            try {
    +<span class="nc" id="L214">                return resErr.getString(name);</span>
    +            }
    +<span class="nc" id="L216">            catch (NullPointerException ex) {</span>
    +<span class="nc" id="L217">                return NULL_PARAM_NAME;</span>
    +            }
    +<span class="nc" id="L219">            catch (MissingResourceException ex) {</span>
    +<span class="nc" id="L220">                return name;</span>
    +            }
    +        }
    +<span class="nc" id="L223">        return name;</span>
    +    }
    +
    +    /**
    +     * Retrieves the value of the given resource property from the
    +     * resource bundle that stores all message strings.
    +     * 
    +     * @param name the name of the resource property
    +     * 
    +     * @return The property's value, when that property can be found in the
    +     *   corresponding resource bundle, OR the provided property name's
    +     *   parameter, when such property is missing.
    +     */
    +    public static String getMsg (String name) {
    +<span class="nc bnc" id="L237" title="All 2 branches missed.">        if (resMsg != null) {</span>
    +            try {
    +<span class="nc" id="L239">                return resMsg.getString(name);</span>
    +            }
    +<span class="nc" id="L241">            catch (NullPointerException ex) {</span>
    +<span class="nc" id="L242">                return NULL_PARAM_NAME;</span>
    +            }
    +<span class="nc" id="L244">            catch (MissingResourceException ex) {</span>
    +<span class="nc" id="L245">                return name;</span>
    +            }
    +        }
    +<span class="nc" id="L248">        return name;</span>
    +    }
    +
    +    // TODO: Move this method's logic in the initResources() once all views
    +    // are using the new methods.
    +	public static ResourceBundle getLabelsBundle(Locale locale) {
    +<span class="nc" id="L254">		locale = Locale.ENGLISH;</span>
    +<span class="nc" id="L255">		return ResourceBundle.getBundle(RES_LABELS_FILE, locale);</span>
    +	}
    +
    +    // TODO: Move this method's logic in the initResources() once all views
    +    // are using the new methods.
    +	public static ResourceBundle getErrorsBundle(Locale locale) {
    +<span class="nc" id="L261">		locale = Locale.ENGLISH;</span>
    +<span class="nc" id="L262">		return ResourceBundle.getBundle(RES_ERRORS_FILE, locale);</span>
    +	}
    +
    +    // TODO: Move this method's logic in the initResources() once all views
    +    // are using the new methods.
    +    public static ResourceBundle getMessagesBundle (Locale locale) {
    +<span class="nc" id="L268">    	locale = Locale.ENGLISH;</span>
    +<span class="nc" id="L269">    	return ResourceBundle.getBundle(RES_MESSAGES_FILE, locale);</span>
    +    }
    +
    +    /**
    +     * Construct an HTML-based list of all parameters and their values, that
    +     * are contained in the given servlet's request object. Useful for debug
    +     * of the views functionality.
    +     * 
    +     * @param request the servlet's request object
    +     * 
    +     * @return The list of request parameters.
    +     */
    +    protected static String debugRequest (HttpServletRequest request) {
    +<span class="nc" id="L282">        StringBuilder b = new StringBuilder();</span>
    +<span class="nc" id="L283">        Enumeration&lt;?&gt; e = request.getParameterNames();</span>
    +<span class="nc bnc" id="L284" title="All 2 branches missed.">        while (e.hasMoreElements()) {</span>
    +<span class="nc" id="L285">            String key = (String) e.nextElement();</span>
    +<span class="nc" id="L286">            b.append(key + &quot;=&quot; + request.getParameter(key) + &quot;&lt;br/&gt;\n&quot;);</span>
    +        }
    +<span class="nc" id="L288">        return b.toString();</span>
    +    }
    +
    +    /**
    +     * Generates a string that contains a &lt;b&gt;2*num&lt;/b&gt; spaces.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;Used for indentation of the HTML content that is generated by the
    +     * various views.&lt;/i&gt;
    +     * 
    +     * @param num the indentation depth
    +     * 
    +     * @return The indentation string.
    +     */
    +    protected static String sp (long num) {
    +<span class="nc" id="L302">        StringBuilder b = new StringBuilder();</span>
    +<span class="nc bnc" id="L303" title="All 2 branches missed.">        for (long i = 0; i &lt; num; i++)</span>
    +<span class="nc" id="L304">            b.append(&quot;  &quot;);</span>
    +<span class="nc" id="L305">        return b.toString();</span>
    +    }
    +
    +    /**
    +     * Generates a simple table row (&lt;i&gt;with two columns&lt;/i&gt;) that represents
    +     * a single text input element with a title line. The title line will be
    +     * stored in the first cell, while the text input will be placed in the
    +     * second cell.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;This method is used by the various views for generating simple input
    +     * screens.&lt;/i&gt;
    +     * 
    +     * @param title the title that will preceed the input element
    +     * @param parName the input element's name
    +     * @param parValue the input element's initial value
    +     * @param in the indentation depth
    +     * 
    +     * @return The string that contains the table's row, or an empty string
    +     *   upon invalid (&lt;code&gt;null&lt;/code&gt;) name of the input element.
    +     */
    +    protected static String normalInputRow (
    +            String title, String parName, String parValue, long in) {
    +        // Stores the assembled HTML content
    +<span class="nc" id="L328">        StringBuilder b = new StringBuilder(&quot;\n&quot;);</span>
    +
    +        // Create the input field's row
    +<span class="nc bnc" id="L331" title="All 2 branches missed.">        if (parName != null) {</span>
    +<span class="nc" id="L332">            b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L333">            b.append(sp(in) + &quot;&lt;td class=\&quot;borderless\&quot;&quot;</span>
    +<span class="nc" id="L334">                    + &quot; style=\&quot;width:100px;\&quot;&gt;&quot;</span>
    +<span class="nc bnc" id="L335" title="All 2 branches missed.">                    + &quot;&lt;b&gt;&quot; + ((title != null) ? title : &quot;&quot;) + &quot;&lt;/b&gt;&quot;</span>
    +<span class="nc" id="L336">                    + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L337">            b.append(sp(in++) + &quot;&lt;td class=\&quot;borderless\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L338">            b.append(sp(in) + &quot;&lt;input type=\&quot;text\&quot;&quot;</span>
    +<span class="nc" id="L339">                    + &quot; class=\&quot;form\&quot;&quot;</span>
    +<span class="nc" id="L340">                    + &quot; id=\&quot;&quot; + parName + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L341">                    + &quot; name=\&quot;&quot; + parName + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L342">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc bnc" id="L343" title="All 2 branches missed.">                    + ((parValue != null) ? parValue : &quot;&quot; )</span>
    +<span class="nc" id="L344">                    + &quot;\&quot; size=\&quot;60\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L345">            b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L346">            b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +        }
    +
    +        // Return the generated content
    +<span class="nc" id="L350">        return b.toString();</span>
    +    }
    +
    +    /**
    +     * Generates a simple table row (&lt;i&gt;with two columns&lt;/i&gt;) that represents
    +     * a single text message with a title line. The title line will be
    +     * stored in the first cell, while the message will be placed in the
    +     * second cell.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;This method is used by the various views for generating simple info
    +     * screens.&lt;/i&gt;
    +     * 
    +     * @param title the title that will preceed the text message
    +     * @param value the text message
    +     * @param in the indentation depth
    +     * 
    +     * @return The string that contains the table's row.
    +     */
    +    protected static String normalInfoRow (
    +            String title, String value, long in) {
    +        // Stores the assembled HTML content
    +<span class="nc" id="L371">        StringBuilder b = new StringBuilder(&quot;\n&quot;);</span>
    +
    +        // Create the info row
    +<span class="nc" id="L374">        b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L375">        b.append(sp(in) + &quot;&lt;td class=\&quot;borderless\&quot;&quot;</span>
    +<span class="nc" id="L376">                + &quot; style=\&quot;width:100px;\&quot;&gt;&quot;</span>
    +<span class="nc bnc" id="L377" title="All 2 branches missed.">                + &quot;&lt;b&gt;&quot; + ((title != null) ? title : &quot;&quot;) + &quot;&lt;/b&gt;&quot;</span>
    +<span class="nc" id="L378">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L379">        b.append(sp(in++) + &quot;&lt;td class=\&quot;borderless\&quot;&gt;\n&quot;);</span>
    +<span class="nc bnc" id="L380" title="All 2 branches missed.">        b.append(sp(in) + ((value != null) ? value : &quot;&quot;) + &quot;\n&quot;);</span>
    +<span class="nc" id="L381">        b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L382">        b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +        
    +        // Return the generated content
    +<span class="nc" id="L385">        return b.toString();</span>
    +    }
    +
    +    /**
    +     * Produces an HTML fieldset tag which encapsulates the HTML
    +     * content that is stored in the given &lt;code&gt;StringBuilder&lt;/code&gt; object.
    +     * 
    +     * @param name the fieldset legend's name
    +     * @param css the CSS class name to use
    +     * @param content the HTML content
    +     * @param in the indentation depth
    +     * 
    +     * @return The HTML presentation.
    +     */
    +    protected static String normalFieldset (
    +            String name,
    +            String css,
    +            StringBuilder content,
    +            long in) {
    +<span class="nc bnc" id="L404" title="All 4 branches missed.">        if ((content != null) &amp;&amp; (content.toString().length() &gt; 0)) {</span>
    +<span class="nc" id="L405">            return (sp(in) + &quot;&lt;fieldset&quot;</span>
    +<span class="nc bnc" id="L406" title="All 2 branches missed.">                    + ((css != null) ? &quot;class=\&quot;&quot; + css + &quot;\&quot;&quot;: &quot;&quot;)</span>
    +<span class="nc" id="L407">                    + &quot;&gt;\n&quot;</span>
    +<span class="nc" id="L408">                    + sp(++in) + &quot;&lt;legend&gt;&quot;</span>
    +<span class="nc bnc" id="L409" title="All 2 branches missed.">                    + ((name != null) ? name : &quot;NONAME&quot;)</span>
    +<span class="nc" id="L410">                    + &quot;&lt;/legend&gt;\n&quot;</span>
    +<span class="nc" id="L411">                    + content.toString()</span>
    +<span class="nc" id="L412">                    + sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +        }
    +<span class="nc" id="L414">        return (&quot;&quot;);</span>
    +    }
    +
    +    // TODO: Remove this method, since it is not I18n compatible.
    +    protected static String errorFieldset (StringBuilder errors, long in) {
    +<span class="nc" id="L419">        return normalFieldset(&quot;Errors&quot;, null, errors, in);</span>
    +    }
    +
    +    /**
    +     * Creates a &lt;code&gt;Long&lt;/code&gt; object from the content of the given
    +     * &lt;code&gt;String&lt;/code&gt; object, while handling internally any thrown
    +     * exception.
    +     * 
    +     * @param value the &lt;code&gt;String&lt;/code&gt; value
    +     * 
    +     * @return The &lt;code&gt;Long&lt;/code&gt; value.
    +     */
    +    protected static Long fromString (String value) {
    +        try {
    +<span class="nc" id="L433">            return (new Long(value));</span>
    +        }
    +<span class="nc" id="L435">        catch (NumberFormatException ex){</span>
    +<span class="nc" id="L436">            return null;</span>
    +        }
    +    }
    +
    +    /**
    +     * Method for validation of a simple name-based properties.
    +     * &lt;br/&gt;
    +     * The validation will be successful on values that contain alphanumeric
    +     * characters, plus the space character (&lt;i&gt;as long as it does not appear
    +     * as first or last character in the sequence&lt;/i&gt;).
    +     * 
    +     * @param text the property value
    +     * 
    +     * @return &lt;code&gt;true&lt;/code&gt; upon successful validation,
    +     *   or &lt;code&gt;false&lt;/code&gt; otherwise.
    +     */
    +    protected static boolean checkName (String text) {
    +<span class="nc bnc" id="L453" title="All 2 branches missed.">        if (text == null) return false;</span>
    +
    +        // Check for head or foot occurrence of deprecated signs
    +<span class="nc" id="L456">        Pattern p = Pattern.compile(&quot;^[ ]+.*&quot;);</span>
    +<span class="nc bnc" id="L457" title="All 2 branches missed.">        if (p.matcher(text).matches()) return false;</span>
    +<span class="nc" id="L458">        p = Pattern.compile(&quot;.*[ ]+$&quot;);</span>
    +<span class="nc bnc" id="L459" title="All 2 branches missed.">        if (p.matcher(text).matches()) return false;</span>
    +        // Check the name
    +<span class="nc" id="L461">        p = Pattern.compile(&quot;[\\p{Alnum} ]+&quot;);</span>
    +<span class="nc" id="L462">        return p.matcher(text).matches();</span>
    +    }
    +
    +    /**
    +     * Method for validation of a project name-based properties.
    +     * &lt;br/&gt;
    +     * The validation will be successful on values that contain alphanumeric
    +     * characters, plus the space and the underscore characters
    +     * (&lt;i&gt;as long as they do not appear as first or last character in the
    +     * sequence&lt;/i&gt;).
    +     * 
    +     * @param text the property value
    +     * 
    +     * @return &lt;code&gt;true&lt;/code&gt; upon successful validation,
    +     *   or &lt;code&gt;false&lt;/code&gt; otherwise.
    +     */
    +    protected static boolean checkProjectName (String text) {
    +<span class="nc bnc" id="L479" title="All 2 branches missed.">        if (text == null) return false;</span>
    +
    +        // Check for head or foot occurrence of deprecated signs
    +<span class="nc" id="L482">        Pattern p = Pattern.compile(&quot;^[ _\\-]+.*&quot;);</span>
    +<span class="nc bnc" id="L483" title="All 2 branches missed.">        if (p.matcher(text).matches()) return false;</span>
    +<span class="nc" id="L484">        p = Pattern.compile(&quot;.*[ _\\-]+$&quot;);</span>
    +<span class="nc bnc" id="L485" title="All 2 branches missed.">        if (p.matcher(text).matches()) return false;</span>
    +        // Check the name
    +<span class="nc" id="L487">        p = Pattern.compile(&quot;[\\p{Alnum}_\\- ]+&quot;);</span>
    +<span class="nc" id="L488">        return p.matcher(text).matches();</span>
    +    }
    +
    +    /**
    +     * Method for validation of properties that hold an email address.
    +     * &lt;br/&gt;
    +     * The validation will be successful on values that satisfy the email
    +     * address specification from RFC 2822.
    +     * &lt;br/&gt;
    +     * &lt;i&gt;Note: this methods tries to follow RFC 2822 as much as possible,
    +     * but is not yet fully compatible with it.&lt;/i&gt;
    +     * 
    +     * @param text the property value
    +     * 
    +     * @return &lt;code&gt;true&lt;/code&gt; upon successful validation,
    +     *   or &lt;code&gt;false&lt;/code&gt; otherwise.
    +     */
    +    protected static boolean checkEmail (String text) {
    +<span class="nc bnc" id="L506" title="All 2 branches missed.">        if (text == null) return false;</span>
    +
    +        // Check for adjacent dot signs
    +<span class="nc" id="L509">        Pattern p = Pattern.compile(&quot;\\.\\.&quot;);</span>
    +<span class="nc bnc" id="L510" title="All 2 branches missed.">        if (p.matcher(text).matches()) return false;</span>
    +        // Split the email into local and domain part
    +<span class="nc" id="L512">        String parts[] = text.split(&quot;@&quot;);</span>
    +<span class="nc bnc" id="L513" title="All 2 branches missed.">        if (parts.length != 2) return false;</span>
    +        // Check for head or foot occurrence of dot signs
    +<span class="nc" id="L515">        p = Pattern.compile(&quot;^[.].*&quot;);</span>
    +<span class="nc bnc" id="L516" title="All 2 branches missed.">        if (p.matcher(parts[0]).matches()) return false;</span>
    +<span class="nc bnc" id="L517" title="All 2 branches missed.">        if (p.matcher(parts[1]).matches()) return false;</span>
    +<span class="nc" id="L518">        p = Pattern.compile(&quot;.*[.]$&quot;);</span>
    +<span class="nc bnc" id="L519" title="All 2 branches missed.">        if (p.matcher(parts[0]).matches()) return false;</span>
    +<span class="nc bnc" id="L520" title="All 2 branches missed.">        if (p.matcher(parts[1]).matches()) return false;</span>
    +        // Local part's regular expression
    +<span class="nc" id="L522">        Pattern l = Pattern.compile(&quot;^[\\p{Alnum}!#$%*/?|^{}`~&amp;'+-=_.]+$&quot;);</span>
    +        // Domain part's regular expression
    +<span class="nc" id="L524">        Pattern d = Pattern.compile(&quot;^[\\p{Alnum}.-]+[.][\\p{Alpha}]{2,4}$&quot;);</span>
    +        // Match both parts
    +<span class="nc bnc" id="L526" title="All 2 branches missed.">        return ((l.matcher(parts[0]).matches())</span>
    +<span class="nc bnc" id="L527" title="All 2 branches missed.">                &amp;&amp; (d.matcher(parts[1]).matches()));</span>
    +    }
    +
    +    /**
    +     * Check if the provided URL is supported by the TDS data accessor 
    +     * plug-ins.
    +     * @param url The URL to check
    +     * @return True if the URL is supported, false otherwise or if the 
    +     * provided string is not a URL.
    +     */
    +    protected static boolean checkTDSUrl (String url) {
    +<span class="nc" id="L538">        return sobjTDS.isURLSupported(url);</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet$TranslationProxy.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet$TranslationProxy.html
    new file mode 100644
    index 000000000..91946a865
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet$TranslationProxy.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServlet.TranslationProxy</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">AdminServlet.TranslationProxy</span></div><h1>AdminServlet.TranslationProxy</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">15 of 15</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="AdminServlet.java.html#L331" class="el_method">AdminServlet.TranslationProxy(AdminServlet)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="AdminServlet.java.html#L336" class="el_method">label(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="AdminServlet.java.html#L341" class="el_method">message(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="AdminServlet.java.html#L346" class="el_method">error(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet.html
    new file mode 100644
    index 000000000..9e99408a3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServlet</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">AdminServlet</span></div><h1>AdminServlet</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">671 of 671</td><td class="ctr2">0%</td><td class="bar">42 of 42</td><td class="ctr2">0%</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">146</td><td class="ctr2">146</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a1"><a href="AdminServlet.java.html#L74" class="el_method">AdminServlet(BundleContext, WebadminService, Logger, VelocityEngine)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="211" alt="211"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h0">49</td><td class="ctr2" id="i0">49</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="AdminServlet.java.html#L160" class="el_method">doGet(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="87" height="10" title="154" alt="154"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h1">29</td><td class="ctr2" id="i1">29</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="AdminServlet.java.html#L211" class="el_method">doPost(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="66" height="10" title="117" alt="117"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="70" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">8</td><td class="ctr2" id="g1">8</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">25</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="AdminServlet.java.html#L302" class="el_method">createSubstitutions(HttpServletRequest)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="39" height="10" title="69" alt="69"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h3">13</td><td class="ctr2" id="i3">13</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="AdminServlet.java.html#L259" class="el_method">sendResource(HttpServletResponse, Pair)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="30" height="10" title="54" alt="54"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h5">12</td><td class="ctr2" id="i5">12</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="AdminServlet.java.html#L281" class="el_method">sendPage(HttpServletResponse, HttpServletRequest, String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="27" height="10" title="48" alt="48"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">13</td><td class="ctr2" id="i4">13</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="AdminServlet.java.html#L153" class="el_method">addStaticContent(String, String)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="7" height="10" title="13" alt="13"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="AdminServlet.java.html#L70" class="el_method">static {...}</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="2" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet.java.html
    new file mode 100644
    index 000000000..a5267a021
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/AdminServlet.java.html
    @@ -0,0 +1,352 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServlet.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_source">AdminServlet.java</span></div><h1>AdminServlet.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.webadmin;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.impl.service.webadmin.WebAdminRenderer;
    +import eu.sqooss.service.admin.AdminAction;
    +import eu.sqooss.service.admin.AdminService;
    +import eu.sqooss.service.admin.actions.AddProject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.util.Pair;
    +import eu.sqooss.service.webadmin.WebadminService;
    +
    +import java.io.InputStream;
    +import java.io.IOException;
    +import java.io.PrintWriter;
    +import java.io.StringWriter;
    +
    +import java.util.Hashtable;
    +import java.util.Locale;
    +
    +import javax.servlet.ServletException;
    +import javax.servlet.ServletOutputStream;
    +import javax.servlet.http.HttpServlet;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
    +import org.apache.velocity.app.VelocityEngine;
    +import org.apache.velocity.Template;
    +import org.apache.velocity.VelocityContext;
    +
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.BundleException;
    +import org.osgi.framework.ServiceReference;
    +
    +public class AdminServlet extends HttpServlet {
    +    private static final long serialVersionUID = 1L;
    +<span class="nc" id="L70">    private static BundleContext bc = null;</span>
    +<span class="nc" id="L71">    private static WebadminService webadmin = null;</span>
    +
    +    /// Logger given by our owner to write log messages to.
    +<span class="nc" id="L74">    private Logger logger = null;</span>
    +    
    +<span class="nc" id="L76">    private DBService db = null;</span>
    +
    +    // Content tables
    +<span class="nc" id="L79">    private Hashtable&lt;String, String&gt; dynamicContentMap = null;</span>
    +<span class="nc" id="L80">    private Hashtable&lt;String, Pair&lt;String, String&gt;&gt; staticContentMap = null;</span>
    +
    +    // Dynamic substitutions
    +<span class="nc" id="L83">    VelocityContext vc = null;</span>
    +<span class="nc" id="L84">    VelocityEngine ve = null;</span>
    +
    +    // Renderer of content
    +<span class="nc" id="L87">    WebAdminRenderer adminView = null;</span>
    +
    +    // Plug-ins view
    +<span class="nc" id="L90">    PluginsView pluginsView = null;</span>
    +
    +    // Projects view
    +<span class="nc" id="L93">    ProjectsView projectsView = null;</span>
    +
    +<span class="nc" id="L95">    TranslationProxy tr = new TranslationProxy();</span>
    +    
    +<span class="nc" id="L97">    public AdminServlet(BundleContext bc,</span>
    +            WebadminService webadmin,
    +            Logger logger,
    +            VelocityEngine ve) {
    +<span class="nc" id="L101">        AdminServlet.webadmin = webadmin;</span>
    +<span class="nc" id="L102">        AdminServlet.bc = bc;</span>
    +<span class="nc" id="L103">        this.ve = ve;</span>
    +<span class="nc" id="L104">        this.logger = logger;</span>
    +        
    +<span class="nc" id="L106">        AlitheiaCore core = AlitheiaCore.getInstance();</span>
    +<span class="nc" id="L107">        db = core.getDBService();</span>
    +        
    +        // Create the static content map
    +<span class="nc" id="L110">        staticContentMap = new Hashtable&lt;String, Pair&lt;String, String&gt;&gt;();</span>
    +<span class="nc" id="L111">        addStaticContent(&quot;/screen.css&quot;, &quot;text/css&quot;);</span>
    +<span class="nc" id="L112">        addStaticContent(&quot;/webadmin.css&quot;, &quot;text/css&quot;);</span>
    +<span class="nc" id="L113">        addStaticContent(&quot;/sqo-oss.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L114">        addStaticContent(&quot;/queue.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L115">        addStaticContent(&quot;/uptime.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L116">        addStaticContent(&quot;/greyBack.jpg&quot;, &quot;image/x-jpg&quot;);</span>
    +<span class="nc" id="L117">        addStaticContent(&quot;/projects.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L118">        addStaticContent(&quot;/logs.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L119">        addStaticContent(&quot;/metrics.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L120">        addStaticContent(&quot;/gear.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L121">        addStaticContent(&quot;/header-repeat.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L122">        addStaticContent(&quot;/add_user.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L123">        addStaticContent(&quot;/edit.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L124">        addStaticContent(&quot;/jobs.png&quot;, &quot;image/x-png&quot;);</span>
    +<span class="nc" id="L125">        addStaticContent(&quot;/rules.png&quot;, &quot;image/x-png&quot;);</span>
    +
    +        // Create the dynamic content map
    +<span class="nc" id="L128">        dynamicContentMap = new Hashtable&lt;String, String&gt;();</span>
    +<span class="nc" id="L129">        dynamicContentMap.put(&quot;/&quot;, &quot;index.html&quot;);</span>
    +<span class="nc" id="L130">        dynamicContentMap.put(&quot;/index&quot;, &quot;index.html&quot;);</span>
    +<span class="nc" id="L131">        dynamicContentMap.put(&quot;/projects&quot;, &quot;projects.html&quot;);</span>
    +<span class="nc" id="L132">        dynamicContentMap.put(&quot;/projectlist&quot;, &quot;projectslist.html&quot;);</span>
    +<span class="nc" id="L133">        dynamicContentMap.put(&quot;/logs&quot;, &quot;logs.html&quot;);</span>
    +<span class="nc" id="L134">        dynamicContentMap.put(&quot;/jobs&quot;, &quot;jobs.html&quot;);</span>
    +<span class="nc" id="L135">        dynamicContentMap.put(&quot;/alljobs&quot;, &quot;alljobs.html&quot;);</span>
    +<span class="nc" id="L136">        dynamicContentMap.put(&quot;/users&quot;, &quot;users.html&quot;);</span>
    +<span class="nc" id="L137">        dynamicContentMap.put(&quot;/rules&quot;, &quot;rules.html&quot;);</span>
    +<span class="nc" id="L138">        dynamicContentMap.put(&quot;/jobstat&quot;, &quot;jobstat.html&quot;);</span>
    +
    +        // Now the dynamic substitutions and renderer
    +<span class="nc" id="L141">        vc = new VelocityContext();</span>
    +<span class="nc" id="L142">        adminView = new WebAdminRenderer(bc, vc);</span>
    +
    +        // Create the various view objects
    +<span class="nc" id="L145">        pluginsView = new PluginsView(bc, vc);</span>
    +<span class="nc" id="L146">        projectsView = new ProjectsView(bc, vc);</span>
    +<span class="nc" id="L147">    }</span>
    +
    +    /**
    +     * Add content to the static map
    +     */
    +    private void addStaticContent(String path, String type) {
    +<span class="nc" id="L153">        Pair&lt;String, String&gt; p = new Pair&lt;String, String&gt; (path,type);</span>
    +<span class="nc" id="L154">        staticContentMap.put(path, p);</span>
    +<span class="nc" id="L155">    }</span>
    +
    +    protected void doGet(HttpServletRequest request,
    +                         HttpServletResponse response) throws ServletException,
    +                                                              IOException {
    +<span class="nc bnc" id="L160" title="All 2 branches missed.">        if (!db.isDBSessionActive()) {</span>
    +<span class="nc" id="L161">            db.startDBSession();</span>
    +        } 
    +        
    +        try {
    +<span class="nc" id="L165">            String query = request.getPathInfo();</span>
    +
    +            // Add the request to the log
    +<span class="nc" id="L168">            logger.debug(&quot;GET:&quot; + query);</span>
    +
    +            // This is static content
    +<span class="nc bnc" id="L171" title="All 2 branches missed.">            if (query.startsWith(&quot;/stop&quot;)) {</span>
    +<span class="nc" id="L172">                vc.put(&quot;RESULTS&quot;, &quot;&lt;p&gt;Alitheia Core is now shutdown.&lt;/p&gt;&quot;);</span>
    +<span class="nc" id="L173">                sendPage(response, request, &quot;/results.html&quot;);</span>
    +
    +                // Now stop the system
    +<span class="nc" id="L176">                logger.info(&quot;System stopped by user request to webadmin.&quot;);</span>
    +                try {
    +<span class="nc" id="L178">                    bc.getBundle(0).stop();</span>
    +<span class="nc" id="L179">                } catch (BundleException be) {</span>
    +<span class="nc" id="L180">                    logger.warn(&quot;Could not stop bundle 0.&quot;);</span>
    +                    // And ignore
    +                }
    +<span class="nc" id="L183">                return;</span>
    +            }
    +<span class="nc bnc" id="L185" title="All 2 branches missed.">            if (query.startsWith(&quot;/restart&quot;)) {</span>
    +<span class="nc" id="L186">                vc.put(&quot;RESULTS&quot;, &quot;&lt;p&gt;Alitheia Core is now restarting.&lt;/p&gt;&quot;);</span>
    +<span class="nc" id="L187">                sendPage(response, request, &quot;/results.html&quot;);</span>
    +
    +                //FIXME: How do we do a restart?
    +<span class="nc" id="L190">                return;</span>
    +            }
    +<span class="nc bnc" id="L192" title="All 4 branches missed.">            else if ((query != null) &amp;&amp; (staticContentMap.containsKey(query))) {</span>
    +<span class="nc" id="L193">                sendResource(response, staticContentMap.get(query));</span>
    +<span class="nc" id="L194">            }</span>
    +<span class="nc bnc" id="L195" title="All 4 branches missed.">            else if ((query != null) &amp;&amp; (dynamicContentMap.containsKey(query))) {</span>
    +<span class="nc" id="L196">                sendPage(response, request, dynamicContentMap.get(query));</span>
    +            }
    +<span class="nc" id="L198">        } catch (NullPointerException e) {</span>
    +<span class="nc" id="L199">            logger.warn(&quot;Got a NPE while rendering a page.&quot;,e);</span>
    +<span class="nc" id="L200">            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);</span>
    +<span class="nc" id="L201">        } finally {</span>
    +<span class="nc bnc" id="L202" title="All 10 branches missed.">            if (db.isDBSessionActive()) {</span>
    +<span class="nc" id="L203">                db.commitDBSession();</span>
    +            }
    +<span class="nc" id="L205">        }</span>
    +<span class="nc" id="L206">    }</span>
    +
    +    protected void doPost(HttpServletRequest request,
    +                          HttpServletResponse response) throws ServletException,
    +                                                               IOException {
    +<span class="nc bnc" id="L211" title="All 2 branches missed.">        if (!db.isDBSessionActive()) {</span>
    +<span class="nc" id="L212">            db.startDBSession();</span>
    +        } 
    +        
    +        try {
    +<span class="nc" id="L216">            String query = request.getPathInfo();</span>
    +<span class="nc" id="L217">            logger.debug(&quot;POST:&quot; + query);</span>
    +
    +<span class="nc bnc" id="L219" title="All 2 branches missed.">            if (query.startsWith(&quot;/addproject&quot;)) {</span>
    +                //addProject(request);
    +<span class="nc" id="L221">                sendPage(response, request, &quot;/results.html&quot;);</span>
    +<span class="nc bnc" id="L222" title="All 2 branches missed.">            } else if (query.startsWith(&quot;/diraddproject&quot;)) {</span>
    +<span class="nc" id="L223">                AdminService as = AlitheiaCore.getInstance().getAdminService();</span>
    +<span class="nc" id="L224">                AdminAction aa = as.create(AddProject.MNEMONIC);</span>
    +<span class="nc" id="L225">                aa.addArg(&quot;dir&quot;, request.getParameter(&quot;properties&quot;));</span>
    +<span class="nc" id="L226">                as.execute(aa);</span>
    +<span class="nc bnc" id="L227" title="All 2 branches missed.">                if (aa.hasErrors())</span>
    +<span class="nc" id="L228">                	vc.put(&quot;RESULTS&quot;, aa.errors());</span>
    +                else
    +<span class="nc" id="L230">                	vc.put(&quot;RESULTS&quot;, aa.results());</span>
    +<span class="nc" id="L231">                sendPage(response, request, &quot;/results.html&quot;);</span>
    +<span class="nc" id="L232">            } else {</span>
    +<span class="nc" id="L233">                doGet(request,response);</span>
    +            }
    +<span class="nc" id="L235">        } catch (NullPointerException e) {</span>
    +<span class="nc" id="L236">            logger.warn(&quot;Got a NPE while handling POST data.&quot;);</span>
    +<span class="nc" id="L237">            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);</span>
    +<span class="nc" id="L238">        } finally {</span>
    +<span class="nc bnc" id="L239" title="All 6 branches missed.">            if (db.isDBSessionActive()) {</span>
    +<span class="nc" id="L240">                db.commitDBSession();</span>
    +            }
    +<span class="nc" id="L242">        }</span>
    +<span class="nc" id="L243">    }</span>
    +    
    +    /**
    +     * Sends a resource (stored in the jar file) as a response. The mime-type
    +     * is set to @p mimeType . The @p path to the resource should start
    +     * with a / .
    +     *
    +     * Test cases:
    +     *   - null mimetype, null path, bad path, relative path, path not found,
    +     *   - null response
    +     *
    +     * TODO: How to simulate conditions that will cause IOException
    +     */
    +    protected void sendResource(HttpServletResponse response, Pair&lt;String,String&gt; source)
    +        throws ServletException, IOException {
    +        
    +<span class="nc" id="L259">        InputStream istream = getClass().getResourceAsStream(source.first);</span>
    +<span class="nc bnc" id="L260" title="All 2 branches missed.">        if ( istream == null ) {</span>
    +<span class="nc" id="L261">            throw new IOException(&quot;Path not found: &quot; + source.first);</span>
    +        }
    +
    +<span class="nc" id="L264">        byte[] buffer = new byte[1024];</span>
    +<span class="nc" id="L265">        int bytesRead = 0;</span>
    +<span class="nc" id="L266">        int totalBytes = 0;</span>
    +
    +<span class="nc" id="L268">        response.setContentType(source.second);</span>
    +<span class="nc" id="L269">        ServletOutputStream ostream = response.getOutputStream();</span>
    +<span class="nc bnc" id="L270" title="All 2 branches missed.">        while ((bytesRead = istream.read(buffer)) &gt; 0) {</span>
    +<span class="nc" id="L271">            ostream.write(buffer,0,bytesRead);</span>
    +<span class="nc" id="L272">            totalBytes += bytesRead;</span>
    +        }
    +<span class="nc" id="L274">    }</span>
    +
    +    protected void sendPage(
    +            HttpServletResponse response,
    +            HttpServletRequest request,
    +            String path)
    +        throws ServletException, IOException {
    +<span class="nc" id="L281">        Template t = null;</span>
    +        try {
    +<span class="nc" id="L283">            t = ve.getTemplate( path );</span>
    +<span class="nc" id="L284">        } catch (Exception e) {</span>
    +<span class="nc" id="L285">            logger.warn(&quot;Failed to get template &lt;&quot; + path + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L286">            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);</span>
    +<span class="nc" id="L287">            return;</span>
    +        }
    +<span class="nc" id="L289">        StringWriter writer = new StringWriter();</span>
    +<span class="nc" id="L290">        PrintWriter print = response.getWriter();</span>
    +
    +        // Do any substitutions that may be required
    +<span class="nc" id="L293">        createSubstitutions(request);</span>
    +<span class="nc" id="L294">        response.setContentType(&quot;text/html&quot;);</span>
    +<span class="nc" id="L295">        t.merge(vc, writer);</span>
    +
    +<span class="nc" id="L297">        print.print(writer.toString());</span>
    +<span class="nc" id="L298">    }</span>
    +
    +    private void createSubstitutions(HttpServletRequest request) {
    +        // Initialize the resource bundles with the provided locale
    +<span class="nc" id="L302">        AbstractView.initResources(Locale.ENGLISH);</span>
    +
    +        // Simple string substitutions
    +<span class="nc" id="L305">        vc.put(&quot;APP_NAME&quot;, AbstractView.getLbl(&quot;app_name&quot;));</span>
    +<span class="nc" id="L306">        vc.put(&quot;COPYRIGHT&quot;,</span>
    +<span class="nc" id="L307">                &quot;Copyright 2007-2008&quot;</span>
    +                + &quot;&lt;a href=\&quot;http://www.sqo-oss.eu/about/\&quot;&gt;&quot;
    +                + &quot;&amp;nbsp;SQO-OSS Consortium Members&quot;
    +                + &quot;&lt;/a&gt;&quot;);
    +<span class="nc" id="L311">        vc.put(&quot;LOGO&quot;, &quot;&lt;img src='/logo' id='logo' alt='Logo' /&gt;&quot;);</span>
    +<span class="nc" id="L312">        vc.put(&quot;UPTIME&quot;, WebAdminRenderer.getUptime());</span>
    +
    +        // Object-based substitutions
    +<span class="nc" id="L315">        vc.put(&quot;scheduler&quot;, adminView.sobjSched.getSchedulerStats());</span>
    +<span class="nc" id="L316">        vc.put(&quot;tr&quot;,tr); // translations proxy</span>
    +<span class="nc" id="L317">        vc.put(&quot;admin&quot;,adminView);</span>
    +<span class="nc" id="L318">        vc.put(&quot;projects&quot;,projectsView);</span>
    +<span class="nc" id="L319">        vc.put(&quot;metrics&quot;,pluginsView);</span>
    +<span class="nc" id="L320">        vc.put(&quot;request&quot;, request); // The request can be used by the render() methods</span>
    +<span class="nc" id="L321">    }  </span>
    +    
    +    /**
    +     * This is a class whose sole purpose is to provide a useful API from
    +     * within Velocity templates for the translation functions offered by
    +     * the AbstractView. Only one object needs to be created, and it
    +     * forwards all the label(), message() and error() calls to the translation
    +     * methods of the view.
    +     */
    +    public class TranslationProxy {
    +<span class="nc" id="L331">        public TranslationProxy() { </span>
    +<span class="nc" id="L332">        }</span>
    +        
    +        /** Translate a label */
    +        public String label(String s) {
    +<span class="nc" id="L336">            return AbstractView.getLbl(s);</span>
    +        }
    +        
    +        /** Translate a (multi-line, html formatted) message */
    +        public String message(String s) {
    +<span class="nc" id="L341">            return AbstractView.getMsg(s);</span>
    +        }
    +        
    +        /** Translate an error message */
    +        public String error(String s) {
    +<span class="nc" id="L346">            return AbstractView.getErr(s);</span>
    +        }
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/PluginsView.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/PluginsView.html
    new file mode 100644
    index 000000000..6daaad047
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/PluginsView.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PluginsView</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">PluginsView</span></div><h1>PluginsView</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3,581 of 3,581</td><td class="ctr2">0%</td><td class="bar">150 of 150</td><td class="ctr2">0%</td><td class="ctr1">78</td><td class="ctr2">78</td><td class="ctr1">651</td><td class="ctr2">651</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="PluginsView.java.html#L69" class="el_method">render(HttpServletRequest)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="3,432" alt="3,432"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="136" alt="136"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">69</td><td class="ctr2" id="g0">69</td><td class="ctr1" id="h0">623</td><td class="ctr2" id="i0">623</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="PluginsView.java.html#L945" class="el_method">renderPluginAttributes(PluginInfo, boolean, boolean, long)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="5" height="10" title="144" alt="144"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="12" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">8</td><td class="ctr2" id="g1">8</td><td class="ctr1" id="h1">26</td><td class="ctr2" id="i1">26</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="PluginsView.java.html#L57" class="el_method">PluginsView(BundleContext, VelocityContext)</a></td><td class="bar" id="b2"/><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/PluginsView.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/PluginsView.java.html
    new file mode 100644
    index 000000000..7680a555f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/PluginsView.java.html
    @@ -0,0 +1,986 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PluginsView.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_source">PluginsView.java</span></div><h1>PluginsView.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.webadmin;
    +
    +import java.util.Collection;
    +import java.util.List;
    +import java.util.Set;
    +
    +import javax.servlet.http.HttpServletRequest;
    +
    +import org.apache.velocity.VelocityContext;
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.Constants;
    +
    +import eu.sqooss.service.abstractmetric.PluginInfo;
    +import eu.sqooss.service.abstractmetric.PluginInfo.ConfigurationType;
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.Metric;
    +import eu.sqooss.service.db.Plugin;
    +import eu.sqooss.service.db.PluginConfiguration;
    +import eu.sqooss.service.util.StringUtils;
    +
    +public class PluginsView extends AbstractView{
    +
    +    public PluginsView(BundleContext bundlecontext, VelocityContext vc) {
    +<span class="nc" id="L57">        super(bundlecontext, vc);</span>
    +<span class="nc" id="L58">    }</span>
    +
    +    /**
    +     * Renders the various plug-in's views.
    +     * 
    +     * @param req the servlet's request object
    +     * 
    +     * @return The HTML presentation of the generated view.
    +     */
    +    public static String render(HttpServletRequest req) {
    +        // Stores the assembled HTML content
    +<span class="nc" id="L69">        StringBuilder b = new StringBuilder(&quot;\n&quot;);</span>
    +        // Stores the accumulated error messages
    +<span class="nc" id="L71">        StringBuilder e = new StringBuilder();</span>
    +        // Indentation spacer
    +<span class="nc" id="L73">        long in = 6;</span>
    +
    +        // Request parameters
    +<span class="nc" id="L76">        String reqParAction        = &quot;action&quot;;</span>
    +<span class="nc" id="L77">        String reqParHashcode      = &quot;pluginHashcode&quot;;</span>
    +<span class="nc" id="L78">        String reqParPropName      = &quot;propertyName&quot;;</span>
    +<span class="nc" id="L79">        String reqParPropDescr     = &quot;propertyDescription&quot;;</span>
    +<span class="nc" id="L80">        String reqParPropType      = &quot;propertyType&quot;;</span>
    +<span class="nc" id="L81">        String reqParPropValue     = &quot;propertyValue&quot;;</span>
    +<span class="nc" id="L82">        String reqParShowProp      = &quot;showProperties&quot;;</span>
    +<span class="nc" id="L83">        String reqParShowActv      = &quot;showActivators&quot;;</span>
    +        // Recognized &quot;action&quot; parameter's values
    +<span class="nc" id="L85">        String actValInstall       = &quot;installPlugin&quot;;</span>
    +<span class="nc" id="L86">        String actValUninstall     = &quot;uninstallPlugin&quot;;</span>
    +<span class="nc" id="L87">        String actValSync          = &quot;syncPlugin&quot;;</span>
    +<span class="nc" id="L88">        String actValReqAddProp    = &quot;createProperty&quot;;</span>
    +<span class="nc" id="L89">        String actValReqUpdProp    = &quot;updateProperty&quot;;</span>
    +<span class="nc" id="L90">        String actValConAddProp    = &quot;confirmProperty&quot;;</span>
    +<span class="nc" id="L91">        String actValConRemProp    = &quot;removeProperty&quot;;</span>
    +        // Request values
    +<span class="nc" id="L93">        String reqValAction        = &quot;&quot;;</span>
    +<span class="nc" id="L94">        String reqValHashcode      = null;</span>
    +<span class="nc" id="L95">        String reqValPropName      = null;</span>
    +<span class="nc" id="L96">        String reqValPropDescr     = null;</span>
    +<span class="nc" id="L97">        String reqValPropType      = null;</span>
    +<span class="nc" id="L98">        String reqValPropValue     = null;</span>
    +<span class="nc" id="L99">        boolean reqValShowProp     = false;         // Show plug-in properties</span>
    +<span class="nc" id="L100">        boolean reqValShowActv     = false;         // Show plug-in activators</span>
    +        // Info object of the selected plug-in
    +<span class="nc" id="L102">        PluginInfo selPI           = null;</span>
    +
    +        // Proceed only when at least one plug-in is registered
    +<span class="nc bnc" id="L105" title="All 2 branches missed.">        if (sobjPA.listPlugins().isEmpty()) {</span>
    +<span class="nc" id="L106">            b.append(normalFieldset(</span>
    +<span class="nc" id="L107">                    &quot;All plug-ins&quot;,</span>
    +<span class="nc" id="L108">                    null,</span>
    +<span class="nc" id="L109">                    new StringBuilder(&quot;&lt;span&gt;&quot;</span>
    +                            + &quot;No plug-ins found!&amp;nbsp;&quot;
    +                            + &quot;&lt;input type=\&quot;button\&quot;&quot;
    +                            + &quot; class=\&quot;install\&quot;&quot;
    +                            + &quot; style=\&quot;width: 100px;\&quot;&quot;
    +                            + &quot; value=\&quot;Refresh\&quot;&quot;
    +                            + &quot; onclick=\&quot;javascript:&quot;
    +                            + &quot;window.location.reload(true);&quot;
    +                            + &quot;\&quot;&gt;&quot;
    +                            + &quot;&lt;/span&gt;&quot;),
    +<span class="nc" id="L119">                    in));</span>
    +<span class="nc" id="L120">        }</span>
    +        else {
    +            // ===============================================================
    +            // Parse the servlet's request object
    +            // ===============================================================
    +<span class="nc bnc" id="L125" title="All 2 branches missed.">            if (req != null) {</span>
    +                // DEBUG: Dump the servlet's request parameter
    +<span class="nc bnc" id="L127" title="All 2 branches missed.">                if (DEBUG) {</span>
    +<span class="nc" id="L128">                    b.append(debugRequest(req));</span>
    +                }
    +
    +                // Retrieve the selected editor's action (if any)
    +<span class="nc" id="L132">                reqValAction = req.getParameter(reqParAction);</span>
    +<span class="nc bnc" id="L133" title="All 2 branches missed.">                if (reqValAction == null) {</span>
    +<span class="nc" id="L134">                    reqValAction = &quot;&quot;;</span>
    +                };
    +                // Retrieve the various display flags
    +<span class="nc bnc" id="L137" title="All 2 branches missed.">                if ((req.getParameter(reqParShowProp) != null)</span>
    +<span class="nc bnc" id="L138" title="All 2 branches missed.">                        &amp;&amp; (req.getParameter(reqParShowProp).equals(&quot;true&quot;))) {</span>
    +<span class="nc" id="L139">                    reqValShowProp = true;</span>
    +                }
    +<span class="nc bnc" id="L141" title="All 2 branches missed.">                if ((req.getParameter(reqParShowActv) != null)</span>
    +<span class="nc bnc" id="L142" title="All 2 branches missed.">                        &amp;&amp; (req.getParameter(reqParShowActv).equals(&quot;true&quot;))) {</span>
    +<span class="nc" id="L143">                    reqValShowActv = true;</span>
    +                }
    +                // Retrieve the selected configuration property's values
    +<span class="nc bnc" id="L146" title="All 2 branches missed.">                if ((reqValAction.equals(actValConAddProp))</span>
    +<span class="nc bnc" id="L147" title="All 2 branches missed.">                        || (reqValAction.equals(actValReqUpdProp))</span>
    +<span class="nc bnc" id="L148" title="All 2 branches missed.">                        || (reqValAction.equals(actValConRemProp))) {</span>
    +                    // Name, description, type and value
    +<span class="nc" id="L150">                    reqValPropName  = req.getParameter(reqParPropName);</span>
    +<span class="nc" id="L151">                    reqValPropDescr = req.getParameter(reqParPropDescr);</span>
    +<span class="nc" id="L152">                    reqValPropType  = req.getParameter(reqParPropType);</span>
    +<span class="nc" id="L153">                    reqValPropValue = req.getParameter(reqParPropValue);</span>
    +                }
    +                // Retrieve the selected plug-in's hash code
    +<span class="nc" id="L156">                reqValHashcode = req.getParameter(reqParHashcode);</span>
    +                // Plug-in based actions
    +<span class="nc bnc" id="L158" title="All 2 branches missed.">                if (reqValHashcode != null) {</span>
    +                    // =======================================================
    +                    // Plug-in install request
    +                    // =======================================================
    +<span class="nc bnc" id="L162" title="All 2 branches missed.">                    if (reqValAction.equals(actValInstall)) {</span>
    +<span class="nc bnc" id="L163" title="All 2 branches missed.">                        if (sobjPA.installPlugin(reqValHashcode) == false) {</span>
    +<span class="nc" id="L164">                            e.append(&quot;Plug-in can not be installed!&quot;</span>
    +                                    + &quot; Check log for details.&quot;);
    +<span class="nc" id="L166">                        }</span>
    +                        // Persist the DB changes
    +                        else {
    +<span class="nc" id="L169">                            PluginInfo pInfo =</span>
    +<span class="nc" id="L170">                                sobjPA.getPluginInfo(reqValHashcode);</span>
    +<span class="nc" id="L171">                            sobjPA.pluginUpdated(sobjPA.getPlugin(pInfo));</span>
    +                        }
    +<span class="nc" id="L173">                    }</span>
    +                    // =======================================================
    +                    // Plug-in un-install request
    +                    // =======================================================
    +<span class="nc bnc" id="L177" title="All 2 branches missed.">                    else if (reqValAction.equals(actValUninstall)) {</span>
    +<span class="nc bnc" id="L178" title="All 2 branches missed.">                        if (sobjPA.uninstallPlugin(reqValHashcode) == false) {</span>
    +<span class="nc" id="L179">                            e.append(&quot;Plug-in can not be uninstalled.&quot;</span>
    +                                    + &quot; Check log for details.&quot;);
    +<span class="nc" id="L181">                        } else {</span>
    +<span class="nc" id="L182">                            e.append(&quot;A job was scheduled to remove the plug-in&quot;);</span>
    +                        }
    +                    } 
    +                }
    +                // Retrieve the selected plug-in's info object
    +<span class="nc bnc" id="L187" title="All 2 branches missed.">                if (reqValHashcode != null) {</span>
    +<span class="nc" id="L188">                    selPI = sobjPA.getPluginInfo(reqValHashcode);</span>
    +                }
    +                // Plug-in info based actions
    +<span class="nc bnc" id="L191" title="All 4 branches missed.">                if ((selPI != null) &amp;&amp; (selPI.installed)) {</span>
    +                    // =======================================================
    +                    // Plug-in synchronize (on all projects) request
    +                    // =======================================================
    +<span class="nc bnc" id="L195" title="All 2 branches missed.">                    if (reqValAction.equals(actValSync)) {</span>
    +<span class="nc" id="L196">                        compMA.syncMetrics(sobjPA.getPlugin(selPI));</span>
    +<span class="nc" id="L197">                    }</span>
    +                    // =======================================================
    +                    // Plug-in's configuration property removal
    +                    // =======================================================
    +<span class="nc bnc" id="L201" title="All 2 branches missed.">                    else if (reqValAction.equals(actValConRemProp)) {</span>
    +<span class="nc" id="L202">                        if (selPI.hasConfProp(</span>
    +<span class="nc bnc" id="L203" title="All 2 branches missed.">                                reqValPropName, reqValPropType)) {</span>
    +                            try {
    +<span class="nc" id="L205">                                if (selPI.removeConfigEntry(</span>
    +<span class="nc" id="L206">                                        sobjDB,</span>
    +<span class="nc" id="L207">                                        reqValPropName,</span>
    +<span class="nc bnc" id="L208" title="All 2 branches missed.">                                        reqValPropType)) {</span>
    +                                    // Update the Plug-in Admin's information
    +<span class="nc" id="L210">                                    sobjPA.pluginUpdated(</span>
    +<span class="nc" id="L211">                                            sobjPA.getPlugin(selPI));</span>
    +                                    // Reload the PluginInfo object
    +<span class="nc" id="L213">                                    selPI = sobjPA.getPluginInfo(</span>
    +<span class="nc" id="L214">                                            reqValHashcode);</span>
    +<span class="nc" id="L215">                                }</span>
    +                                else {
    +<span class="nc" id="L217">                                    e.append(&quot;Property removal&quot;</span>
    +                                            + &quot; has failed!&quot;
    +                                            + &quot; Check log for details.&quot;);
    +                                }
    +<span class="nc" id="L221">                            }</span>
    +<span class="nc" id="L222">                            catch (Exception ex) {</span>
    +<span class="nc" id="L223">                                e.append(ex.getMessage());</span>
    +                            }
    +<span class="nc" id="L225">                        }</span>
    +                        else {
    +<span class="nc" id="L227">                            e.append (&quot;Unknown configuration property!&quot;);</span>
    +                        }
    +                        // Return to the update view upon error
    +<span class="nc bnc" id="L230" title="All 2 branches missed.">                        if (e.toString().length() &gt; 0) {</span>
    +<span class="nc" id="L231">                            reqValAction = actValReqUpdProp;</span>
    +                        }
    +<span class="nc" id="L233">                    }</span>
    +                    // =======================================================
    +                    // Plug-in's configuration property creation/update
    +                    // =======================================================
    +<span class="nc bnc" id="L237" title="All 2 branches missed.">                    else if (reqValAction.equals(actValConAddProp)) {</span>
    +                        // Check for a property update
    +<span class="nc" id="L239">                        boolean update = selPI.hasConfProp(</span>
    +<span class="nc" id="L240">                                reqValPropName, reqValPropType);</span>
    +                        // Update configuration property
    +<span class="nc bnc" id="L242" title="All 2 branches missed.">                        if (update) {</span>
    +                            try {
    +<span class="nc" id="L244">                                if (selPI.updateConfigEntry(</span>
    +<span class="nc" id="L245">                                        sobjDB,</span>
    +<span class="nc" id="L246">                                        reqValPropName,</span>
    +<span class="nc bnc" id="L247" title="All 2 branches missed.">                                        reqValPropValue)) {</span>
    +                                    // Update the Plug-in Admin's information
    +<span class="nc" id="L249">                                    sobjPA.pluginUpdated(</span>
    +<span class="nc" id="L250">                                            sobjPA.getPlugin(selPI));</span>
    +                                    // Reload the PluginInfo object
    +<span class="nc" id="L252">                                    selPI =</span>
    +<span class="nc" id="L253">                                        sobjPA.getPluginInfo(reqValHashcode);</span>
    +<span class="nc" id="L254">                                }</span>
    +                                else {
    +<span class="nc" id="L256">                                    e.append(&quot;Property update&quot;</span>
    +                                            + &quot; has failed!&quot;
    +                                            + &quot; Check log for details.&quot;);
    +                                }
    +<span class="nc" id="L260">                            }</span>
    +<span class="nc" id="L261">                            catch (Exception ex) {</span>
    +<span class="nc" id="L262">                                e.append(ex.getMessage());</span>
    +                            }
    +<span class="nc" id="L264">                        }</span>
    +                        // Create configuration property
    +                        else {
    +                            try {
    +<span class="nc" id="L268">                                if (selPI.addConfigEntry(</span>
    +<span class="nc" id="L269">                                        sobjDB,</span>
    +<span class="nc" id="L270">                                        reqValPropName,</span>
    +<span class="nc" id="L271">                                        reqValPropDescr,</span>
    +<span class="nc" id="L272">                                        reqValPropType,</span>
    +<span class="nc bnc" id="L273" title="All 2 branches missed.">                                        reqValPropValue)) {</span>
    +                                    // Update the Plug-in Admin's information
    +<span class="nc" id="L275">                                    sobjPA.pluginUpdated(</span>
    +<span class="nc" id="L276">                                            sobjPA.getPlugin(selPI));</span>
    +                                    // Reload the PluginInfo object
    +<span class="nc" id="L278">                                    selPI =</span>
    +<span class="nc" id="L279">                                        sobjPA.getPluginInfo(reqValHashcode);</span>
    +<span class="nc" id="L280">                                }</span>
    +                                else {
    +<span class="nc" id="L282">                                    e.append(&quot;Property creation&quot;</span>
    +                                            + &quot; has failed!&quot;
    +                                            + &quot; Check log for details.&quot;);
    +                                }
    +<span class="nc" id="L286">                            }</span>
    +<span class="nc" id="L287">                            catch (Exception ex) {</span>
    +<span class="nc" id="L288">                                e.append(ex.getMessage());</span>
    +                            }
    +                        }
    +                        // Return to the create/update view upon error
    +<span class="nc bnc" id="L292" title="All 2 branches missed.">                        if (e.toString().length() &gt; 0) {</span>
    +<span class="nc bnc" id="L293" title="All 2 branches missed.">                            if (update) reqValAction = actValReqUpdProp;</span>
    +<span class="nc" id="L294">                            else reqValAction = actValReqAddProp;</span>
    +                        }
    +                    }
    +                }
    +            }
    +
    +            // ===============================================================
    +            // Create the form
    +            // ===============================================================
    +<span class="nc" id="L303">            b.append(sp(in++) + &quot;&lt;form id=\&quot;metrics\&quot;&quot;</span>
    +<span class="nc" id="L304">                    + &quot; name=\&quot;metrics\&quot;&quot;</span>
    +<span class="nc" id="L305">                    + &quot; method=\&quot;post\&quot;&quot;</span>
    +<span class="nc" id="L306">                    + &quot; action=\&quot;/index\&quot;&gt;\n&quot;);</span>
    +
    +            // ===============================================================
    +            // Display the accumulated error messages (if any)
    +            // ===============================================================
    +<span class="nc" id="L311">            b.append(errorFieldset(e, in));</span>
    +
    +            // ===============================================================
    +            // &quot;Create/update configuration property&quot; editor
    +            // ===============================================================
    +<span class="nc bnc" id="L316" title="All 4 branches missed.">            if ((selPI != null) &amp;&amp; (selPI.installed)</span>
    +<span class="nc bnc" id="L317" title="All 2 branches missed.">                    &amp;&amp; ((reqValAction.equals(actValReqAddProp))</span>
    +<span class="nc bnc" id="L318" title="All 2 branches missed.">                            || (reqValAction.equals(actValReqUpdProp)))) {</span>
    +                // Input field values are stored here
    +<span class="nc" id="L320">                String value = null;</span>
    +                // Create the field-set
    +<span class="nc" id="L322">                b.append(sp(in) + &quot;&lt;fieldset&gt;\n&quot;);</span>
    +                // Check for a property update request
    +<span class="nc" id="L324">                boolean update = selPI.hasConfProp(</span>
    +<span class="nc" id="L325">                        reqValPropName, reqValPropType);</span>
    +<span class="nc" id="L326">                b.append(sp(++in) + &quot;&lt;legend&gt;&quot;</span>
    +<span class="nc bnc" id="L327" title="All 2 branches missed.">                        + ((update)</span>
    +<span class="nc" id="L328">                                ? &quot;Update property of &quot;</span>
    +<span class="nc" id="L329">                                : &quot;Create property for &quot;)</span>
    +<span class="nc" id="L330">                        + selPI.getPluginName()</span>
    +<span class="nc" id="L331">                        + &quot;&lt;/legend&gt;\n&quot;);</span>
    +<span class="nc" id="L332">                b.append(sp(in) + &quot;&lt;table class=\&quot;borderless\&quot;&gt;&quot;);</span>
    +                // Property's name
    +<span class="nc bnc" id="L334" title="All 2 branches missed.">                value = ((reqValPropName != null) ? reqValPropName : &quot;&quot;);</span>
    +<span class="nc" id="L335">                b.append(sp(in) + &quot;&lt;tr&gt;\n&quot;</span>
    +<span class="nc" id="L336">                        + sp(++in)</span>
    +<span class="nc" id="L337">                        + &quot;&lt;td class=\&quot;borderless\&quot; style=\&quot;width:100px;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L338">                        + &quot;&lt;b&gt;Name&lt;/b&gt;&quot;</span>
    +<span class="nc" id="L339">                        + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L340">                        + sp(in)</span>
    +<span class="nc" id="L341">                        + &quot;&lt;td class=\&quot;borderless\&quot;&gt;&quot;</span>
    +<span class="nc bnc" id="L342" title="All 2 branches missed.">                        + ((update) ? value</span>
    +<span class="nc" id="L343">                                : &quot;&lt;input type=\&quot;text\&quot;&quot;</span>
    +                                    + &quot; class=\&quot;form\&quot;&quot;
    +<span class="nc" id="L345">                                    + &quot; id=\&quot;&quot; + reqParPropName + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L346">                                    + &quot; name=\&quot;&quot; + reqParPropName + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L347">                                    + &quot; value=\&quot;&quot; + value + &quot;\&quot;&gt;&quot;)</span>
    +<span class="nc" id="L348">                                    + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L349">                                    + sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                // Property's description
    +<span class="nc bnc" id="L351" title="All 2 branches missed.">                value = ((reqValPropDescr != null) ? reqValPropDescr : &quot;&quot;);</span>
    +<span class="nc" id="L352">                b.append(sp(in) + &quot;&lt;tr&gt;\n&quot;</span>
    +<span class="nc" id="L353">                        + sp(++in)</span>
    +<span class="nc" id="L354">                        + &quot;&lt;td class=\&quot;borderless\&quot; style=\&quot;width:100px;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L355">                        + &quot;&lt;b&gt;Description&lt;/b&gt;&quot;</span>
    +<span class="nc" id="L356">                        + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L357">                        + sp(in)</span>
    +<span class="nc" id="L358">                        + &quot;&lt;td class=\&quot;borderless\&quot;&gt;&quot;</span>
    +<span class="nc bnc" id="L359" title="All 2 branches missed.">                        + ((update) ? value</span>
    +<span class="nc" id="L360">                                : &quot;&lt;input type=\&quot;text\&quot;&quot;</span>
    +                                    + &quot; class=\&quot;form\&quot;&quot;
    +<span class="nc" id="L362">                                    + &quot; id=\&quot;&quot; + reqParPropDescr + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L363">                                    + &quot; name=\&quot;&quot; + reqParPropDescr + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L364">                                    + &quot; value=\&quot;&quot; + value + &quot;\&quot;&gt;&quot;)</span>
    +<span class="nc" id="L365">                                    + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L366">                                    + sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                // Property's type
    +<span class="nc bnc" id="L368" title="All 2 branches missed.">                value = ((reqValPropType != null) ? reqValPropType : &quot;&quot;);</span>
    +<span class="nc" id="L369">                b.append(sp(in) + &quot;&lt;tr&gt;\n&quot;</span>
    +<span class="nc" id="L370">                        + sp(++in)</span>
    +<span class="nc" id="L371">                        + &quot;&lt;td class=\&quot;borderless\&quot; style=\&quot;width:100px;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L372">                        + &quot;&lt;b&gt;Type&lt;/b&gt;&quot;</span>
    +<span class="nc" id="L373">                        + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L374">                        + sp(in)</span>
    +<span class="nc" id="L375">                        + &quot;&lt;td class=\&quot;borderless\&quot;&gt;\n&quot;</span>
    +<span class="nc" id="L376">                        + sp(++in));</span>
    +<span class="nc bnc" id="L377" title="All 2 branches missed.">                if (update) {</span>
    +<span class="nc" id="L378">                    b.append(value);</span>
    +<span class="nc" id="L379">                }</span>
    +                else {
    +<span class="nc" id="L381">                    b.append(&quot;&lt;select class=\&quot;form\&quot;&quot;</span>
    +<span class="nc" id="L382">                            + &quot; id=\&quot;&quot; + reqParPropType + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L383">                            + &quot; name=\&quot;&quot; + reqParPropType + &quot;\&quot;&gt;\n&quot;);</span>
    +<span class="nc bnc" id="L384" title="All 2 branches missed.">                    for (ConfigurationType type : ConfigurationType.values()) {</span>
    +<span class="nc" id="L385">                        boolean selected = type.toString().equals(value);</span>
    +<span class="nc" id="L386">                        b.append(sp(in) + &quot;&lt;option&quot;</span>
    +<span class="nc" id="L387">                                + &quot; value=\&quot;&quot; + type.toString() + &quot;\&quot;&quot;</span>
    +<span class="nc bnc" id="L388" title="All 2 branches missed.">                                + ((selected) ? &quot; selected&quot; : &quot;&quot;)</span>
    +<span class="nc" id="L389">                                + &quot;&gt;&quot;</span>
    +<span class="nc" id="L390">                                + type.toString()</span>
    +<span class="nc" id="L391">                                + &quot;&lt;/option&gt;\n&quot;);</span>
    +                    }
    +<span class="nc" id="L393">                    b.append(sp(in) + &quot;&lt;/select&gt;\n&quot;);</span>
    +                }
    +<span class="nc" id="L395">                b.append(sp(--in)</span>
    +<span class="nc" id="L396">                        + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L397">                        + sp(--in)</span>
    +<span class="nc" id="L398">                        + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                // Property's value
    +<span class="nc bnc" id="L400" title="All 2 branches missed.">                value = ((reqValPropValue != null) ? reqValPropValue : &quot;&quot;);</span>
    +<span class="nc" id="L401">                b.append(sp(in) + &quot;&lt;tr&gt;\n&quot;</span>
    +<span class="nc" id="L402">                        + sp(++in)</span>
    +<span class="nc" id="L403">                        + &quot;&lt;td class=\&quot;borderless\&quot; style=\&quot;width:100px;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L404">                        + &quot;&lt;b&gt;Value&lt;/b&gt;&quot;</span>
    +<span class="nc" id="L405">                        + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L406">                        + sp(in)</span>
    +<span class="nc" id="L407">                        + &quot;&lt;td class=\&quot;borderless\&quot;&gt;&quot;</span>
    +<span class="nc" id="L408">                        + &quot;&lt;input type=\&quot;text\&quot;&quot;</span>
    +<span class="nc" id="L409">                        + &quot; class=\&quot;form\&quot;&quot;</span>
    +<span class="nc" id="L410">                        + &quot; id=\&quot;&quot; + reqParPropValue + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L411">                        + &quot; name=\&quot;&quot; + reqParPropValue + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L412">                        + &quot; value=\&quot;&quot; + value +&quot;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L413">                        + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L414">                        + sp(--in)</span>
    +<span class="nc" id="L415">                        + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                // Command tool-bar
    +<span class="nc bnc" id="L417" title="All 2 branches missed.">                value = ((update) ? &quot;Update&quot; : &quot;Create&quot;);</span>
    +<span class="nc" id="L418">                b.append(sp(in) + &quot;&lt;tr&gt;\n&quot;</span>
    +<span class="nc" id="L419">                        + sp(++in)</span>
    +<span class="nc" id="L420">                        + &quot;&lt;td colspan=\&quot;2\&quot; class=\&quot;borderless\&quot;&gt;&quot;</span>
    +<span class="nc" id="L421">                        + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L422">                        + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L423">                        + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L424">                        + &quot; value=\&quot;&quot; + value + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L425">                        + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L426">                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L427">                        + reqParAction + &quot;').value='&quot;</span>
    +<span class="nc" id="L428">                        + actValConAddProp + &quot;';&quot;</span>
    +<span class="nc" id="L429">                        + &quot;document.metrics.submit();\&quot;&gt;&quot;</span>
    +<span class="nc" id="L430">                        + &quot;&amp;nbsp;&quot;);</span>
    +<span class="nc bnc" id="L431" title="All 2 branches missed.">                if (update) {</span>
    +<span class="nc" id="L432">                    b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L433">                            + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L434">                            + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L435">                            + &quot; value=\&quot;Remove\&quot;&quot;</span>
    +<span class="nc" id="L436">                            + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L437">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L438">                            + reqParAction + &quot;').value='&quot;</span>
    +<span class="nc" id="L439">                            + actValConRemProp + &quot;';&quot;</span>
    +<span class="nc" id="L440">                            + &quot;document.metrics.submit();\&quot;&gt;&quot;</span>
    +<span class="nc" id="L441">                            + &quot;&amp;nbsp;&quot;);</span>
    +                }
    +<span class="nc" id="L443">                b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L444">                        + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L445">                        + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L446">                        + &quot; value=\&quot;Cancel\&quot;&quot;</span>
    +<span class="nc" id="L447">                        + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L448">                        + &quot;document.metrics.submit();\&quot;&gt;&quot;</span>
    +<span class="nc" id="L449">                        + &quot;&lt;/td&gt;\n&quot;</span>
    +<span class="nc" id="L450">                        + sp(--in)</span>
    +<span class="nc" id="L451">                        + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L452">                b.append(sp(--in) + &quot;&lt;/table&gt;&quot;);</span>
    +<span class="nc" id="L453">                b.append(sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L454">            }</span>
    +            // ===============================================================
    +            // Plug-in editor
    +            // ===============================================================
    +<span class="nc bnc" id="L458" title="All 2 branches missed.">            else if (selPI != null) {</span>
    +                // Create the plug-in field-set
    +<span class="nc" id="L460">                b.append(sp(in) + &quot;&lt;fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L461">                b.append(sp(++in) + &quot;&lt;legend&gt;&quot;</span>
    +<span class="nc" id="L462">                        + selPI.getPluginName()</span>
    +<span class="nc" id="L463">                        + &quot;&lt;/legend&gt;\n&quot;);</span>
    +                //------------------------------------------------------------
    +                // Create the plug-in info table
    +                //------------------------------------------------------------
    +<span class="nc" id="L467">                b.append(sp(in) + &quot;&lt;table&gt;\n&quot;);</span>
    +<span class="nc" id="L468">                b.append(sp(++in) + &quot;&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L469">                b.append(sp(++in) + &quot;&lt;tr class=\&quot;head\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L470">                b.append(sp(++in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L471">                        + &quot; style=\&quot;width: 80px;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L472">                        + &quot;Status&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L473">                b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L474">                        + &quot; style=\&quot;width: 30%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L475">                        + &quot;Name&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L476">                b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L477">                        + &quot; style=\&quot;width: 40%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L478">                        + &quot;Class&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L479">                b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&gt;Version&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L480">                b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L481">                b.append(sp(--in) + &quot;&lt;/thead&gt;\n&quot;);</span>
    +                // Display the plug-in's info
    +<span class="nc" id="L483">                b.append(sp(in) + &quot;&lt;tbody&gt;\n&quot;);</span>
    +<span class="nc" id="L484">                b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +                // Plug-in state
    +<span class="nc" id="L486">                b.append(sp(++in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc bnc" id="L487" title="All 2 branches missed.">                        + ((selPI.installed) </span>
    +<span class="nc" id="L488">                                ? &quot;Installed&quot; : &quot;Registered&quot;)</span>
    +<span class="nc" id="L489">                                + &quot;&lt;/td&gt;\n&quot;);</span>
    +                // Plug-in name
    +<span class="nc" id="L491">                b.append(sp(in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc" id="L492">                        + selPI.getPluginName() + &quot;&lt;/td&gt;\n&quot;);</span>
    +                // Plug-in class
    +<span class="nc" id="L494">                b.append(sp(in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc" id="L495">                        + StringUtils.join((String[]) (</span>
    +<span class="nc" id="L496">                                selPI.getServiceRef().getProperty(</span>
    +<span class="nc" id="L497">                                        Constants.OBJECTCLASS)),&quot;,&quot;)</span>
    +<span class="nc" id="L498">                                        + &quot;&lt;/td&gt;\n&quot;);</span>
    +                // Plug-in version
    +<span class="nc" id="L500">                b.append(sp(in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc" id="L501">                        + selPI.getPluginVersion() + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L502">                b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                // Plug-in tool-bar
    +<span class="nc" id="L504">                b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L505">                b.append(sp(in++) + &quot;&lt;td colspan=\&quot;4\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L506">                b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L507">                        + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L508">                        + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L509">                        + &quot; value=\&quot;Plug-ins list\&quot;&quot;</span>
    +<span class="nc" id="L510">                        + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L511">                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L512">                        + reqParHashcode + &quot;').value='';&quot;</span>
    +<span class="nc" id="L513">                        + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L514">                        + &quot;&gt;\n&quot;);</span>
    +<span class="nc bnc" id="L515" title="All 2 branches missed.">                if (selPI.installed) {</span>
    +<span class="nc" id="L516">                    b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L517">                            + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L518">                            + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L519">                            + &quot; value=\&quot;Uninstall\&quot;&quot;</span>
    +<span class="nc" id="L520">                            + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L521">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L522">                            + reqParAction + &quot;').value='&quot;</span>
    +<span class="nc" id="L523">                            + actValUninstall + &quot;';&quot;</span>
    +<span class="nc" id="L524">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L525">                            + reqParHashcode +&quot;').value='&quot;</span>
    +<span class="nc" id="L526">                            + selPI.getHashcode() + &quot;';&quot;</span>
    +<span class="nc" id="L527">                            + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L528">                            + &quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L529">                    b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L530">                            + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L531">                            + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L532">                            + &quot; value=\&quot;Synchronise\&quot;&quot;</span>
    +<span class="nc" id="L533">                            + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L534">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L535">                            + reqParAction + &quot;').value='&quot;</span>
    +<span class="nc" id="L536">                            + actValSync + &quot;';&quot;</span>
    +<span class="nc" id="L537">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L538">                            + reqParHashcode +&quot;').value='&quot;</span>
    +<span class="nc" id="L539">                            + selPI.getHashcode() + &quot;';&quot;</span>
    +<span class="nc" id="L540">                            + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L541">                            + &quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L542">                }</span>
    +                else {
    +<span class="nc" id="L544">                    b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L545">                            + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L546">                            + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L547">                            + &quot; value=\&quot;Install\&quot;&quot;</span>
    +<span class="nc" id="L548">                            + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L549">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L550">                            + reqParAction + &quot;').value='&quot;</span>
    +<span class="nc" id="L551">                            + actValInstall + &quot;';&quot;</span>
    +<span class="nc" id="L552">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L553">                            + reqParHashcode +&quot;').value='&quot;</span>
    +<span class="nc" id="L554">                            + selPI.getHashcode() + &quot;';&quot;</span>
    +<span class="nc" id="L555">                            + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L556">                            + &quot;&gt;\n&quot;);</span>
    +                }
    +<span class="nc" id="L558">                b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L559">                b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                // Close the plug-in table
    +<span class="nc" id="L561">                b.append(sp(--in) + &quot;&lt;/tbody&gt;\n&quot;);</span>
    +<span class="nc" id="L562">                b.append(sp(--in) + &quot;&lt;/table&gt;\n&quot;);</span>
    +
    +                //------------------------------------------------------------
    +                // Registered metrics, activators and configuration 
    +                //------------------------------------------------------------
    +<span class="nc bnc" id="L567" title="All 2 branches missed.">                if (selPI.installed) {</span>
    +                    //--------------------------------------------------------
    +                    // Create the metrics field-set
    +                    //--------------------------------------------------------
    +<span class="nc" id="L571">                    b.append(sp(++in) + &quot;&lt;fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L572">                    b.append(sp(++in) + &quot;&lt;legend&gt;&quot;</span>
    +<span class="nc" id="L573">                            + &quot;Supported metrics&quot;</span>
    +<span class="nc" id="L574">                            + &quot;&lt;/legend&gt;\n&quot;);</span>
    +                    // Create the metrics table
    +<span class="nc" id="L576">                    b.append(sp(in) + &quot;&lt;table&gt;\n&quot;);</span>
    +<span class="nc" id="L577">                    b.append(sp(++in) + &quot;&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L578">                    b.append(sp(++in) + &quot;&lt;tr class=\&quot;head\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L579">                    b.append(sp(++in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L580">                            + &quot; style=\&quot;width: 10%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L581">                            + &quot;Id&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L582">                    b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L583">                            + &quot; style=\&quot;width: 25%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L584">                            + &quot;Name&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L585">                    b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L586">                            + &quot; style=\&quot;width: 25%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L587">                            + &quot;Type&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L588">                    b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L589">                            + &quot; style=\&quot;width: 40%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L590">                            + &quot;Description&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L591">                    b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L592">                    b.append(sp(--in) + &quot;&lt;/thead&gt;\n&quot;);</span>
    +                    // Display the list of supported metrics
    +<span class="nc" id="L594">                    b.append(sp(in++) + &quot;&lt;tbody&gt;\n&quot;);</span>
    +                    // Get the list of supported metrics
    +<span class="nc" id="L596">                    List&lt;Metric&gt; metrics =</span>
    +<span class="nc" id="L597">                        sobjPA.getPlugin(selPI).getAllSupportedMetrics();</span>
    +<span class="nc bnc" id="L598" title="All 4 branches missed.">                    if ((metrics == null) || (metrics.isEmpty())) {</span>
    +<span class="nc" id="L599">                        b.append(sp(in++) + &quot;&lt;tr&gt;&quot;);</span>
    +<span class="nc" id="L600">                        b.append(sp(in) + &quot;&lt;td colspan=\&quot;4\&quot; class=\&quot;noattr\&quot;&gt;&quot;</span>
    +<span class="nc" id="L601">                                + &quot;This plug-in does not support metrics.&quot;</span>
    +<span class="nc" id="L602">                                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L603">                        b.append(sp(--in)+ &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L604">                    }</span>
    +                    else {
    +<span class="nc bnc" id="L606" title="All 2 branches missed.">                        for (Metric metric: metrics) {</span>
    +<span class="nc" id="L607">                            b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L608">                            b.append(sp(in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc" id="L609">                                    + metric.getId() + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L610">                            b.append(sp(in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc" id="L611">                                    + metric.getMnemonic() + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L612">                            b.append(sp(in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc" id="L613">                                    + metric.getMetricType().getType()</span>
    +<span class="nc" id="L614">                                    + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L615">                            b.append(sp(in) + &quot;&lt;td&gt;&quot;</span>
    +<span class="nc" id="L616">                                    + metric.getDescription() + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L617">                            b.append(sp(--in)+ &quot;&lt;/tr&gt;\n&quot;);</span>
    +                        }
    +                    }
    +                    // Close the metrics table
    +<span class="nc" id="L621">                    b.append(sp(--in) + &quot;&lt;/tbody&gt;\n&quot;);</span>
    +                    // Close the metrics table
    +<span class="nc" id="L623">                    b.append(sp(--in) + &quot;&lt;/table&gt;\n&quot;);</span>
    +                    // Close the metric field-set
    +<span class="nc" id="L625">                    b.append(sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +                    //--------------------------------------------------------
    +                    // Create the properties field-set
    +                    //--------------------------------------------------------
    +<span class="nc" id="L629">                    b.append(sp(++in) + &quot;&lt;fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L630">                    b.append(sp(++in) + &quot;&lt;legend&gt;&quot;</span>
    +<span class="nc" id="L631">                            + &quot;Configuration properties&quot;</span>
    +<span class="nc" id="L632">                            + &quot;&lt;/legend&gt;\n&quot;);</span>
    +                    // Create the properties table
    +<span class="nc" id="L634">                    b.append(sp(in) + &quot;&lt;table&gt;\n&quot;);</span>
    +<span class="nc" id="L635">                    b.append(sp(++in) + &quot;&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L636">                    b.append(sp(++in) + &quot;&lt;tr class=\&quot;head\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L637">                    b.append(sp(++in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L638">                            + &quot; style=\&quot;width: 30%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L639">                            + &quot;Name&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L640">                    b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L641">                            + &quot; style=\&quot;width: 20%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L642">                            + &quot;Type&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L643">                    b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L644">                            + &quot; style=\&quot;width: 50%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L645">                            + &quot;Value&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L646">                    b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L647">                    b.append(sp(--in) + &quot;&lt;/thead&gt;\n&quot;);</span>
    +                    // Display the set of configuration properties
    +<span class="nc" id="L649">                    b.append(sp(in++) + &quot;&lt;tbody&gt;\n&quot;);</span>
    +                    // Get the plug-in's configuration set
    +<span class="nc" id="L651">                    Set&lt;PluginConfiguration&gt; config = Plugin.getPluginByHashcode(selPI.getHashcode()).getConfigurations();</span>
    +<span class="nc bnc" id="L652" title="All 4 branches missed.">                    if ((config == null) || (config.isEmpty())) {</span>
    +<span class="nc" id="L653">                        b.append(sp(in++) + &quot;&lt;tr&gt;&quot;);</span>
    +<span class="nc" id="L654">                        b.append(sp(in) + &quot;&lt;td colspan=\&quot;3\&quot; class=\&quot;noattr\&quot;&gt;&quot;</span>
    +<span class="nc" id="L655">                                + &quot;This plug-in has no configuration properties.&quot;</span>
    +<span class="nc" id="L656">                                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L657">                        b.append(sp(--in)+ &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L658">                    }</span>
    +                    else {
    +<span class="nc bnc" id="L660" title="All 2 branches missed.">                        for (PluginConfiguration param : config) {</span>
    +<span class="nc" id="L661">                            b.append(sp(in++) + &quot;&lt;tr class=\&quot;edit\&quot;&quot;</span>
    +<span class="nc" id="L662">                                    + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L663">                                    + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L664">                                    + reqParAction + &quot;').value='&quot;</span>
    +<span class="nc" id="L665">                                    + actValReqUpdProp + &quot;';&quot;</span>
    +<span class="nc" id="L666">                                    + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L667">                                    + reqParPropName + &quot;').value='&quot;</span>
    +<span class="nc" id="L668">                                    + param.getName() + &quot;';&quot;</span>
    +<span class="nc" id="L669">                                    + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L670">                                    + reqParPropType + &quot;').value='&quot;</span>
    +<span class="nc" id="L671">                                    + param.getType() + &quot;';&quot;</span>
    +<span class="nc" id="L672">                                    + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L673">                                    + reqParPropDescr + &quot;').value='&quot;</span>
    +<span class="nc" id="L674">                                    + param.getMsg() + &quot;';&quot;</span>
    +<span class="nc" id="L675">                                    + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L676">                                    + reqParPropValue + &quot;').value='&quot;</span>
    +<span class="nc" id="L677">                                    + param.getValue() + &quot;';&quot;</span>
    +<span class="nc" id="L678">                                    + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L679">                                    + &quot;&gt;\n&quot;);</span>
    +                            // Property's name and description
    +<span class="nc" id="L681">                            String description = param.getMsg();</span>
    +<span class="nc bnc" id="L682" title="All 2 branches missed.">                            if (param.getMsg() == null)</span>
    +<span class="nc" id="L683">                                description = &quot;No description available.&quot;;</span>
    +<span class="nc" id="L684">                            b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&quot;</span>
    +<span class="nc" id="L685">                                    + &quot; title=\&quot;&quot; + description + &quot;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L686">                                    + &quot;&lt;img src=\&quot;/edit.png\&quot; alt=\&quot;[Edit]\&quot;/&gt;&quot;</span>
    +<span class="nc" id="L687">                                    + &quot;&amp;nbsp;&quot; + param.getName()</span>
    +<span class="nc" id="L688">                                    + &quot;&lt;/td&gt;\n&quot;);</span>
    +                            // Property's type
    +<span class="nc" id="L690">                            b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L691">                                    + param.getType()</span>
    +<span class="nc" id="L692">                                    + &quot;&lt;/td&gt;\n&quot;);</span>
    +                            // Property's value
    +<span class="nc" id="L694">                            b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L695">                                    + param.getValue()</span>
    +<span class="nc" id="L696">                                    + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L697">                            b.append(sp(--in)+ &quot;&lt;/tr&gt;\n&quot;);</span>
    +                        }
    +                    }
    +                    // Command tool-bar
    +<span class="nc" id="L701">                    b.append(sp(in) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L702">                    b.append(sp(++in) + &quot;&lt;td colspan=\&quot;3\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L703">                    b.append(sp(++in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L704">                            + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L705">                            + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L706">                            + &quot; value=\&quot;Add property\&quot;&quot;</span>
    +<span class="nc" id="L707">                            + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L708">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L709">                            + reqParAction + &quot;').value='&quot;</span>
    +<span class="nc" id="L710">                            + actValReqAddProp + &quot;';&quot;</span>
    +<span class="nc" id="L711">                            + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L712">                            + &quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L713">                    b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L714">                    b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                    // Close the properties table
    +<span class="nc" id="L716">                    b.append(sp(--in) + &quot;&lt;/tbody&gt;\n&quot;);</span>
    +                    // Close the properties table
    +<span class="nc" id="L718">                    b.append(sp(--in) + &quot;&lt;/table&gt;\n&quot;);</span>
    +                    // Close the properties field-set
    +<span class="nc" id="L720">                    b.append(sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +                }
    +
    +                // Close the plug-in field-set
    +<span class="nc" id="L724">                b.append(sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L725">            }</span>
    +            // ===============================================================
    +            // Plug-ins list
    +            // ===============================================================
    +            else {
    +                // Create the field-set
    +<span class="nc" id="L731">                b.append(sp(in) + &quot;&lt;fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L732">                b.append(sp(++in) + &quot;&lt;legend&gt;All plug-ins&lt;/legend&gt;\n&quot;);</span>
    +                // Retrieve information for all registered metric plug-ins
    +<span class="nc" id="L734">                Collection&lt;PluginInfo&gt; l = sobjPA.listPlugins();</span>
    +                //------------------------------------------------------------
    +                // Create the header row
    +                //------------------------------------------------------------
    +<span class="nc" id="L738">                b.append(sp(in) + &quot;&lt;table&gt;\n&quot;);</span>
    +<span class="nc" id="L739">                b.append(sp(++in) + &quot;&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L740">                b.append(sp(++in) + &quot;&lt;tr class=\&quot;head\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L741">                b.append(sp(++in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L742">                        + &quot; style=\&quot;width: 80px;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L743">                        + &quot;Status&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L744">                b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L745">                        + &quot; style=\&quot;width: 30%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L746">                        + &quot;Name&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L747">                b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&quot;</span>
    +<span class="nc" id="L748">                        + &quot; style=\&quot;width: 40%;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L749">                        + &quot;Class&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L750">                b.append(sp(in) + &quot;&lt;td class=\&quot;head\&quot;&gt;Version&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L751">                b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L752">                b.append(sp(--in) + &quot;&lt;/thead&gt;\n&quot;);</span>
    +                //------------------------------------------------------------
    +                // Create the content row
    +                //------------------------------------------------------------
    +<span class="nc" id="L756">                b.append(sp(in++) + &quot;&lt;tbody&gt;\n&quot;);</span>
    +                //------------------------------------------------------------
    +                // Display not-installed plug-ins first
    +                //------------------------------------------------------------
    +<span class="nc bnc" id="L760" title="All 2 branches missed.">                for(PluginInfo i : l) {</span>
    +<span class="nc bnc" id="L761" title="All 2 branches missed.">                    if (i.installed == false) {</span>
    +<span class="nc" id="L762">                        b.append(sp(in) + &quot;&lt;tr class=\&quot;edit\&quot;&quot;</span>
    +<span class="nc" id="L763">                                + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L764">                                + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L765">                                + reqParHashcode + &quot;').value='&quot;</span>
    +<span class="nc" id="L766">                                + i.getHashcode() + &quot;';&quot;</span>
    +<span class="nc" id="L767">                                + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L768">                                + &quot;&gt;\n&quot;);</span>
    +                        // Plug-in state
    +<span class="nc" id="L770">                        b.append(sp(++in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L771">                                + &quot;&lt;img src=\&quot;/edit.png\&quot; alt=\&quot;[Edit]\&quot;/&gt;&quot;</span>
    +<span class="nc" id="L772">                                + &quot;&amp;nbsp;Registered&lt;/td&gt;\n&quot;);</span>
    +                        // Plug-in name
    +<span class="nc" id="L774">                        b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L775">                            + i.getPluginName()</span>
    +<span class="nc" id="L776">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +                        // Plug-in class
    +<span class="nc" id="L778">                        b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L779">                                + StringUtils.join((String[]) (</span>
    +<span class="nc" id="L780">                                        i.getServiceRef().getProperty(</span>
    +<span class="nc" id="L781">                                                Constants.OBJECTCLASS)),&quot;,&quot;)</span>
    +<span class="nc" id="L782">                                                + &quot;&lt;/td&gt;\n&quot;);</span>
    +                        // Plug-in version
    +<span class="nc" id="L784">                        b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L785">                                + i.getPluginVersion() + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L786">                        b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                        // Extended plug-in information
    +<span class="nc" id="L788">                        b.append(renderPluginAttributes(</span>
    +<span class="nc" id="L789">                                i, reqValShowProp, reqValShowActv, in));</span>
    +                    }
    +                }
    +                //------------------------------------------------------------
    +                // Installed plug-ins
    +                //------------------------------------------------------------
    +<span class="nc bnc" id="L795" title="All 2 branches missed.">                for(PluginInfo i : l) {</span>
    +<span class="nc bnc" id="L796" title="All 2 branches missed.">                    if (i.installed) {</span>
    +<span class="nc" id="L797">                        b.append(sp(in) + &quot;&lt;tr class=\&quot;edit\&quot;&quot;</span>
    +<span class="nc" id="L798">                                + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L799">                                + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L800">                                + reqParHashcode + &quot;').value='&quot;</span>
    +<span class="nc" id="L801">                                + i.getHashcode() + &quot;';&quot;</span>
    +<span class="nc" id="L802">                                + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L803">                                + &quot;&gt;\n&quot;);</span>
    +                        // Plug-in state
    +<span class="nc" id="L805">                        b.append(sp(++in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L806">                                + &quot;&lt;img src=\&quot;/edit.png\&quot; alt=\&quot;[Edit]\&quot;/&gt;&quot;</span>
    +<span class="nc" id="L807">                                + &quot;&amp;nbsp;Installed&lt;/td&gt;\n&quot;);</span>
    +                        // Plug-in name
    +<span class="nc" id="L809">                        b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L810">                                + i.getPluginName()</span>
    +<span class="nc" id="L811">                                + &quot;&lt;/td&gt;\n&quot;);</span>
    +                        // Plug-in class
    +<span class="nc" id="L813">                        b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L814">                                + StringUtils.join((String[]) (</span>
    +<span class="nc" id="L815">                                        i.getServiceRef().getProperty(</span>
    +<span class="nc" id="L816">                                                Constants.OBJECTCLASS)),&quot;,&quot;)</span>
    +<span class="nc" id="L817">                                                + &quot;&lt;/td&gt;\n&quot;);</span>
    +                        // Plug-in version
    +<span class="nc" id="L819">                        b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L820">                                + i.getPluginVersion() + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L821">                        b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +                        // Extended plug-in information
    +<span class="nc" id="L823">                        b.append(renderPluginAttributes(</span>
    +<span class="nc" id="L824">                                i, reqValShowProp, reqValShowActv, in));</span>
    +                    }
    +                }
    +                //------------------------------------------------------------
    +                // Close the table
    +                //------------------------------------------------------------
    +<span class="nc" id="L830">                b.append(sp(--in) + &quot;&lt;/tbody&gt;\n&quot;);</span>
    +<span class="nc" id="L831">                b.append(sp(--in) + &quot;&lt;/table&gt;\n&quot;);</span>
    +                //------------------------------------------------------------
    +                // Display flags
    +                //------------------------------------------------------------
    +<span class="nc" id="L835">                b.append(sp(in) + &quot;&lt;span&gt;\n&quot;);</span>
    +<span class="nc" id="L836">                b.append(sp(++in) + &quot;&lt;input&quot;</span>
    +<span class="nc" id="L837">                        + &quot; type=\&quot;checkbox\&quot;&quot;</span>
    +<span class="nc bnc" id="L838" title="All 2 branches missed.">                        + ((reqValShowProp) ? &quot;checked&quot; : &quot;&quot;)</span>
    +<span class="nc" id="L839">                        + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L840">                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L841">                        + reqParShowProp + &quot;').value = this.checked;&quot;</span>
    +<span class="nc" id="L842">                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L843">                        + reqParHashcode + &quot;').value='';&quot;</span>
    +<span class="nc" id="L844">                        + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L845">                        + &quot;&gt;Display properties\n&quot;);</span>
    +<span class="nc" id="L846">                b.append(sp(++in) + &quot;&lt;input&quot;</span>
    +<span class="nc" id="L847">                        + &quot; type=\&quot;checkbox\&quot;&quot;</span>
    +<span class="nc bnc" id="L848" title="All 2 branches missed.">                        + ((reqValShowActv) ? &quot;checked&quot; : &quot;&quot;)</span>
    +<span class="nc" id="L849">                        + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L850">                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L851">                        + reqParShowActv + &quot;').value = this.checked;&quot;</span>
    +<span class="nc" id="L852">                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L853">                        + reqParHashcode + &quot;').value='';&quot;</span>
    +<span class="nc" id="L854">                        + &quot;document.metrics.submit();\&quot;&quot;</span>
    +<span class="nc" id="L855">                        + &quot;&gt;Display activators\n&quot;);</span>
    +<span class="nc" id="L856">                b.append(sp(--in) + &quot;&lt;/span&gt;\n&quot;);</span>
    +                // Close the field-set
    +<span class="nc" id="L858">                b.append(sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +            }
    +
    +            // ===============================================================
    +            // INPUT FIELDS
    +            // ===============================================================
    +            // &quot;Action type&quot; input field
    +<span class="nc" id="L865">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L866">                    + &quot; id=\&quot;&quot; + reqParAction + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L867">                    + &quot; name=\&quot;&quot; + reqParAction + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L868">                    + &quot; value=\&quot;\&quot;&gt;\n&quot;);</span>
    +            // &quot;Selected plug-in's hash code&quot; input field
    +<span class="nc" id="L870">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L871">                    + &quot; id=\&quot;&quot; + reqParHashcode + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L872">                    + &quot; name=\&quot;&quot; + reqParHashcode + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L873">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc bnc" id="L874" title="All 2 branches missed.">                    + ((reqValHashcode != null) ? reqValHashcode : &quot;&quot;)</span>
    +<span class="nc" id="L875">                    + &quot;\&quot;&gt;\n&quot;);</span>
    +            // &quot;Configuration attribute's name&quot; input field
    +<span class="nc" id="L877">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L878">                    + &quot; id=\&quot;&quot; + reqParPropName + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L879">                    + &quot; name=\&quot;&quot; + reqParPropName + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L880">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc bnc" id="L881" title="All 2 branches missed.">                    + ((reqValPropName != null) ? reqValPropName : &quot;&quot;)</span>
    +<span class="nc" id="L882">                    + &quot;\&quot;&gt;\n&quot;);</span>
    +            // &quot;Configuration attribute's description&quot; input field
    +<span class="nc" id="L884">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L885">                    + &quot; id=\&quot;&quot; + reqParPropDescr + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L886">                    + &quot; name=\&quot;&quot; + reqParPropDescr + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L887">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc bnc" id="L888" title="All 2 branches missed.">                    + ((reqValPropDescr != null) ? reqValPropDescr : &quot;&quot;)</span>
    +<span class="nc" id="L889">                    + &quot;\&quot;&gt;\n&quot;);</span>
    +            // &quot;Configuration attribute's type&quot; input field
    +<span class="nc" id="L891">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L892">                    + &quot; id=\&quot;&quot; + reqParPropType + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L893">                    + &quot; name=\&quot;&quot; + reqParPropType + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L894">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc bnc" id="L895" title="All 2 branches missed.">                    + ((reqValPropType != null) ? reqValPropType : &quot;&quot;)</span>
    +<span class="nc" id="L896">                    + &quot;\&quot;&gt;\n&quot;);</span>
    +            // &quot;Configuration attribute's value&quot; input field
    +<span class="nc" id="L898">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L899">                    + &quot; id=\&quot;&quot; + reqParPropValue + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L900">                    + &quot; name=\&quot;&quot; + reqParPropValue + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L901">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc bnc" id="L902" title="All 2 branches missed.">                    + ((reqValPropValue != null) ? reqValPropValue : &quot;&quot;)</span>
    +<span class="nc" id="L903">                    + &quot;\&quot;&gt;\n&quot;);</span>
    +            // &quot;Show configuration properties&quot; input field
    +<span class="nc" id="L905">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L906">                    + &quot; id=\&quot;&quot; + reqParShowProp + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L907">                    + &quot; name=\&quot;&quot; + reqParShowProp + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L908">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc" id="L909">                    + reqValShowProp</span>
    +<span class="nc" id="L910">                    + &quot;\&quot;&gt;\n&quot;);</span>
    +            // &quot;Show activators&quot; input field
    +<span class="nc" id="L912">            b.append(sp(in) + &quot;&lt;input type=\&quot;hidden\&quot;&quot;</span>
    +<span class="nc" id="L913">                    + &quot; id=\&quot;&quot; + reqParShowActv + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L914">                    + &quot; name=\&quot;&quot; + reqParShowActv + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L915">                    + &quot; value=\&quot;&quot;</span>
    +<span class="nc" id="L916">                    + reqValShowActv</span>
    +<span class="nc" id="L917">                    + &quot;\&quot;&gt;\n&quot;);</span>
    +
    +            // ===============================================================
    +            // Close the form
    +            // ===============================================================
    +<span class="nc" id="L922">            b.append(sp(--in) + &quot;&lt;/form&gt;\n&quot;);</span>
    +        }
    +
    +<span class="nc" id="L925">        return b.toString();</span>
    +    }
    +
    +    /**
    +     * Creates a set of table rows populated with the plug-in properties and
    +     * activators, as found in the given &lt;code&gt;PluginInfo&lt;/code&gt; object
    +     * 
    +     * @param pluginInfo the plug-in's &lt;code&gt;PluginInfo&lt;/code&gt; object
    +     * @param showProperties display flag
    +     * @param showActivators display flag
    +     * @param in indentation value for the generated HTML content
    +     * 
    +     * @return The table as HTML presentation.
    +     */
    +    private static String renderPluginAttributes(
    +            PluginInfo pluginInfo,
    +            boolean showProperties,
    +            boolean showActivators,
    +            long in) {
    +        // Stores the assembled HTML content
    +<span class="nc" id="L945">        StringBuilder b = new StringBuilder();</span>
    +        // List the metric plug-in's configuration properties
    +<span class="nc bnc" id="L947" title="All 2 branches missed.">        if (showProperties) {</span>
    +<span class="nc" id="L948">            Set&lt;PluginConfiguration&gt; l =</span>
    +<span class="nc" id="L949">                pluginInfo.getConfiguration();</span>
    +            // Skip if this plug-ins has no configuration
    +<span class="nc bnc" id="L951" title="All 4 branches missed.">            if ((l != null) &amp;&amp; (l.isEmpty() == false)) {</span>
    +<span class="nc bnc" id="L952" title="All 2 branches missed.">                for (PluginConfiguration property : l) {</span>
    +<span class="nc" id="L953">                    b.append(sp(in++) + &quot;&lt;tr&gt;&quot;);</span>
    +<span class="nc" id="L954">                    b.append(sp(in) + &quot;&lt;td&gt;&amp;nbsp;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L955">                    b.append(sp(in) + &quot;&lt;td colspan=\&quot;3\&quot; class=\&quot;attr\&quot;&gt;&quot;</span>
    +<span class="nc" id="L956">                            + &quot;&lt;b&gt;Property:&lt;/b&gt; &quot; + property.getName()</span>
    +<span class="nc" id="L957">                            + &quot;&amp;nbsp;&lt;b&gt;Type:&lt;/b&gt; &quot; + property.getType()</span>
    +<span class="nc" id="L958">                            + &quot;&amp;nbsp;&lt;b&gt;Value:&lt;/b&gt; &quot; + property.getValue()</span>
    +<span class="nc" id="L959">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L960">                    b.append(sp(--in)+ &quot;&lt;/tr&gt;\n&quot;);</span>
    +                }
    +            }
    +        }
    +        // List the metric plug-in's activator types
    +<span class="nc bnc" id="L965" title="All 2 branches missed.">        if (showActivators) {</span>
    +<span class="nc" id="L966">            Set&lt;Class&lt;? extends DAObject&gt;&gt; activators =</span>
    +<span class="nc" id="L967">                pluginInfo.getActivationTypes();</span>
    +            // Skip if this plug-ins has no activators
    +<span class="nc bnc" id="L969" title="All 2 branches missed.">            if (activators != null) {</span>
    +<span class="nc bnc" id="L970" title="All 2 branches missed.">                for (Class&lt;? extends DAObject&gt; activator : activators) {</span>
    +<span class="nc" id="L971">                    b.append(&quot;&lt;tr&gt;&quot;);</span>
    +<span class="nc" id="L972">                    b.append(&quot;&lt;td&gt;&amp;nbsp;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L973">                    b.append(&quot;&lt;td colspan=\&quot;3\&quot; class=\&quot;attr\&quot;&gt;&quot;</span>
    +                            + &quot;&lt;b&gt;Activator:&lt;/b&gt; &quot;
    +<span class="nc" id="L975">                            + activator.getName()</span>
    +<span class="nc" id="L976">                            + &quot;&lt;/td&gt;&quot;);</span>
    +<span class="nc" id="L977">                    b.append(&quot;&lt;/tr&gt;\n&quot;);</span>
    +                }
    +            }
    +        }
    +<span class="nc" id="L981">        return b.toString();</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectDeleteJob.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectDeleteJob.html
    new file mode 100644
    index 000000000..ee66fbcae
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectDeleteJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectDeleteJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">ProjectDeleteJob</span></div><h1>ProjectDeleteJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">133 of 133</td><td class="ctr2">0%</td><td class="bar">12 of 12</td><td class="ctr2">0%</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">31</td><td class="ctr2">31</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a2"><a href="ProjectDeleteJob.java.html#L66" class="el_method">run()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="111" alt="111"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">25</td><td class="ctr2" id="i0">25</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="ProjectDeleteJob.java.html#L123" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="11" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="ProjectDeleteJob.java.html#L53" class="el_method">ProjectDeleteJob(AlitheiaCore, StoredProject)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="9" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ProjectDeleteJob.java.html#L60" class="el_method">priority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectDeleteJob.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectDeleteJob.java.html
    new file mode 100644
    index 000000000..7f14fdc6e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectDeleteJob.java.html
    @@ -0,0 +1,126 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectDeleteJob.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_source">ProjectDeleteJob.java</span></div><h1>ProjectDeleteJob.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.webadmin;
    +
    +import java.util.HashMap;
    +import java.util.List;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Plugin;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.db.StoredProjectConfig;
    +import eu.sqooss.service.scheduler.Job;
    +
    +public class ProjectDeleteJob extends Job {
    +
    +	private StoredProject sp;
    +    private AlitheiaCore core;
    +
    +<span class="nc" id="L53">    ProjectDeleteJob(AlitheiaCore core, StoredProject sp) {</span>
    +<span class="nc" id="L54">        this.sp = sp;</span>
    +<span class="nc" id="L55">        this.core = core;</span>
    +<span class="nc" id="L56">    }</span>
    +
    +    @Override
    +    public long priority() {
    +<span class="nc" id="L60">        return 0xff;</span>
    +    }
    +
    +    @SuppressWarnings(&quot;unchecked&quot;)
    +    @Override
    +    protected void run() throws Exception {
    +<span class="nc" id="L66">        DBService dbs = core.getDBService();</span>
    +
    +<span class="nc bnc" id="L68" title="All 2 branches missed.">        if (!dbs.isDBSessionActive()) {</span>
    +<span class="nc" id="L69">            dbs.startDBSession();</span>
    +        }
    +
    +<span class="nc" id="L72">        sp = dbs.attachObjectToDBSession(sp);</span>
    +        // Delete any associated invocation rules first
    +<span class="nc" id="L74">        HashMap&lt;String, Object&gt; properties = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L75">        properties.put(&quot;project&quot;, sp);</span>
    +
    +        //Cleanup plugin results
    +<span class="nc" id="L78">        List&lt;Plugin&gt; ps = (List&lt;Plugin&gt;) dbs.doHQL(&quot;from Plugin&quot;);        </span>
    +        
    +<span class="nc bnc" id="L80" title="All 2 branches missed.">        for (Plugin p : ps ) {</span>
    +<span class="nc" id="L81">            AlitheiaPlugin ap = core.getPluginAdmin().getPlugin(core.getPluginAdmin().getPluginInfo(p.getHashcode()));</span>
    +<span class="nc bnc" id="L82" title="All 2 branches missed.">            if (ap == null) {</span>
    +            	//logger.warn(&quot;Plugin with hashcode: &quot;+ p.getHashcode() + 
    +            	//		&quot; not installed&quot;);
    +<span class="nc" id="L85">            	continue;</span>
    +            }
    +            	
    +<span class="nc" id="L88">            ap.cleanup(sp);</span>
    +        }
    +        
    +<span class="nc" id="L91">        boolean success = true;</span>
    +        
    +        // Delete project version's parents.
    +<span class="nc" id="L94">        List&lt;ProjectVersion&gt; versions = sp.getProjectVersions();</span>
    +        
    +<span class="nc bnc" id="L96" title="All 2 branches missed.">        for (ProjectVersion pv : versions) {</span>
    +           /* Set&lt;ProjectVersionParent&gt; parents = pv.getParents();
    +            for (ProjectVersionParent pvp : parents) {
    +                
    +            }*/
    +<span class="nc" id="L101">            pv.getParents().clear();</span>
    +        }
    +               
    +        //Delete the project's config options
    +<span class="nc" id="L105">        List&lt;StoredProjectConfig&gt; confParams = StoredProjectConfig.fromProject(sp);</span>
    +<span class="nc bnc" id="L106" title="All 2 branches missed.">        if (!confParams.isEmpty()) {</span>
    +<span class="nc" id="L107">        	success &amp;= dbs.deleteRecords(confParams);</span>
    +        }
    +        
    +        // Delete the selected project
    +<span class="nc" id="L111">        success &amp;= dbs.deleteRecord(sp);</span>
    +
    +<span class="nc bnc" id="L113" title="All 2 branches missed.">        if (success) {</span>
    +<span class="nc" id="L114">            dbs.commitDBSession();</span>
    +<span class="nc" id="L115">        } else {</span>
    +<span class="nc" id="L116">            dbs.rollbackDBSession();</span>
    +        }
    +
    +<span class="nc" id="L119">    }</span>
    +    
    +    @Override
    +    public String toString() {
    +<span class="nc" id="L123">        return &quot;ProjectDeleteJob - Project:{&quot; + sp +&quot;}&quot;;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectsView.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectsView.html
    new file mode 100644
    index 000000000..73b50bf4b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectsView.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectsView</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">ProjectsView</span></div><h1>ProjectsView</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2,500 of 2,500</td><td class="ctr2">0%</td><td class="bar">100 of 100</td><td class="ctr2">0%</td><td class="ctr1">64</td><td class="ctr2">64</td><td class="ctr1">388</td><td class="ctr2">388</td><td class="ctr1">14</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a4"><a href="ProjectsView.java.html#L274" class="el_method">createFrom(StringBuilder, StringBuilder, StoredProject, String, int)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,169" alt="1,169"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">20</td><td class="ctr2" id="g0">20</td><td class="ctr1" id="h0">187</td><td class="ctr2" id="i0">187</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="ProjectsView.java.html#L565" class="el_method">addToolBar(StoredProject, StringBuilder, long)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="592" alt="592"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="63" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">11</td><td class="ctr1" id="h1">37</td><td class="ctr2" id="i1">37</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ProjectsView.java.html#L647" class="el_method">addHeaderRow(StringBuilder, long)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="20" height="10" title="200" alt="200"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h3">27</td><td class="ctr2" id="i3">27</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="ProjectsView.java.html#L107" class="el_method">render(HttpServletRequest)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="12" height="10" title="119" alt="119"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="56" height="10" title="18" alt="18"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">10</td><td class="ctr2" id="g2">10</td><td class="ctr1" id="h2">32</td><td class="ctr2" id="i2">32</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="ProjectsView.java.html#L549" class="el_method">addHiddenFields(StoredProject, StringBuilder, long)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="7" height="10" title="71" alt="71"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">10</td><td class="ctr2" id="i7">10</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="ProjectsView.java.html#L620" class="el_method">showLastAppliedVersion(StoredProject, Collection, StringBuilder)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="7" height="10" title="71" alt="71"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">20</td><td class="ctr2" id="i4">20</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a2"><a href="ProjectsView.java.html#L165" class="el_method">addProject(StringBuilder, HttpServletRequest, int)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="6" height="10" title="62" alt="62"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h6">13</td><td class="ctr2" id="i6">13</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a6"><a href="ProjectsView.java.html#L188" class="el_method">removeProject(StringBuilder, StoredProject, int)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="4" height="10" title="45" alt="45"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h9">9</td><td class="ctr2" id="i9">9</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a9"><a href="ProjectsView.java.html#L64" class="el_method">static {...}</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="4" height="10" title="39" alt="39"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h5">19</td><td class="ctr2" id="i5">19</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a10"><a href="ProjectsView.java.html#L255" class="el_method">syncPlugin(StringBuilder, StoredProject, String)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="3" height="10" title="38" alt="38"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="25" height="10" title="8" alt="8"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g3">5</td><td class="ctr1" id="h10">9</td><td class="ctr2" id="i10">9</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a13"><a href="ProjectsView.java.html#L209" class="el_method">triggerUpdate(StringBuilder, StoredProject, int, String)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="3" height="10" title="37" alt="37"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h8">10</td><td class="ctr2" id="i8">10</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a11"><a href="ProjectsView.java.html#L227" class="el_method">triggerAllUpdate(StringBuilder, StoredProject, int)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="3" height="10" title="33" alt="33"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h11">9</td><td class="ctr2" id="i11">9</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a12"><a href="ProjectsView.java.html#L244" class="el_method">triggerAllUpdateNode(StringBuilder, StoredProject, int)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h12">4</td><td class="ctr2" id="i12">4</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a5"><a href="ProjectsView.java.html#L95" class="el_method">ProjectsView(BundleContext, VelocityContext)</a></td><td class="bar" id="b13"/><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">2</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectsView.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectsView.java.html
    new file mode 100644
    index 000000000..75c9d128d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/ProjectsView.java.html
    @@ -0,0 +1,678 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectsView.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_source">ProjectsView.java</span></div><h1>ProjectsView.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.webadmin;
    +
    +import java.util.Collection;
    +import java.util.HashMap;
    +import java.util.List;
    +import java.util.Set;
    +
    +import javax.servlet.http.HttpServletRequest;
    +
    +import org.apache.velocity.VelocityContext;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.abstractmetric.PluginInfo;
    +import eu.sqooss.service.admin.AdminAction;
    +import eu.sqooss.service.admin.AdminService;
    +import eu.sqooss.service.admin.actions.AddProject;
    +import eu.sqooss.service.admin.actions.UpdateProject;
    +import eu.sqooss.service.db.Bug;
    +import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.MailMessage;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +import eu.sqooss.service.updater.Updater;
    +import eu.sqooss.service.updater.UpdaterService.UpdaterStage;
    +
    +public class ProjectsView extends AbstractView {
    +    // Script for submitting this page
    +<span class="nc" id="L64">    private static String SUBMIT = &quot;document.projects.submit();&quot;;</span>
    +
    +    // Action parameter's values
    +<span class="nc" id="L67">    private static String ACT_REQ_ADD_PROJECT   = &quot;reqAddProject&quot;;</span>
    +<span class="nc" id="L68">    private static String ACT_CON_ADD_PROJECT   = &quot;conAddProject&quot;;</span>
    +<span class="nc" id="L69">    private static String ACT_REQ_REM_PROJECT   = &quot;reqRemProject&quot;;</span>
    +<span class="nc" id="L70">    private static String ACT_CON_REM_PROJECT   = &quot;conRemProject&quot;;</span>
    +<span class="nc" id="L71">    private static String ACT_REQ_SHOW_PROJECT  = &quot;conShowProject&quot;;</span>
    +<span class="nc" id="L72">    private static String ACT_CON_UPD_ALL       = &quot;conUpdateAll&quot;;</span>
    +<span class="nc" id="L73">    private static String ACT_CON_UPD           = &quot;conUpdate&quot;;</span>
    +<span class="nc" id="L74">    private static String ACT_CON_UPD_ALL_NODE  = &quot;conUpdateAllOnNode&quot;;</span>
    +
    +    // Servlet parameters
    +<span class="nc" id="L77">    private static String REQ_PAR_ACTION        = &quot;reqAction&quot;;</span>
    +<span class="nc" id="L78">    private static String REQ_PAR_PROJECT_ID    = &quot;projectId&quot;;</span>
    +<span class="nc" id="L79">    private static String REQ_PAR_PRJ_NAME      = &quot;projectName&quot;;</span>
    +<span class="nc" id="L80">    private static String REQ_PAR_PRJ_WEB       = &quot;projectHomepage&quot;;</span>
    +<span class="nc" id="L81">    private static String REQ_PAR_PRJ_CONT      = &quot;projectContact&quot;;</span>
    +<span class="nc" id="L82">    private static String REQ_PAR_PRJ_BUG       = &quot;projectBL&quot;;</span>
    +<span class="nc" id="L83">    private static String REQ_PAR_PRJ_MAIL      = &quot;projectML&quot;;</span>
    +<span class="nc" id="L84">    private static String REQ_PAR_PRJ_CODE      = &quot;projectSCM&quot;;</span>
    +<span class="nc" id="L85">    private static String REQ_PAR_SYNC_PLUGIN   = &quot;reqParSyncPlugin&quot;;</span>
    +<span class="nc" id="L86">    private static String REQ_PAR_UPD           = &quot;reqUpd&quot;;</span>
    +    
    +    /**
    +     * Instantiates a new projects view.
    +     *
    +     * @param bundlecontext the &lt;code&gt;BundleContext&lt;/code&gt; object
    +     * @param vc the &lt;code&gt;VelocityContext&lt;/code&gt; object
    +     */
    +    public ProjectsView(BundleContext bundlecontext, VelocityContext vc) {
    +<span class="nc" id="L95">        super(bundlecontext, vc);</span>
    +<span class="nc" id="L96">    }</span>
    +
    +    /**
    +     * Renders the various project's views.
    +     *
    +     * @param req the servlet's request object
    +     *
    +     * @return The HTML presentation of the generated view.
    +     */
    +    public static String render(HttpServletRequest req) {
    +        // Stores the assembled HTML content
    +<span class="nc" id="L107">        StringBuilder b = new StringBuilder(&quot;\n&quot;);</span>
    +        // Stores the accumulated error messages
    +<span class="nc" id="L109">        StringBuilder e = new StringBuilder();</span>
    +        // Indentation spacer
    +<span class="nc" id="L111">        int in = 6;</span>
    +
    +        // Initialize the resource bundles with the request's locale
    +<span class="nc" id="L114">        initResources(req.getLocale());</span>
    +
    +        // Request values
    +<span class="nc" id="L117">        String reqValAction        = &quot;&quot;;</span>
    +<span class="nc" id="L118">        Long   reqValProjectId     = null;</span>
    +
    +        // Selected project
    +<span class="nc" id="L121">        StoredProject selProject = null;</span>
    +
    +        // ===============================================================
    +        // Parse the servlet's request object
    +        // ===============================================================
    +<span class="nc bnc" id="L126" title="All 2 branches missed.">        if (req != null) {</span>
    +            // DEBUG: Dump the servlet's request parameter
    +<span class="nc bnc" id="L128" title="All 2 branches missed.">            if (DEBUG) {</span>
    +<span class="nc" id="L129">                b.append(debugRequest(req));</span>
    +            }
    +
    +            // Retrieve the selected editor's action (if any)
    +<span class="nc" id="L133">            reqValAction = req.getParameter(REQ_PAR_ACTION);</span>
    +            
    +            // Retrieve the selected project's DAO (if any)
    +<span class="nc" id="L136">            reqValProjectId = fromString(req.getParameter(REQ_PAR_PROJECT_ID));</span>
    +<span class="nc bnc" id="L137" title="All 2 branches missed.">            if (reqValProjectId != null) {</span>
    +<span class="nc" id="L138">                selProject = sobjDB.findObjectById(</span>
    +<span class="nc" id="L139">                        StoredProject.class, reqValProjectId);</span>
    +            }
    +            
    +<span class="nc bnc" id="L142" title="All 2 branches missed.">            if (reqValAction == null) {</span>
    +<span class="nc" id="L143">                reqValAction = &quot;&quot;;</span>
    +<span class="nc bnc" id="L144" title="All 2 branches missed.">            } else if (reqValAction.equals(ACT_CON_ADD_PROJECT)) {</span>
    +<span class="nc" id="L145">            	selProject = addProject(e, req, in);</span>
    +<span class="nc bnc" id="L146" title="All 2 branches missed.">            } else if (reqValAction.equals(ACT_CON_REM_PROJECT)) {</span>
    +<span class="nc" id="L147">            	selProject = removeProject(e, selProject, in);</span>
    +<span class="nc bnc" id="L148" title="All 2 branches missed.">            } else if (reqValAction.equals(ACT_CON_UPD)) {</span>
    +<span class="nc" id="L149">            	triggerUpdate(e, selProject, in, req.getParameter(REQ_PAR_UPD));</span>
    +<span class="nc bnc" id="L150" title="All 2 branches missed.">            } else if (reqValAction.equals(ACT_CON_UPD_ALL)) {</span>
    +<span class="nc" id="L151">            	triggerAllUpdate(e, selProject, in);</span>
    +<span class="nc bnc" id="L152" title="All 2 branches missed.">            } else if (reqValAction.equals(ACT_CON_UPD_ALL_NODE)) {</span>
    +<span class="nc" id="L153">            	triggerAllUpdateNode(e, selProject, in);</span>
    +<span class="nc" id="L154">            } else {</span>
    +            	// Retrieve the selected plug-in's hash-code
    +<span class="nc" id="L156">        		String reqValSyncPlugin = req.getParameter(REQ_PAR_SYNC_PLUGIN);</span>
    +<span class="nc" id="L157">        		syncPlugin(e, selProject, reqValSyncPlugin);</span>
    +            }
    +        }
    +<span class="nc" id="L160">        createFrom(b, e, selProject, reqValAction , in);</span>
    +<span class="nc" id="L161">        return b.toString();</span>
    +    }
    +  
    +    private static StoredProject addProject(StringBuilder e, HttpServletRequest r, int indent) {
    +<span class="nc" id="L165">        AdminService as = AlitheiaCore.getInstance().getAdminService();</span>
    +<span class="nc" id="L166">    	AdminAction aa = as.create(AddProject.MNEMONIC);</span>
    +<span class="nc" id="L167">    	aa.addArg(&quot;scm&quot;, r.getParameter(REQ_PAR_PRJ_CODE));</span>
    +<span class="nc" id="L168">    	aa.addArg(&quot;name&quot;, r.getParameter(REQ_PAR_PRJ_NAME));</span>
    +<span class="nc" id="L169">    	aa.addArg(&quot;bts&quot;, r.getParameter(REQ_PAR_PRJ_BUG));</span>
    +<span class="nc" id="L170">    	aa.addArg(&quot;mail&quot;, r.getParameter(REQ_PAR_PRJ_MAIL));</span>
    +<span class="nc" id="L171">    	aa.addArg(&quot;web&quot;, r.getParameter(REQ_PAR_PRJ_WEB));</span>
    +<span class="nc" id="L172">    	as.execute(aa);</span>
    +    	
    +<span class="nc bnc" id="L174" title="All 2 branches missed.">    	if (aa.hasErrors()) {</span>
    +<span class="nc" id="L175">            vc.put(&quot;RESULTS&quot;, aa.errors());</span>
    +<span class="nc" id="L176">            return null;</span>
    +    	} else { 
    +<span class="nc" id="L178">            vc.put(&quot;RESULTS&quot;, aa.results());</span>
    +<span class="nc" id="L179">            return StoredProject.getProjectByName(r.getParameter(REQ_PAR_PRJ_NAME));</span>
    +    	}
    +    }
    +    
    +    // ---------------------------------------------------------------
    +    // Remove project
    +    // ---------------------------------------------------------------
    +    private static StoredProject removeProject(StringBuilder e, 
    +    		StoredProject selProject, int indent) {
    +<span class="nc bnc" id="L188" title="All 2 branches missed.">    	if (selProject != null) {</span>
    +			// Deleting large projects in the foreground is
    +			// very slow
    +<span class="nc" id="L191">			ProjectDeleteJob pdj = new ProjectDeleteJob(sobjCore, selProject);</span>
    +			try {
    +<span class="nc" id="L193">				sobjSched.enqueue(pdj);</span>
    +<span class="nc" id="L194">			} catch (SchedulerException e1) {</span>
    +<span class="nc" id="L195">				e.append(sp(indent)).append(getErr(&quot;e0034&quot;)).append(&quot;&lt;br/&gt;\n&quot;);</span>
    +			}
    +<span class="nc" id="L197">			selProject = null;</span>
    +<span class="nc" id="L198">		} else {</span>
    +<span class="nc" id="L199">			e.append(sp(indent) + getErr(&quot;e0034&quot;) + &quot;&lt;br/&gt;\n&quot;);</span>
    +		}
    +<span class="nc" id="L201">    	return selProject;</span>
    +    }
    +
    +	// ---------------------------------------------------------------
    +	// Trigger an update
    +	// ---------------------------------------------------------------
    +	private static void triggerUpdate(StringBuilder e,
    +			StoredProject selProject, int indent, String mnem) {
    +<span class="nc" id="L209">		AdminService as = AlitheiaCore.getInstance().getAdminService();</span>
    +<span class="nc" id="L210">		AdminAction aa = as.create(UpdateProject.MNEMONIC);</span>
    +<span class="nc" id="L211">		aa.addArg(&quot;project&quot;, selProject.getId());</span>
    +<span class="nc" id="L212">		aa.addArg(&quot;updater&quot;, mnem);</span>
    +<span class="nc" id="L213">		as.execute(aa);</span>
    +
    +<span class="nc bnc" id="L215" title="All 2 branches missed.">		if (aa.hasErrors()) {</span>
    +<span class="nc" id="L216">            vc.put(&quot;RESULTS&quot;, aa.errors());</span>
    +<span class="nc" id="L217">        } else { </span>
    +<span class="nc" id="L218">            vc.put(&quot;RESULTS&quot;, aa.results());</span>
    +        }
    +<span class="nc" id="L220">	}</span>
    +
    +	// ---------------------------------------------------------------
    +	// Trigger update on all resources for that project
    +	// ---------------------------------------------------------------
    +	private static void triggerAllUpdate(StringBuilder e,
    +			StoredProject selProject, int indent) {
    +<span class="nc" id="L227">	    AdminService as = AlitheiaCore.getInstance().getAdminService();</span>
    +<span class="nc" id="L228">        AdminAction aa = as.create(UpdateProject.MNEMONIC);</span>
    +<span class="nc" id="L229">        aa.addArg(&quot;project&quot;, selProject.getId());</span>
    +<span class="nc" id="L230">        as.execute(aa);</span>
    +
    +<span class="nc bnc" id="L232" title="All 2 branches missed.">        if (aa.hasErrors()) {</span>
    +<span class="nc" id="L233">            vc.put(&quot;RESULTS&quot;, aa.errors());</span>
    +<span class="nc" id="L234">        } else { </span>
    +<span class="nc" id="L235">            vc.put(&quot;RESULTS&quot;, aa.results());</span>
    +        }
    +<span class="nc" id="L237">	}</span>
    +	
    +	// ---------------------------------------------------------------
    +	// Trigger update on all resources on all projects of a node
    +	// ---------------------------------------------------------------
    +    private static void triggerAllUpdateNode(StringBuilder e,
    +			StoredProject selProject, int in) {
    +<span class="nc" id="L244">		Set&lt;StoredProject&gt; projectList = ClusterNode.thisNode().getProjects();</span>
    +		
    +<span class="nc bnc" id="L246" title="All 2 branches missed.">		for (StoredProject project : projectList) {</span>
    +<span class="nc" id="L247">			triggerAllUpdate(e, project, in);</span>
    +		}
    +<span class="nc" id="L249">	}</span>
    +	
    +	// ---------------------------------------------------------------
    +	// Trigger synchronize on the selected plug-in for that project
    +	// ---------------------------------------------------------------
    +    private static void syncPlugin(StringBuilder e, StoredProject selProject, String reqValSyncPlugin) {
    +<span class="nc bnc" id="L255" title="All 4 branches missed.">		if ((reqValSyncPlugin != null) &amp;&amp; (selProject != null)) {</span>
    +<span class="nc" id="L256">			PluginInfo pInfo = sobjPA.getPluginInfo(reqValSyncPlugin);</span>
    +<span class="nc bnc" id="L257" title="All 2 branches missed.">			if (pInfo != null) {</span>
    +<span class="nc" id="L258">				AlitheiaPlugin pObj = sobjPA.getPlugin(pInfo);</span>
    +<span class="nc bnc" id="L259" title="All 2 branches missed.">				if (pObj != null) {</span>
    +<span class="nc" id="L260">					compMA.syncMetric(pObj, selProject);</span>
    +<span class="nc" id="L261">					sobjLogger.debug(&quot;Syncronise plugin (&quot; + pObj.getName()</span>
    +<span class="nc" id="L262">							+ &quot;) on project (&quot; + selProject.getName() + &quot;).&quot;);</span>
    +				}
    +			}
    +		}
    +<span class="nc" id="L266">    }</span>
    +    
    +    private static void createFrom(StringBuilder b, StringBuilder e, 
    +    		StoredProject selProject, String reqValAction, int in) {
    +
    +        // ===============================================================
    +        // Create the form
    +        // ===============================================================
    +<span class="nc" id="L274">        b.append(sp(in) + &quot;&lt;form id=\&quot;projects\&quot;&quot;</span>
    +<span class="nc" id="L275">                + &quot; name=\&quot;projects\&quot;&quot;</span>
    +<span class="nc" id="L276">                + &quot; method=\&quot;post\&quot;&quot;</span>
    +<span class="nc" id="L277">                + &quot; action=\&quot;/projects\&quot;&gt;\n&quot;);</span>
    +
    +        // ===============================================================
    +        // Display the accumulated error messages (if any)
    +        // ===============================================================
    +<span class="nc" id="L282">        b.append(errorFieldset(e, ++in));</span>
    +
    +        // Get the complete list of projects stored in the SQO-OSS framework
    +<span class="nc" id="L285">        Set&lt;StoredProject&gt; projects = ClusterNode.thisNode().getProjects();</span>
    +<span class="nc" id="L286">        Collection&lt;PluginInfo&gt; metrics = sobjPA.listPlugins();</span>
    +
    +        // ===================================================================
    +        // &quot;Show project info&quot; view
    +        // ===================================================================
    +<span class="nc bnc" id="L291" title="All 2 branches missed.">        if ((reqValAction.equals(ACT_REQ_SHOW_PROJECT))</span>
    +<span class="nc bnc" id="L292" title="All 2 branches missed.">                &amp;&amp; (selProject != null)) {</span>
    +            // Create the field-set
    +<span class="nc" id="L294">            b.append(sp(in++) + &quot;&lt;fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L295">            b.append(sp(in) + &quot;&lt;legend&gt;&quot;</span>
    +<span class="nc" id="L296">                    + &quot;Project information&quot;</span>
    +<span class="nc" id="L297">                    + &quot;&lt;/legend&gt;\n&quot;);</span>
    +<span class="nc" id="L298">            b.append(sp(in++) + &quot;&lt;table class=\&quot;borderless\&quot;&gt;\n&quot;);</span>
    +            // Create the input fields
    +<span class="nc" id="L300">            b.append(normalInfoRow(</span>
    +<span class="nc" id="L301">                    &quot;Project name&quot;, selProject.getName(), in));</span>
    +<span class="nc" id="L302">            b.append(normalInfoRow(</span>
    +<span class="nc" id="L303">                    &quot;Homepage&quot;, selProject.getWebsiteUrl(), in));</span>
    +<span class="nc" id="L304">            b.append(normalInfoRow(</span>
    +<span class="nc" id="L305">                    &quot;Contact e-mail&quot;, selProject.getContactUrl(), in));</span>
    +<span class="nc" id="L306">            b.append(normalInfoRow(</span>
    +<span class="nc" id="L307">                    &quot;Bug database&quot;, selProject.getBtsUrl(), in));</span>
    +<span class="nc" id="L308">            b.append(normalInfoRow(</span>
    +<span class="nc" id="L309">                    &quot;Mailing list&quot;, selProject.getMailUrl(), in));</span>
    +<span class="nc" id="L310">            b.append(normalInfoRow(</span>
    +<span class="nc" id="L311">                    &quot;Source code&quot;, selProject.getScmUrl(), in));</span>
    +
    +            //------------------------------------------------------------
    +            // Tool-bar
    +            //------------------------------------------------------------
    +<span class="nc" id="L316">            b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L317">            b.append(sp(in++)</span>
    +<span class="nc" id="L318">                    + &quot;&lt;td colspan=\&quot;2\&quot; class=\&quot;borderless\&quot;&gt;\n&quot;);</span>
    +            // Back button
    +<span class="nc" id="L320">            b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L321">                    + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L322">                    + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L323">                    + &quot; value=\&quot;&quot; + getLbl(&quot;btn_back&quot;) + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L324">                    + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L325">                    + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L326">            b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L327">            b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L328">            b.append(sp(--in) + &quot;&lt;/table&gt;\n&quot;);</span>
    +<span class="nc" id="L329">            b.append(sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L330">        }</span>
    +        // ===================================================================
    +        // &quot;Add project&quot; editor
    +        // ===================================================================
    +<span class="nc bnc" id="L334" title="All 2 branches missed.">        else if (reqValAction.equals(ACT_REQ_ADD_PROJECT)) {</span>
    +            // Create the field-set
    +<span class="nc" id="L336">            b.append(sp(in++) + &quot;&lt;table class=\&quot;borderless\&quot; width='100%'&gt;\n&quot;);</span>
    +            // Create the input fields
    +<span class="nc" id="L338">            b.append(normalInputRow(</span>
    +<span class="nc" id="L339">                    &quot;Project name&quot;, REQ_PAR_PRJ_NAME, &quot;&quot;, in));</span>
    +<span class="nc" id="L340">            b.append(normalInputRow(</span>
    +<span class="nc" id="L341">                    &quot;Homepage&quot;, REQ_PAR_PRJ_WEB, &quot;&quot;, in));</span>
    +<span class="nc" id="L342">            b.append(normalInputRow(</span>
    +<span class="nc" id="L343">                    &quot;Contact e-mail&quot;, REQ_PAR_PRJ_CONT, &quot;&quot;, in));</span>
    +<span class="nc" id="L344">            b.append(normalInputRow(</span>
    +<span class="nc" id="L345">                    &quot;Bug database&quot;, REQ_PAR_PRJ_BUG, &quot;&quot;, in));</span>
    +<span class="nc" id="L346">            b.append(normalInputRow(</span>
    +<span class="nc" id="L347">                    &quot;Mailing list&quot;, REQ_PAR_PRJ_MAIL, &quot;&quot;, in));</span>
    +<span class="nc" id="L348">            b.append(normalInputRow(</span>
    +<span class="nc" id="L349">                    &quot;Source code&quot;, REQ_PAR_PRJ_CODE, &quot;&quot;, in));</span>
    +
    +            //------------------------------------------------------------
    +            // Tool-bar
    +            //------------------------------------------------------------
    +<span class="nc" id="L354">            b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L355">            b.append(sp(in++)</span>
    +<span class="nc" id="L356">                    + &quot;&lt;td colspan=\&quot;2\&quot; class=\&quot;borderless\&quot;&gt;\n&quot;);</span>
    +            // Apply button
    +<span class="nc" id="L358">            b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L359">                    + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L360">                    + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L361">                    + &quot; value=\&quot;&quot; + getLbl(&quot;project_add&quot;) + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L362">                    + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L363">                    + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L364">                    + REQ_PAR_ACTION + &quot;').value='&quot;</span>
    +<span class="nc" id="L365">                    + ACT_CON_ADD_PROJECT + &quot;';&quot;</span>
    +<span class="nc" id="L366">                    + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +            // Cancel button
    +<span class="nc" id="L368">            b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L369">                    + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L370">                    + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L371">                    + &quot; value=\&quot;&quot; + getLbl(&quot;cancel&quot;) + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L372">                    + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L373">                    + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L374">            b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L375">            b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L376">            b.append(sp(--in) + &quot;&lt;/table&gt;\n&quot;);</span>
    +<span class="nc" id="L377">        }</span>
    +        // ===================================================================
    +        // &quot;Delete project&quot; confirmation view
    +        // ===================================================================
    +<span class="nc bnc" id="L381" title="All 2 branches missed.">        else if ((reqValAction.equals(ACT_REQ_REM_PROJECT))</span>
    +<span class="nc bnc" id="L382" title="All 2 branches missed.">                &amp;&amp; (selProject != null)) {</span>
    +<span class="nc" id="L383">            b.append(sp(in++) + &quot;&lt;fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L384">            b.append(sp(in) + &quot;&lt;legend&gt;&quot; + getLbl(&quot;l0059&quot;)</span>
    +<span class="nc" id="L385">                    + &quot;: &quot; + selProject.getName()</span>
    +<span class="nc" id="L386">                    + &quot;&lt;/legend&gt;\n&quot;);</span>
    +<span class="nc" id="L387">            b.append(sp(in++) + &quot;&lt;table class=\&quot;borderless\&quot;&gt;&quot;);</span>
    +            // Confirmation message
    +<span class="nc" id="L389">            b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L390">            b.append(sp(in) + &quot;&lt;td class=\&quot;borderless\&quot;&gt;&quot;</span>
    +<span class="nc" id="L391">                    + &quot;&lt;b&gt;&quot; + getMsg(&quot;delete_project&quot;) + &quot;&lt;/b&gt;&quot;</span>
    +<span class="nc" id="L392">                    + &quot;&lt;/td&gt;\n&quot;);</span>
    +
    +<span class="nc" id="L394">            b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +            //------------------------------------------------------------
    +            // Tool-bar
    +            //------------------------------------------------------------
    +<span class="nc" id="L398">            b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L399">            b.append(sp(in++)</span>
    +<span class="nc" id="L400">                    + &quot;&lt;td class=\&quot;borderless\&quot;&gt;\n&quot;);</span>
    +            // Confirm button
    +<span class="nc" id="L402">            b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L403">                    + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L404">                    + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L405">                    + &quot; value=\&quot;&quot; + getLbl(&quot;l0006&quot;) + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L406">                    + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L407">                    + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L408">                    + REQ_PAR_ACTION + &quot;').value='&quot;</span>
    +<span class="nc" id="L409">                    + ACT_CON_REM_PROJECT + &quot;';&quot;</span>
    +<span class="nc" id="L410">                    + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +            // Cancel button
    +<span class="nc" id="L412">            b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L413">                    + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L414">                    + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L415">                    + &quot; value=\&quot;&quot; + getLbl(&quot;l0004&quot;) + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L416">                    + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L417">                    + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L418">            b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L419">            b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L420">            b.append(sp(--in) + &quot;&lt;/table&gt;&quot;);</span>
    +<span class="nc" id="L421">            b.append(sp(in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +<span class="nc" id="L422">        }</span>
    +        // ===================================================================
    +        // Projects list view
    +        // ===================================================================
    +        else {
    +<span class="nc" id="L427">            addHeaderRow(b,in);</span>
    +
    +<span class="nc bnc" id="L429" title="All 2 branches missed.">            if (projects.isEmpty()) {</span>
    +<span class="nc" id="L430">                b.append(sp(in++) + &quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L431">                b.append(sp(in) + &quot;&lt;td colspan=\&quot;6\&quot; class=\&quot;noattr\&quot;&gt;\n&quot;</span>
    +<span class="nc" id="L432">                        + getMsg(&quot;no_projects&quot;)</span>
    +<span class="nc" id="L433">                        + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L434">                b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L435">            }</span>
    +            else {
    +                //------------------------------------------------------------
    +                // Create the content rows
    +                //------------------------------------------------------------
    +<span class="nc" id="L440">                b.append(sp(in++) + &quot;&lt;tbody&gt;\n&quot;);</span>
    +<span class="nc bnc" id="L441" title="All 2 branches missed.">                for (StoredProject nextPrj : projects) {</span>
    +<span class="nc" id="L442">                    boolean selected = false;</span>
    +<span class="nc bnc" id="L443" title="All 2 branches missed.">                    if ((selProject != null)</span>
    +<span class="nc bnc" id="L444" title="All 2 branches missed.">                            &amp;&amp; (selProject.getId() == nextPrj.getId())) {</span>
    +<span class="nc" id="L445">                        selected = true;</span>
    +                    }
    +<span class="nc" id="L447">                    b.append(sp(in++) + &quot;&lt;tr class=\&quot;&quot;</span>
    +<span class="nc bnc" id="L448" title="All 2 branches missed.">                            + ((selected) ? &quot;selected&quot; : &quot;edit&quot;) + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L449">                            + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L450">                            + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L451">                            + REQ_PAR_PROJECT_ID + &quot;').value='&quot;</span>
    +<span class="nc bnc" id="L452" title="All 2 branches missed.">                            + ((selected) ? &quot;&quot; : nextPrj.getId())</span>
    +<span class="nc" id="L453">                            + &quot;';&quot;</span>
    +<span class="nc" id="L454">                            + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +                    // Project Id
    +<span class="nc" id="L456">                    b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L457">                            + nextPrj.getId()</span>
    +<span class="nc" id="L458">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +                    // Project name
    +<span class="nc" id="L460">                    b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc bnc" id="L461" title="All 2 branches missed.">                            + ((selected)</span>
    +<span class="nc" id="L462">                                    ? &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +                                        + &quot; class=\&quot;install\&quot;&quot;
    +                                        + &quot; style=\&quot;width: 100px;\&quot;&quot;
    +                                        + &quot; value=\&quot;&quot;
    +<span class="nc" id="L466">                                        + getLbl(&quot;btn_info&quot;)</span>
    +<span class="nc" id="L467">                                        + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L468">                                        + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L469">                                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L470">                                        + REQ_PAR_ACTION + &quot;').value='&quot; </span>
    +<span class="nc" id="L471">                                        + ACT_REQ_SHOW_PROJECT + &quot;';&quot;</span>
    +<span class="nc" id="L472">                                        + SUBMIT + &quot;\&quot;&gt;&quot;</span>
    +<span class="nc" id="L473">                                    : &quot;&lt;img src=\&quot;/edit.png\&quot;&quot;</span>
    +                                        + &quot; alt=\&quot;[Edit]\&quot;/&gt;&quot;)
    +<span class="nc" id="L475">                            + &quot;&amp;nbsp;&quot;</span>
    +<span class="nc" id="L476">                            + nextPrj.getName()</span>
    +<span class="nc" id="L477">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +                    // Last project version
    +<span class="nc" id="L479">                    String lastVersion = getLbl(&quot;l0051&quot;);</span>
    +<span class="nc" id="L480">                    ProjectVersion v = ProjectVersion.getLastProjectVersion(nextPrj);</span>
    +<span class="nc bnc" id="L481" title="All 2 branches missed.">                    if (v != null) {</span>
    +<span class="nc" id="L482">                        lastVersion = String.valueOf(v.getSequence()) + &quot;(&quot; + v.getRevisionId() + &quot;)&quot;;</span>
    +                    }
    +<span class="nc" id="L484">                    b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L485">                            + lastVersion</span>
    +<span class="nc" id="L486">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +                    // Date of the last known email
    +<span class="nc" id="L488">                    MailMessage mm = MailMessage.getLatestMailMessage(nextPrj);</span>
    +<span class="nc" id="L489">                    b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc bnc" id="L490" title="All 2 branches missed.">                            + ((mm == null)?getLbl(&quot;l0051&quot;):mm.getSendDate())</span>
    +<span class="nc" id="L491">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +                    // ID of the last known bug entry
    +<span class="nc" id="L493">                    Bug bug = Bug.getLastUpdate(nextPrj);</span>
    +<span class="nc" id="L494">                    b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc bnc" id="L495" title="All 2 branches missed.">                            + ((bug == null)?getLbl(&quot;l0051&quot;):bug.getBugID())</span>
    +<span class="nc" id="L496">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +                    // Evaluation state
    +<span class="nc" id="L498">                    String evalState = getLbl(&quot;project_not_evaluated&quot;);</span>
    +<span class="nc bnc" id="L499" title="All 2 branches missed.">                    if (nextPrj.isEvaluated()) {</span>
    +<span class="nc" id="L500">                    	evalState = getLbl(&quot;project_is_evaluated&quot;);</span>
    +                    }
    +<span class="nc" id="L502">                    b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot;</span>
    +<span class="nc" id="L503">                            + evalState</span>
    +<span class="nc" id="L504">                            + &quot;&lt;/td&gt;\n&quot;);</span>
    +                    
    +                    // Cluster node
    +<span class="nc" id="L507">                    String nodename = null;</span>
    +<span class="nc bnc" id="L508" title="All 2 branches missed.">                    if (null != nextPrj.getClusternode()) {</span>
    +<span class="nc" id="L509">                        nodename = nextPrj.getClusternode().getName();</span>
    +<span class="nc" id="L510">                    } else {</span>
    +<span class="nc" id="L511">                        nodename = &quot;(local)&quot;;</span>
    +                    }
    +<span class="nc" id="L513">                    b.append(sp(in) + &quot;&lt;td class=\&quot;trans\&quot;&gt;&quot; + nodename + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L514">                    b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc bnc" id="L515" title="All 4 branches missed.">                    if ((selected) &amp;&amp; (metrics.isEmpty() == false)) {</span>
    +<span class="nc" id="L516">                        showLastAppliedVersion(nextPrj, metrics, b);</span>
    +                    }
    +                }
    +            }
    +            //----------------------------------------------------------------
    +            // Tool-bar
    +            //----------------------------------------------------------------
    +<span class="nc" id="L523">            addToolBar(selProject,b,in);</span>
    +
    +            //----------------------------------------------------------------
    +            // Close the table
    +            //----------------------------------------------------------------
    +<span class="nc" id="L528">            b.append(sp(--in) + &quot;&lt;/tbody&gt;\n&quot;);</span>
    +<span class="nc" id="L529">            b.append(sp(--in) + &quot;&lt;/table&gt;\n&quot;);</span>
    +<span class="nc" id="L530">            b.append(sp(--in) + &quot;&lt;/fieldset&gt;\n&quot;);</span>
    +        }
    +
    +        // ===============================================================
    +        // INPUT FIELDS
    +        // ===============================================================
    +<span class="nc" id="L536">        addHiddenFields(selProject,b,in);</span>
    +
    +        // ===============================================================
    +        // Close the form
    +        // ===============================================================
    +<span class="nc" id="L541">        b.append(sp(--in) + &quot;&lt;/form&gt;\n&quot;);</span>
    +<span class="nc" id="L542">    }</span>
    +
    +
    +    private static void addHiddenFields(StoredProject selProject,
    +            StringBuilder b,
    +            long in) {
    +        // &quot;Action type&quot; input field
    +<span class="nc" id="L549">        b.append(sp(in) + &quot;&lt;input type='hidden' id='&quot; + REQ_PAR_ACTION + </span>
    +<span class="nc" id="L550">                &quot;' name='&quot; + REQ_PAR_ACTION + &quot;' value=''&gt;\n&quot;);</span>
    +        // &quot;Project Id&quot; input field
    +<span class="nc" id="L552">        b.append(sp(in) + &quot;&lt;input type='hidden' id='&quot; + REQ_PAR_PROJECT_ID +</span>
    +<span class="nc" id="L553">                &quot;' name='&quot; + REQ_PAR_PROJECT_ID +</span>
    +<span class="nc bnc" id="L554" title="All 2 branches missed.">                &quot;' value='&quot; + ((selProject != null) ? selProject.getId() : &quot;&quot;) +</span>
    +<span class="nc" id="L555">                &quot;'&gt;\n&quot;);</span>
    +        // &quot;Plug-in hashcode&quot; input field
    +<span class="nc" id="L557">        b.append(sp(in) + &quot;&lt;input type='hidden' id='&quot; + REQ_PAR_SYNC_PLUGIN +</span>
    +<span class="nc" id="L558">                &quot;' name='&quot; + REQ_PAR_SYNC_PLUGIN + </span>
    +<span class="nc" id="L559">                &quot;' value=''&gt;\n&quot;);</span>
    +<span class="nc" id="L560">    }</span>
    +    
    +    private static void addToolBar(StoredProject selProject,
    +            StringBuilder b,
    +            long in) {
    +<span class="nc" id="L565">        b.append(sp(in++) + &quot;&lt;tr class=\&quot;subhead\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L566">        b.append(sp(in++) + &quot;&lt;td&gt;View&lt;/td&gt;&lt;td colspan=\&quot;6\&quot;&gt;\n&quot;);</span>
    +        // Refresh button
    +<span class="nc bnc" id="L568" title="All 2 branches missed.">        b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot; + &quot; class=\&quot;install\&quot;&quot; + &quot; style=\&quot;width: 100px;\&quot;&quot; + &quot; value=\&quot;&quot; + getLbl(&quot;l0008&quot;) + &quot;\&quot;&quot; + &quot; onclick=\&quot;javascript:&quot; + &quot;window.location='/projects&quot; + ((selProject != null)</span>
    +<span class="nc" id="L569">                ? &quot;?&quot; + REQ_PAR_PROJECT_ID + &quot;=&quot; + selProject.getId()</span>
    +<span class="nc" id="L570">                : &quot;&quot;) + &quot;';\&quot;&quot; + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L571">        b.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr class=\&quot;subhead\&quot;&gt;&lt;td&gt;Manage&lt;/td&gt;&lt;td colspan='6'&gt;\n&quot;);</span>
    +        // Add project button
    +<span class="nc" id="L573">        b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot; + &quot; class=\&quot;install\&quot;&quot; + &quot; style=\&quot;width: 100px;\&quot;&quot; + &quot; value=\&quot;&quot; + getLbl(&quot;add_project&quot;) + &quot;\&quot;&quot; + &quot; onclick=\&quot;javascript:&quot; + &quot;document.getElementById('&quot; + REQ_PAR_ACTION + &quot;').value='&quot; + ACT_REQ_ADD_PROJECT + &quot;';&quot; + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +        // Remove project button
    +<span class="nc bnc" id="L575" title="All 2 branches missed.">        b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot; + &quot; class=\&quot;install\&quot;&quot; + &quot; style=\&quot;width: 100px;\&quot;&quot; + &quot; value=\&quot;&quot; + getLbl(&quot;l0059&quot;) + &quot;\&quot;&quot; + &quot; onclick=\&quot;javascript:&quot; + &quot;document.getElementById('&quot; + REQ_PAR_ACTION + &quot;').value='&quot; + ACT_REQ_REM_PROJECT + &quot;';&quot; + SUBMIT + &quot;\&quot;&quot; + ((selProject != null) ? &quot;&quot; : &quot; disabled&quot;) + &quot;&gt;&quot;);</span>
    +<span class="nc" id="L576">        b.append(&quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr class='subhead'&gt;&lt;td&gt;Update&lt;/td&gt;&lt;td colspan='4'&gt;\n&quot;);</span>
    +        
    +<span class="nc bnc" id="L578" title="All 2 branches missed.">        if (selProject != null) {</span>
    +<span class="nc bnc" id="L579" title="All 2 branches missed.">            b.append(sp(in) + &quot;&lt;select name=\&quot;&quot; + REQ_PAR_UPD + &quot;\&quot; id=\&quot;&quot; + REQ_PAR_UPD + &quot;\&quot; &quot; + ((selProject != null) ? &quot;&quot; : &quot; disabled=\&quot;disabled\&quot;&quot;) + &quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L580">            b.append(sp(in) + &quot;&lt;optgroup label=\&quot;Import Stage\&quot;&gt;&quot;);</span>
    +<span class="nc bnc" id="L581" title="All 2 branches missed.">            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.IMPORT)) {</span>
    +<span class="nc" id="L582">                b.append(&quot;&lt;option value=\&quot;&quot;).append(u.mnem()).append(&quot;\&quot;&gt;&quot;).append(u.descr()).append(&quot;&lt;/option&gt;&quot;);</span>
    +            }
    +<span class="nc" id="L584">            b.append(sp(in) + &quot;&lt;/optgroup&gt;&quot;);</span>
    +<span class="nc" id="L585">            b.append(sp(in) + &quot;&lt;optgroup label=\&quot;Parse Stage\&quot;&gt;&quot;);</span>
    +<span class="nc bnc" id="L586" title="All 2 branches missed.">            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.PARSE)) {</span>
    +<span class="nc" id="L587">                b.append(&quot;&lt;option value=\&quot;&quot;).append(u.mnem()).append(&quot;\&quot;&gt;&quot;).append(u.descr()).append(&quot;&lt;/option&gt;&quot;);</span>
    +            }
    +<span class="nc" id="L589">            b.append(sp(in) + &quot;&lt;/optgroup&gt;&quot;);</span>
    +<span class="nc" id="L590">            b.append(sp(in) + &quot;&lt;optgroup label=\&quot;Inference Stage\&quot;&gt;&quot;);</span>
    +<span class="nc bnc" id="L591" title="All 2 branches missed.">            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.INFERENCE)) {</span>
    +<span class="nc" id="L592">                b.append(&quot;&lt;option value=\&quot;&quot;).append(u.mnem()).append(&quot;\&quot;&gt;&quot;).append(u.descr()).append(&quot;&lt;/option&gt;&quot;);</span>
    +            }
    +<span class="nc" id="L594">            b.append(sp(in) + &quot;&lt;/optgroup&gt;&quot;);</span>
    +<span class="nc" id="L595">            b.append(sp(in) + &quot;&lt;optgroup label=\&quot;Default Stage\&quot;&gt;&quot;);</span>
    +<span class="nc bnc" id="L596" title="All 2 branches missed.">            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.DEFAULT)) {</span>
    +<span class="nc" id="L597">                b.append(&quot;&lt;option value=\&quot;&quot;).append(u.mnem()).append(&quot;\&quot;&gt;&quot;).append(u.descr()).append(&quot;&lt;/option&gt;&quot;);</span>
    +            }
    +<span class="nc" id="L599">            b.append(sp(in) + &quot;&lt;/optgroup&gt;&quot;);</span>
    +<span class="nc" id="L600">            b.append(sp(in) + &quot;&lt;/select&gt;&quot;);</span>
    +        }
    +
    +        // Trigger updater
    +<span class="nc bnc" id="L604" title="All 2 branches missed.">        b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot; class=\&quot;install\&quot; value=\&quot;Run Updater\&quot; onclick=\&quot;javascript:document.getElementById('&quot; + REQ_PAR_ACTION + &quot;').value='&quot; + ACT_CON_UPD + &quot;';&quot; + SUBMIT + &quot;\&quot;&quot; + ((selProject != null)? &quot;&quot; : &quot; disabled&quot;) + &quot;&gt;\n&quot;);</span>
    +        // Trigger all updates
    +<span class="nc bnc" id="L606" title="All 2 branches missed.">        b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot; + &quot; class=\&quot;install\&quot;&quot; + &quot; value=\&quot;Run All Updaters\&quot; onclick=\&quot;javascript:document.getElementById('&quot; + REQ_PAR_ACTION + &quot;').value='&quot; + ACT_CON_UPD_ALL + &quot;';&quot; + SUBMIT + &quot;\&quot;&quot; + (((selProject != null))</span>
    +<span class="nc" id="L607">                ? &quot;&quot; : &quot; disabled&quot;) + &quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L608">        b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L609">        b.append(sp(--in) + &quot;&lt;td colspan=\&quot;2\&quot; align=\&quot;right\&quot;&gt;\n&quot;);</span>
    +     // Trigger updates on host
    +<span class="nc" id="L611">        b.append(sp(in) + &quot;&lt;input type=\&quot;button\&quot;&quot; + &quot; class=\&quot;install\&quot; value=\&quot;Update all on &quot;+ sobjClusterNode.getClusterNodeName() +&quot;\&quot;&quot; + &quot; onclick=\&quot;javascript:&quot; + &quot;document.getElementById('&quot; + REQ_PAR_ACTION + &quot;').value='&quot; + ACT_CON_UPD_ALL_NODE + &quot;';&quot; + SUBMIT + &quot;\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L612">        b.append(sp(--in) + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L613">        b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L614">    }</span>
    +    
    +    private static void showLastAppliedVersion(
    +            StoredProject project,
    +            Collection&lt;PluginInfo&gt; metrics,
    +            StringBuilder b) {
    +<span class="nc bnc" id="L620" title="All 2 branches missed.">        for(PluginInfo m : metrics) {</span>
    +<span class="nc bnc" id="L621" title="All 2 branches missed.">            if (m.installed) {</span>
    +<span class="nc" id="L622">                b.append(&quot;&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L623">                b.append(sp(1) + &quot;&lt;td colspan=\&quot;7\&quot;&quot;</span>
    +<span class="nc" id="L624">                        + &quot; class=\&quot;noattr\&quot;&gt;\n&quot;</span>
    +<span class="nc" id="L625">                        + &quot;&lt;input type=\&quot;button\&quot;&quot;</span>
    +<span class="nc" id="L626">                        + &quot; class=\&quot;install\&quot;&quot;</span>
    +<span class="nc" id="L627">                        + &quot; style=\&quot;width: 100px;\&quot;&quot;</span>
    +<span class="nc" id="L628">                        + &quot; value=\&quot;Synchronise\&quot;&quot;</span>
    +<span class="nc" id="L629">                        + &quot; onclick=\&quot;javascript:&quot;</span>
    +<span class="nc" id="L630">                        + &quot;document.getElementById('&quot;</span>
    +<span class="nc" id="L631">                        + REQ_PAR_SYNC_PLUGIN + &quot;').value='&quot;</span>
    +<span class="nc" id="L632">                        + m.getHashcode() + &quot;';&quot;</span>
    +<span class="nc" id="L633">                        + SUBMIT + &quot;\&quot;&quot;</span>
    +<span class="nc" id="L634">                        + &quot;&gt;&quot;</span>
    +<span class="nc" id="L635">                        + &quot;&amp;nbsp;&quot;</span>
    +<span class="nc" id="L636">                        + m.getPluginName()</span>
    +<span class="nc" id="L637">                        + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L638">                b.append(&quot;&lt;/tr&gt;\n&quot;);</span>
    +            }
    +        }
    +<span class="nc" id="L641">    }</span>
    +
    +    private static void addHeaderRow(StringBuilder b, long in) {
    +        //----------------------------------------------------------------
    +        // Create the header row
    +        //----------------------------------------------------------------
    +<span class="nc" id="L647">        b.append(sp(in++) + &quot;&lt;table&gt;\n&quot;);</span>
    +<span class="nc" id="L648">        b.append(sp(in++) + &quot;&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L649">        b.append(sp(in++) + &quot;&lt;tr class=\&quot;head\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L650">        b.append(sp(in) + &quot;&lt;td class='head'  style='width: 10%;'&gt;&quot;</span>
    +<span class="nc" id="L651">                + getLbl(&quot;l0066&quot;)</span>
    +<span class="nc" id="L652">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L653">        b.append(sp(in) + &quot;&lt;td class='head' style='width: 35%;'&gt;&quot;</span>
    +<span class="nc" id="L654">                + getLbl(&quot;l0067&quot;)</span>
    +<span class="nc" id="L655">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L656">        b.append(sp(in) + &quot;&lt;td class='head' style='width: 15%;'&gt;&quot;</span>
    +<span class="nc" id="L657">                + getLbl(&quot;l0068&quot;)</span>
    +<span class="nc" id="L658">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L659">        b.append(sp(in) + &quot;&lt;td class='head' style='width: 15%;'&gt;&quot;</span>
    +<span class="nc" id="L660">                + getLbl(&quot;l0069&quot;)</span>
    +<span class="nc" id="L661">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L662">        b.append(sp(in) + &quot;&lt;td class='head' style='width: 15%;'&gt;&quot;</span>
    +<span class="nc" id="L663">                + getLbl(&quot;l0070&quot;)</span>
    +<span class="nc" id="L664">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L665">        b.append(sp(in) + &quot;&lt;td class='head' style='width: 10%;'&gt;&quot;</span>
    +<span class="nc" id="L666">                + getLbl(&quot;l0071&quot;)</span>
    +<span class="nc" id="L667">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L668">        b.append(sp(in) + &quot;&lt;td class='head' style='width: 10%;'&gt;&quot;</span>
    +<span class="nc" id="L669">                + getLbl(&quot;l0073&quot;)</span>
    +<span class="nc" id="L670">                + &quot;&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L671">        b.append(sp(--in) + &quot;&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L672">        b.append(sp(--in) + &quot;&lt;/thead&gt;\n&quot;);</span>
    +<span class="nc" id="L673">    }</span>
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebAdminRenderer.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebAdminRenderer.html
    new file mode 100644
    index 000000000..d61a47f99
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebAdminRenderer.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>WebAdminRenderer</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">WebAdminRenderer</span></div><h1>WebAdminRenderer</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">630 of 630</td><td class="ctr2">0%</td><td class="bar">42 of 42</td><td class="ctr2">0%</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">130</td><td class="ctr2">130</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a1"><a href="WebAdminRenderer.java.html#L102" class="el_method">renderFailedJobs()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="238" alt="238"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">11</td><td class="ctr2" id="g0">11</td><td class="ctr1" id="h0">59</td><td class="ctr2" id="i0">59</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="WebAdminRenderer.java.html#L72" class="el_method">renderJobFailStats()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="52" height="10" title="105" alt="105"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="36" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">20</td><td class="ctr2" id="i1">20</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="WebAdminRenderer.java.html#L226" class="el_method">renderJobWaitStats()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="52" height="10" title="105" alt="105"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="36" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">20</td><td class="ctr2" id="i2">20</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="WebAdminRenderer.java.html#L209" class="el_method">getUptime()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="39" height="10" title="78" alt="78"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">10</td><td class="ctr2" id="i4">10</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="WebAdminRenderer.java.html#L251" class="el_method">renderJobRunStats()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="23" height="10" title="47" alt="47"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h3">11</td><td class="ctr2" id="i3">11</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="WebAdminRenderer.java.html#L189" class="el_method">renderLogs()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="23" height="10" title="46" alt="46"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="36" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="WebAdminRenderer.java.html#L59" class="el_method">static {...}</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="WebAdminRenderer.java.html#L62" class="el_method">WebAdminRenderer(BundleContext, VelocityContext)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="2" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebAdminRenderer.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebAdminRenderer.java.html
    new file mode 100644
    index 000000000..bfe4d7026
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebAdminRenderer.java.html
    @@ -0,0 +1,268 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>WebAdminRenderer.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_source">WebAdminRenderer.java</span></div><h1>WebAdminRenderer.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.webadmin;
    +
    +import java.util.Date;
    +import java.util.HashMap;
    +import java.util.List;
    +
    +import org.apache.velocity.VelocityContext;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.util.StringUtils;
    +
    +/**
    + * The WebAdminRender class provides functions for rendering content
    + * to be displayed within the WebAdmin interface.
    + *
    + * @author, Paul J. Adams &lt;paul.adams@siriusit.co.uk&gt;
    + * @author, Boryan Yotov &lt;b.yotov@prosyst.com&gt;
    + */
    +public class WebAdminRenderer  extends AbstractView {
    +    /**
    +     * Represents the system time at which the WebAdminRender (and
    +     * thus the system) was started. This is required for the system
    +     * uptime display.
    +     */
    +<span class="nc" id="L59">    private static long startTime = new Date().getTime();</span>
    +
    +    public WebAdminRenderer(BundleContext bundlecontext, VelocityContext vc) {
    +<span class="nc" id="L62">        super(bundlecontext, vc);</span>
    +<span class="nc" id="L63">    }</span>
    +
    +    /**
    +     * Creates and HTML table displaying the details of all the jobs
    +     * that have failed whilst the system has been up
    +     *
    +     * @return a String representing the HTML table
    +     */
    +    public static String renderJobFailStats() {
    +<span class="nc" id="L72">        StringBuilder result = new StringBuilder();</span>
    +<span class="nc" id="L73">        HashMap&lt;String,Integer&gt; fjobs = sobjSched.getSchedulerStats().getFailedJobTypes();</span>
    +<span class="nc" id="L74">        result.append(&quot;&lt;table width=\&quot;100%\&quot; cellpadding=\&quot;0\&quot; cellspacing=\&quot;0\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L75">        result.append(&quot;\t&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L76">        result.append(&quot;\t\t&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L77">        result.append(&quot;\t\t\t&lt;td&gt;Job Type&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L78">        result.append(&quot;\t\t\t&lt;td&gt;Num Jobs Failed&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L79">        result.append(&quot;\t\t&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L80">        result.append(&quot;\t&lt;/thead&gt;\n&quot;);</span>
    +<span class="nc" id="L81">        result.append(&quot;\t&lt;tbody&gt;\n&quot;);</span>
    +
    +<span class="nc" id="L83">        String[] jobfailures = fjobs.keySet().toArray(new String[1]);</span>
    +<span class="nc bnc" id="L84" title="All 2 branches missed.">        for(String key : jobfailures) {</span>
    +<span class="nc" id="L85">            result.append(&quot;\t\t&lt;tr&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +<span class="nc bnc" id="L86" title="All 2 branches missed.">            result.append(key==null ? &quot;No failures&quot; : key);</span>
    +<span class="nc" id="L87">            result.append(&quot;&lt;/td&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +<span class="nc bnc" id="L88" title="All 2 branches missed.">            result.append(key==null ? &quot;&amp;nbsp;&quot; : fjobs.get(key));</span>
    +<span class="nc" id="L89">            result.append(&quot;\t\t\t&lt;/td&gt;\n\t\t&lt;/tr&gt;&quot;);</span>
    +        }
    +<span class="nc" id="L91">        result.append(&quot;\t&lt;/tbody&gt;\n&quot;);</span>
    +<span class="nc" id="L92">        result.append(&quot;&lt;/table&gt;&quot;);</span>
    +<span class="nc" id="L93">        return result.toString();</span>
    +    }
    +
    +    /**
    +     * Creates and HTML table with information about the jobs that
    +     * failed and the recorded exceptions
    +     * @return
    +     */
    +    public static String renderFailedJobs() {
    +<span class="nc" id="L102">        StringBuilder result = new StringBuilder();</span>
    +<span class="nc" id="L103">        Job[] jobs = sobjSched.getFailedQueue();</span>
    +<span class="nc" id="L104">        result.append(&quot;&lt;table width=\&quot;100%\&quot; cellpadding=\&quot;0\&quot; cellspacing=\&quot;0\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L105">        result.append(&quot;\t&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L106">        result.append(&quot;\t\t&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L107">        result.append(&quot;\t\t\t&lt;td&gt;Job Type&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L108">        result.append(&quot;\t\t\t&lt;td&gt;Exception type&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L109">        result.append(&quot;\t\t\t&lt;td&gt;Exception text&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L110">        result.append(&quot;\t\t\t&lt;td&gt;Exception backtrace&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L111">        result.append(&quot;\t\t&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L112">        result.append(&quot;\t&lt;/thead&gt;\n&quot;);</span>
    +<span class="nc" id="L113">        result.append(&quot;\t&lt;tbody&gt;\n&quot;);</span>
    +
    +<span class="nc bnc" id="L115" title="All 4 branches missed.">        if ((jobs != null) &amp;&amp; (jobs.length &gt; 0)) {</span>
    +<span class="nc bnc" id="L116" title="All 2 branches missed.">            for(Job j: jobs) {</span>
    +<span class="nc bnc" id="L117" title="All 2 branches missed.">                if (j == null) continue;</span>
    +<span class="nc" id="L118">                result.append(&quot;\t\t&lt;tr&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +<span class="nc bnc" id="L119" title="All 2 branches missed.">                if (j.getClass() != null) {</span>
    +                    try {
    +                        //result.append(j.getClass().getPackage().getName());
    +                        //result.append(&quot;. &quot; + j.getClass().getSimpleName());
    +<span class="nc" id="L123">			result.append(j.toString());</span>
    +<span class="nc" id="L124">                    }</span>
    +<span class="nc" id="L125">                    catch (NullPointerException ex) {</span>
    +<span class="nc" id="L126">                        result.append(&quot;&lt;b&gt;NA&lt;b&gt;&quot;);</span>
    +                    }
    +<span class="nc" id="L128">                }</span>
    +                else {
    +<span class="nc" id="L130">                    result.append(&quot;&lt;b&gt;NA&lt;b&gt;&quot;);</span>
    +                }
    +<span class="nc" id="L132">                result.append(&quot;&lt;/td&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +<span class="nc" id="L133">                Exception e = j.getErrorException();</span>
    +<span class="nc bnc" id="L134" title="All 2 branches missed.">                if (e != null) {</span>
    +                    try {
    +<span class="nc" id="L136">                        result.append(e.getClass().getPackage().getName());</span>
    +<span class="nc" id="L137">                        result.append(&quot;. &quot; + e.getClass().getSimpleName());</span>
    +<span class="nc" id="L138">                    }</span>
    +<span class="nc" id="L139">                    catch (NullPointerException ex) {</span>
    +<span class="nc" id="L140">                        result.append(&quot;&lt;b&gt;NA&lt;b&gt;&quot;);</span>
    +                    }
    +<span class="nc" id="L142">                }</span>
    +                else {
    +<span class="nc" id="L144">                    result.append(&quot;&lt;b&gt;NA&lt;/b&gt;&quot;);</span>
    +                }
    +<span class="nc" id="L146">                result.append(&quot;&lt;/td&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +                try {
    +<span class="nc" id="L148">                    result.append(e.getMessage());</span>
    +<span class="nc" id="L149">                }</span>
    +<span class="nc" id="L150">                catch (NullPointerException ex) {</span>
    +<span class="nc" id="L151">                    result.append(&quot;&lt;b&gt;NA&lt;b&gt;&quot;);</span>
    +                }
    +<span class="nc" id="L153">                result.append(&quot;&lt;/td&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +<span class="nc bnc" id="L154" title="All 2 branches missed.">                if ((e != null)</span>
    +<span class="nc bnc" id="L155" title="All 2 branches missed.">                        &amp;&amp; (e.getStackTrace() != null)) {</span>
    +<span class="nc bnc" id="L156" title="All 2 branches missed.">                    for(StackTraceElement m: e.getStackTrace()) {</span>
    +<span class="nc bnc" id="L157" title="All 2 branches missed.">                        if (m == null) continue;</span>
    +<span class="nc" id="L158">                        result.append(m.getClassName());</span>
    +<span class="nc" id="L159">                        result.append(&quot;. &quot;);</span>
    +<span class="nc" id="L160">                        result.append(m.getMethodName());</span>
    +<span class="nc" id="L161">                        result.append(&quot;(), (&quot;);</span>
    +<span class="nc" id="L162">                        result.append(m.getFileName());</span>
    +<span class="nc" id="L163">                        result.append(&quot;:&quot;);</span>
    +<span class="nc" id="L164">                        result.append(m.getLineNumber());</span>
    +<span class="nc" id="L165">                        result.append(&quot;)&lt;br/&gt;&quot;);</span>
    +                    }
    +<span class="nc" id="L167">                }</span>
    +                else {
    +<span class="nc" id="L169">                    result.append(&quot;&lt;b&gt;NA&lt;/b&gt;&quot;);</span>
    +                }
    +<span class="nc" id="L171">                result.append(&quot;\t\t\t&lt;/td&gt;\n\t\t&lt;/tr&gt;&quot;);</span>
    +            }
    +<span class="nc" id="L173">        }</span>
    +        else {
    +<span class="nc" id="L175">            result.append (&quot;&lt;tr&gt;&lt;td colspan=\&quot;4\&quot;&gt;No failed jobs.&lt;/td&gt;&lt;/tr&gt;&quot;);</span>
    +        }
    +<span class="nc" id="L177">        result.append(&quot;\t&lt;/tbody&gt;\n&quot;);</span>
    +<span class="nc" id="L178">        result.append(&quot;&lt;/table&gt;&quot;);</span>
    +
    +<span class="nc" id="L180">        return result.toString();</span>
    +    }
    +
    +    /**
    +     * Creates an HTML unordered list displaying the contents of the current system log
    +     *
    +     * @return a String representing the HTML unordered list items
    +     */
    +    public static String renderLogs() {
    +<span class="nc" id="L189">        String[] names = sobjLogManager.getRecentEntries();</span>
    +
    +<span class="nc bnc" id="L191" title="All 4 branches missed.">        if ((names != null) &amp;&amp; (names.length &gt; 0)) {</span>
    +<span class="nc" id="L192">            StringBuilder b = new StringBuilder();</span>
    +<span class="nc bnc" id="L193" title="All 2 branches missed.">            for (String s : names) {</span>
    +<span class="nc" id="L194">                b.append(&quot;\t\t\t\t\t&lt;li&gt;&quot; + StringUtils.makeXHTMLSafe(s) + &quot;&lt;/li&gt;\n&quot;);</span>
    +            }
    +
    +<span class="nc" id="L197">            return b.toString();</span>
    +        } else {
    +<span class="nc" id="L199">            return &quot;\t\t\t\t\t&lt;li&gt;&amp;lt;none&amp;gt;&lt;/li&gt;\n&quot;;</span>
    +        }
    +    }
    +
    +    /**
    +     * Returns a string representing the uptime of the Alitheia core
    +     * in dd:hh:mm:ss format
    +     */
    +    public static String getUptime() {
    +        long remainder;
    +<span class="nc" id="L209">        long currentTime = new Date().getTime();</span>
    +<span class="nc" id="L210">        long timeRunning = currentTime - startTime;</span>
    +
    +        // Get the elapsed time in days, hours, mins, secs
    +<span class="nc" id="L213">        int days = new Long(timeRunning / 86400000).intValue();</span>
    +<span class="nc" id="L214">        remainder = timeRunning % 86400000;</span>
    +<span class="nc" id="L215">        int hours = new Long(remainder / 3600000).intValue();</span>
    +<span class="nc" id="L216">        remainder = remainder % 3600000;</span>
    +<span class="nc" id="L217">        int mins = new Long(remainder / 60000).intValue();</span>
    +<span class="nc" id="L218">        remainder = remainder % 60000;</span>
    +<span class="nc" id="L219">        int secs = new Long(remainder / 1000).intValue();</span>
    +
    +<span class="nc" id="L221">        return String.format(&quot;%d:%02d:%02d:%02d&quot;, days, hours, mins, secs);</span>
    +    }
    +    
    +
    +    public static String renderJobWaitStats() {
    +<span class="nc" id="L226">        StringBuilder result = new StringBuilder();</span>
    +<span class="nc" id="L227">        HashMap&lt;String,Integer&gt; wjobs = sobjSched.getSchedulerStats().getWaitingJobTypes();</span>
    +<span class="nc" id="L228">        result.append(&quot;&lt;table width=\&quot;100%\&quot; cellpadding=\&quot;0\&quot; cellspacing=\&quot;0\&quot;&gt;\n&quot;);</span>
    +<span class="nc" id="L229">        result.append(&quot;\t&lt;thead&gt;\n&quot;);</span>
    +<span class="nc" id="L230">        result.append(&quot;\t\t&lt;tr&gt;\n&quot;);</span>
    +<span class="nc" id="L231">        result.append(&quot;\t\t\t&lt;td&gt;Job Type&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L232">        result.append(&quot;\t\t\t&lt;td&gt;Num Jobs Waiting&lt;/td&gt;\n&quot;);</span>
    +<span class="nc" id="L233">        result.append(&quot;\t\t&lt;/tr&gt;\n&quot;);</span>
    +<span class="nc" id="L234">        result.append(&quot;\t&lt;/thead&gt;\n&quot;);</span>
    +<span class="nc" id="L235">        result.append(&quot;\t&lt;tbody&gt;\n&quot;);</span>
    +
    +<span class="nc" id="L237">        String[] jobfailures = wjobs.keySet().toArray(new String[1]);</span>
    +<span class="nc bnc" id="L238" title="All 2 branches missed.">        for(String key : jobfailures) {</span>
    +<span class="nc" id="L239">            result.append(&quot;\t\t&lt;tr&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +<span class="nc bnc" id="L240" title="All 2 branches missed.">            result.append(key==null ? &quot;No failures&quot; : key);</span>
    +<span class="nc" id="L241">            result.append(&quot;&lt;/td&gt;\n\t\t\t&lt;td&gt;&quot;);</span>
    +<span class="nc bnc" id="L242" title="All 2 branches missed.">            result.append(key==null ? &quot;&amp;nbsp;&quot; : wjobs.get(key));</span>
    +<span class="nc" id="L243">            result.append(&quot;\t\t\t&lt;/td&gt;\n\t\t&lt;/tr&gt;&quot;);</span>
    +        }
    +<span class="nc" id="L245">        result.append(&quot;\t&lt;/tbody&gt;\n&quot;);</span>
    +<span class="nc" id="L246">        result.append(&quot;&lt;/table&gt;&quot;);</span>
    +<span class="nc" id="L247">        return result.toString();</span>
    +    }
    +
    +    public static String renderJobRunStats() {
    +<span class="nc" id="L251">        StringBuilder result = new StringBuilder();</span>
    +<span class="nc" id="L252">        List&lt;String&gt; rjobs = sobjSched.getSchedulerStats().getRunJobs();</span>
    +<span class="nc bnc" id="L253" title="All 2 branches missed.">        if (rjobs.size() == 0) {</span>
    +<span class="nc" id="L254">            return &quot;No running jobs&quot;;</span>
    +        }
    +<span class="nc" id="L256">        result.append(&quot;&lt;ul&gt;\n&quot;);</span>
    +<span class="nc bnc" id="L257" title="All 2 branches missed.">        for(String s : rjobs) {</span>
    +<span class="nc" id="L258">            result.append(&quot;\t&lt;li&gt;&quot;);</span>
    +<span class="nc" id="L259">            result.append(s);</span>
    +<span class="nc" id="L260">            result.append(&quot;\t&lt;/li&gt;\n&quot;);</span>
    +        }
    +<span class="nc" id="L262">        result.append(&quot;&lt;/ul&gt;\n&quot;);</span>
    +<span class="nc" id="L263">        return result.toString();</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebadminServiceImpl.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebadminServiceImpl.html
    new file mode 100644
    index 000000000..ec5ef57e3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebadminServiceImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>WebadminServiceImpl</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_class">WebadminServiceImpl</span></div><h1>WebadminServiceImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">125 of 125</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">43</td><td class="ctr2">43</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a5"><a href="WebadminServiceImpl.java.html#L129" class="el_method">startUp()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="55" alt="55"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">20</td><td class="ctr2" id="i0">20</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="WebadminServiceImpl.java.html#L101" class="el_method">initVelocity()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="100" height="10" title="46" alt="46"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">13</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="WebadminServiceImpl.java.html#L66" class="el_method">WebadminServiceImpl()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="19" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="WebadminServiceImpl.java.html#L118" class="el_method">setInitParams(BundleContext, Logger)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="15" height="10" title="7" alt="7"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="WebadminServiceImpl.java.html#L93" class="el_method">setMessageOfTheDay(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="WebadminServiceImpl.java.html#L84" class="el_method">getMessageOfTheDay()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="WebadminServiceImpl.java.html#L124" class="el_method">shutDown()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="2" height="10" title="1" alt="1"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebadminServiceImpl.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebadminServiceImpl.java.html
    new file mode 100644
    index 000000000..6c6514841
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/WebadminServiceImpl.java.html
    @@ -0,0 +1,164 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>WebadminServiceImpl.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.impl.service.webadmin</a> &gt; <span class="el_source">WebadminServiceImpl.java</span></div><h1>WebadminServiceImpl.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.impl.service.webadmin;
    +
    +import java.util.Hashtable;
    +
    +import org.apache.velocity.app.VelocityEngine;
    +import org.apache.velocity.runtime.RuntimeConstants;
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.ServiceReference;
    +import org.osgi.service.http.HttpService;
    +
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.webadmin.WebadminService;
    +
    +/**
    + * This is the service which provides a web-based administration
    + * interface. This user interface is used for the addition and removal
    + * of projects from Alitheia Core and likewise for metric
    + * plugins. Users of the WebAdmin interface are also able to receive
    + * basic system information such as uptime, number of running/failed
    + * jobs, etc.
    + */
    +public class WebadminServiceImpl implements WebadminService {
    +
    +    /**
    +     * The Velocity Engine is used to to provide services for
    +     * dynamically loading content into the page templates
    +     */
    +    private VelocityEngine ve;
    +
    +    /**
    +     * Used for logging all system messages generated by the WebAdmin
    +     */
    +<span class="nc" id="L66">    private Logger logger = null;</span>
    +
    +    /**
    +     * This String is used to represent the current &quot;message of the
    +     * day&quot; available in the Alitheia Core
    +     */
    +<span class="nc" id="L72">    private String messageOfTheDay = null;</span>
    +
    +    private BundleContext bc;
    +
    +<span class="nc" id="L76">    public WebadminServiceImpl() { }</span>
    +
    +    /**
    +     * Retrieves the &quot;message of the day&quot; String
    +     *
    +     * @return the message as a String
    +     */
    +    public String getMessageOfTheDay() {
    +<span class="nc" id="L84">        return messageOfTheDay;</span>
    +    }
    +
    +    /**
    +     * Sets the &quot;message of the day&quot; String
    +     *
    +     * @param s The text to be used as the &quot;message of the day&quot;
    +     */
    +    public void setMessageOfTheDay(String s) {
    +<span class="nc" id="L93">        messageOfTheDay = s;</span>
    +<span class="nc" id="L94">    }</span>
    +
    +    /*
    +     * The utility method used for the initialization of the velocity engine.
    +     */
    +    private void initVelocity() {
    +        try {
    +<span class="nc" id="L101">            ve = new VelocityEngine();</span>
    +<span class="nc" id="L102">            ve.setProperty(&quot;runtime.log.logsystem.class&quot;,</span>
    +<span class="nc" id="L103">                           &quot;org.apache.velocity.runtime.log.SimpleLog4JLogSystem&quot;);</span>
    +<span class="nc" id="L104">            ve.setProperty(&quot;runtime.log.logsystem.log4j.category&quot;,</span>
    +<span class="nc" id="L105">                           Logger.NAME_SQOOSS_WEBADMIN);</span>
    +<span class="nc" id="L106">            String resourceLoader = &quot;classpath&quot;;</span>
    +<span class="nc" id="L107">            ve.setProperty(RuntimeConstants.RESOURCE_LOADER, resourceLoader);</span>
    +<span class="nc" id="L108">            ve.setProperty(resourceLoader + &quot;.&quot; + RuntimeConstants.RESOURCE_LOADER + &quot;.class&quot;,</span>
    +<span class="nc" id="L109">            &quot;org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader&quot;);</span>
    +<span class="nc" id="L110">        }</span>
    +<span class="nc" id="L111">        catch (Exception e) {</span>
    +<span class="nc" id="L112">            logger.error(&quot;Velocity initialization&quot;,e);</span>
    +        }
    +<span class="nc" id="L114">    }</span>
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +<span class="nc" id="L118">		this.logger = l;</span>
    +<span class="nc" id="L119">		this.bc = bc;</span>
    +<span class="nc" id="L120">	}</span>
    +
    +	@Override
    +	public void shutDown() {
    +<span class="nc" id="L124">	}</span>
    +
    +	@Override
    +	public boolean startUp() {        
    +        // Get a reference to the HTTPService, and then its object
    +<span class="nc" id="L129">        HttpService sobjHTTPService = null;</span>
    +<span class="nc" id="L130">        ServiceReference srefHTTPService = bc.getServiceReference(</span>
    +<span class="nc" id="L131">            HttpService.class.getName());</span>
    +        
    +<span class="nc bnc" id="L133" title="All 2 branches missed.">        if (srefHTTPService != null) {</span>
    +<span class="nc" id="L134">            sobjHTTPService = (HttpService) bc.getService(srefHTTPService);</span>
    +<span class="nc" id="L135">        }</span>
    +        else {
    +<span class="nc" id="L137">            logger.error(&quot;Could not find a HTTP service!&quot;);</span>
    +<span class="nc" id="L138">            return false;</span>
    +        }
    +
    +<span class="nc" id="L141">        initVelocity();</span>
    +        
    +        // Register the front-end servlets
    +<span class="nc bnc" id="L144" title="All 2 branches missed.">        if (sobjHTTPService != null) {</span>
    +            try {
    +<span class="nc" id="L146">                sobjHTTPService.registerServlet(</span>
    +<span class="nc" id="L147">                    &quot;/&quot;,</span>
    +<span class="nc" id="L148">                    new AdminServlet(bc, this, logger, ve),</span>
    +<span class="nc" id="L149">                    new Hashtable(),</span>
    +<span class="nc" id="L150">                    null);</span>
    +<span class="nc" id="L151">            }</span>
    +<span class="nc" id="L152">            catch (Exception e) {</span>
    +<span class="nc" id="L153">                logger.error(&quot;AdminServlet&quot;,e);</span>
    +<span class="nc" id="L154">                return false;</span>
    +            }
    +        }
    +<span class="nc" id="L157">        return true;</span>
    +	}
    +}
    +
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/index.html
    new file mode 100644
    index 000000000..96a6f8de9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.webadmin</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.webadmin</span></div><h1>eu.sqooss.impl.service.webadmin</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">8,416 of 8,416</td><td class="ctr2">0%</td><td class="bar">444 of 444</td><td class="ctr2">0%</td><td class="ctr1">290</td><td class="ctr2">290</td><td class="ctr1">1,564</td><td class="ctr2">1,564</td><td class="ctr1">68</td><td class="ctr2">68</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a3"><a href="PluginsView.html" class="el_class">PluginsView</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="3,581" alt="3,581"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="150" alt="150"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">78</td><td class="ctr2" id="g0">78</td><td class="ctr1" id="h0">651</td><td class="ctr2" id="i0">651</td><td class="ctr1" id="j7">3</td><td class="ctr2" id="k7">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a5"><a href="ProjectsView.html" class="el_class">ProjectsView</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="83" height="10" title="2,500" alt="2,500"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="100" alt="100"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">64</td><td class="ctr2" id="g2">64</td><td class="ctr1" id="h1">388</td><td class="ctr2" id="i1">388</td><td class="ctr1" id="j1">14</td><td class="ctr2" id="k1">14</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="AbstractView.html" class="el_class">AbstractView</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="25" height="10" title="761" alt="761"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="75" height="10" title="94" alt="94"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">67</td><td class="ctr2" id="g1">67</td><td class="ctr1" id="h2">170</td><td class="ctr2" id="i2">170</td><td class="ctr1" id="j0">20</td><td class="ctr2" id="k0">20</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="AdminServlet.html" class="el_class">AdminServlet</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="22" height="10" title="671" alt="671"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="33" height="10" title="42" alt="42"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">29</td><td class="ctr2" id="g3">29</td><td class="ctr1" id="h3">146</td><td class="ctr2" id="i3">146</td><td class="ctr1" id="j2">8</td><td class="ctr2" id="k2">8</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a6"><a href="WebAdminRenderer.html" class="el_class">WebAdminRenderer</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="21" height="10" title="630" alt="630"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="33" height="10" title="42" alt="42"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">29</td><td class="ctr2" id="g4">29</td><td class="ctr1" id="h4">130</td><td class="ctr2" id="i4">130</td><td class="ctr1" id="j3">8</td><td class="ctr2" id="k3">8</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a4"><a href="ProjectDeleteJob.html" class="el_class">ProjectDeleteJob</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="4" height="10" title="133" alt="133"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="9" height="10" title="12" alt="12"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">10</td><td class="ctr2" id="g5">10</td><td class="ctr1" id="h6">31</td><td class="ctr2" id="i6">31</td><td class="ctr1" id="j5">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a7"><a href="WebadminServiceImpl.html" class="el_class">WebadminServiceImpl</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="4" height="10" title="125" alt="125"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">9</td><td class="ctr2" id="g6">9</td><td class="ctr1" id="h5">43</td><td class="ctr2" id="i5">43</td><td class="ctr1" id="j4">7</td><td class="ctr2" id="k4">7</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a2"><a href="AdminServlet$TranslationProxy.html" class="el_class">AdminServlet.TranslationProxy</a></td><td class="bar" id="b7"/><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">4</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h7">5</td><td class="ctr2" id="i7">5</td><td class="ctr1" id="j6">4</td><td class="ctr2" id="k6">4</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/index.source.html
    new file mode 100644
    index 000000000..7f45fd022
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.impl.service.webadmin/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.impl.service.webadmin</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.impl.service.webadmin</span></div><h1>eu.sqooss.impl.service.webadmin</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">8,416 of 8,416</td><td class="ctr2">0%</td><td class="bar">444 of 444</td><td class="ctr2">0%</td><td class="ctr1">290</td><td class="ctr2">290</td><td class="ctr1">1,564</td><td class="ctr2">1,564</td><td class="ctr1">68</td><td class="ctr2">68</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a2"><a href="PluginsView.java.html" class="el_source">PluginsView.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="3,581" alt="3,581"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="150" alt="150"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">78</td><td class="ctr2" id="g0">78</td><td class="ctr1" id="h0">651</td><td class="ctr2" id="i0">651</td><td class="ctr1" id="j6">3</td><td class="ctr2" id="k6">3</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a4"><a href="ProjectsView.java.html" class="el_source">ProjectsView.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="83" height="10" title="2,500" alt="2,500"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="100" alt="100"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">64</td><td class="ctr2" id="g2">64</td><td class="ctr1" id="h1">388</td><td class="ctr2" id="i1">388</td><td class="ctr1" id="j1">14</td><td class="ctr2" id="k1">14</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a0"><a href="AbstractView.java.html" class="el_source">AbstractView.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="25" height="10" title="761" alt="761"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="75" height="10" title="94" alt="94"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">67</td><td class="ctr2" id="g1">67</td><td class="ctr1" id="h2">170</td><td class="ctr2" id="i2">170</td><td class="ctr1" id="j0">20</td><td class="ctr2" id="k0">20</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a1"><a href="AdminServlet.java.html" class="el_source">AdminServlet.java</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="22" height="10" title="686" alt="686"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="33" height="10" title="42" alt="42"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">33</td><td class="ctr2" id="g3">33</td><td class="ctr1" id="h3">151</td><td class="ctr2" id="i3">151</td><td class="ctr1" id="j2">12</td><td class="ctr2" id="k2">12</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr><tr><td id="a5"><a href="WebAdminRenderer.java.html" class="el_source">WebAdminRenderer.java</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="21" height="10" title="630" alt="630"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="33" height="10" title="42" alt="42"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">29</td><td class="ctr2" id="g4">29</td><td class="ctr1" id="h4">130</td><td class="ctr2" id="i4">130</td><td class="ctr1" id="j3">8</td><td class="ctr2" id="k3">8</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a3"><a href="ProjectDeleteJob.java.html" class="el_source">ProjectDeleteJob.java</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="4" height="10" title="133" alt="133"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="9" height="10" title="12" alt="12"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">10</td><td class="ctr2" id="g5">10</td><td class="ctr1" id="h6">31</td><td class="ctr2" id="i6">31</td><td class="ctr1" id="j5">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a6"><a href="WebadminServiceImpl.java.html" class="el_source">WebadminServiceImpl.java</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="4" height="10" title="125" alt="125"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">9</td><td class="ctr2" id="g6">9</td><td class="ctr1" id="h5">43</td><td class="ctr2" id="i5">43</td><td class="ctr1" id="j4">7</td><td class="ctr2" id="k4">7</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/MetricsResource.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/MetricsResource.html
    new file mode 100644
    index 000000000..d75739444
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/MetricsResource.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricsResource</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.rest.api</a> &gt; <span class="el_class">MetricsResource</span></div><h1>MetricsResource</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">180 of 180</td><td class="ctr2">0%</td><td class="bar">20 of 20</td><td class="ctr2">0%</td><td class="ctr1">19</td><td class="ctr2">19</td><td class="ctr1">52</td><td class="ctr2">52</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a7"><a href="MetricsResource.java.html#L103" class="el_method">getResult(Metric, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="108" alt="108"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">8</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h0">29</td><td class="ctr2" id="i0">29</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="MetricsResource.java.html#L94" class="el_method">getMetricResult(Long, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="16" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="17" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="MetricsResource.java.html#L165" class="el_method">getMetricResultByMnem(String, String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="13" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="17" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="MetricsResource.java.html#L65" class="el_method">getMetrics()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="12" height="10" title="11" alt="11"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="MetricsResource.java.html#L75" class="el_method">getMetricTypes()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="12" height="10" title="11" alt="11"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">4</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="MetricsResource.java.html#L177" class="el_method">getMetricByType(String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="12" height="10" title="11" alt="11"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="17" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h5">4</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="MetricsResource.java.html#L85" class="el_method">getMetricById(Long)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a8"><a href="MetricsResource.java.html#L59" class="el_method">MetricsResource()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="MetricsResource.java.html#L156" class="el_method">getMetricByMnem(String)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/MetricsResource.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/MetricsResource.java.html
    new file mode 100644
    index 000000000..480f3c7e5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/MetricsResource.java.html
    @@ -0,0 +1,185 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricsResource.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.rest.api</a> &gt; <span class="el_source">MetricsResource.java</span></div><h1>MetricsResource.java</h1><pre class="source lang-java linenums">/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +package eu.sqooss.rest.api;
    +
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.HashSet;
    +import java.util.List;
    +import java.util.Set;
    +
    +import javax.ws.rs.GET;
    +import javax.ws.rs.Path;
    +import javax.ws.rs.PathParam;
    +import javax.ws.rs.Produces;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.abstractmetric.Result;
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Metric;
    +import eu.sqooss.service.db.MetricType;
    +import eu.sqooss.service.db.MetricType.Type;
    +
    +/**
    + *  @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + *
    + */
    +@Path(&quot;/api&quot;)
    +public class MetricsResource {
    +
    +<span class="nc" id="L59">	public MetricsResource() {}</span>
    +
    +	@GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	@Path(&quot;/metrics/&quot;)
    +	public List&lt;Metric&gt; getMetrics() {
    +<span class="nc" id="L65">		DBService db = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L66">		String q = &quot; from Metric&quot;;</span>
    +<span class="nc" id="L67">		List&lt;Metric&gt; sp = (List&lt;Metric&gt;) db.doHQL(q);</span>
    +<span class="nc" id="L68">		return sp;</span>
    +	}
    +	
    +	@GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	@Path(&quot;/metrics/types&quot;)
    +	public List&lt;MetricType&gt; getMetricTypes() {
    +<span class="nc" id="L75">		DBService db = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L76">		String q = &quot; from MetricType&quot;;</span>
    +<span class="nc" id="L77">		List&lt;MetricType&gt; sp = (List&lt;MetricType&gt;) db.doHQL(q);</span>
    +<span class="nc" id="L78">		return sp;</span>
    +	}
    +
    +	@Path(&quot;/metrics/by-id/{id}&quot;)
    +	@GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	public Metric getMetricById(@PathParam(&quot;id&quot;) Long id) {
    +<span class="nc" id="L85">		return DAObject.loadDAObyId(id, Metric.class);</span>
    +	}
    +	
    +	@Path(&quot;/metrics/by-id/{id}/result/{rid: .+}&quot;)
    +    @GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +    public List&lt;Result&gt; getMetricResult(@PathParam(&quot;id&quot;) Long id,
    +            @PathParam(&quot;rid&quot;) String resourceIds) {
    +	    
    +<span class="nc" id="L94">	    Metric m = DAObject.loadDAObyId(id, Metric.class);</span>
    +	    
    +<span class="nc bnc" id="L96" title="All 2 branches missed.">	    if (m == null)</span>
    +<span class="nc" id="L97">	        return Collections.EMPTY_LIST;  </span>
    +	    
    +<span class="nc" id="L99">	   return getResult(m, resourceIds);</span>
    +    }
    +	
    +	public List&lt;Result&gt; getResult(Metric m, String resourceIds) {
    +<span class="nc" id="L103">	    Set&lt;Long&gt;  ids = new HashSet&lt;Long&gt;();</span>
    +<span class="nc" id="L104">        int count = 0;</span>
    +<span class="nc bnc" id="L105" title="All 2 branches missed.">        for (String resourceId : resourceIds.split(&quot;,&quot;)) {</span>
    +            try {
    +<span class="nc" id="L107">                Long l = Long.parseLong(resourceId);</span>
    +<span class="nc" id="L108">                ids.add(l);</span>
    +<span class="nc" id="L109">            } catch (NumberFormatException nfe) {}</span>
    +            
    +<span class="nc" id="L111">            count++;</span>
    +<span class="nc bnc" id="L112" title="All 2 branches missed.">            if (count &gt;=64) {</span>
    +<span class="nc" id="L113">                break;</span>
    +            }
    +        }
    +        
    +<span class="nc" id="L117">        List&lt;Metric&gt; metricList = new ArrayList&lt;Metric&gt;();</span>
    +<span class="nc" id="L118">        metricList.add(m);</span>
    +        
    +<span class="nc" id="L120">        AlitheiaPlugin ap = AlitheiaCore.getInstance().getPluginAdmin().getImplementingPlugin(m.getMnemonic());</span>
    +        
    +<span class="nc bnc" id="L122" title="All 2 branches missed.">        if (ap == null)</span>
    +<span class="nc" id="L123">            return Collections.EMPTY_LIST;</span>
    +        
    +<span class="nc" id="L125">        Class&lt;? extends DAObject&gt; clazz = m.getMetricType().toActivator();</span>
    +        
    +<span class="nc bnc" id="L127" title="All 2 branches missed.">        if (clazz == null)</span>
    +<span class="nc" id="L128">            return Collections.EMPTY_LIST;</span>
    +        
    +<span class="nc" id="L130">        List&lt;Result&gt; result = new ArrayList&lt;Result&gt;();</span>
    +        
    +<span class="nc bnc" id="L132" title="All 2 branches missed.">        for (Long daoId : ids) {</span>
    +            try {
    +<span class="nc" id="L134">                DAObject dao = DAObject.loadDAObyId(daoId, clazz);</span>
    +                
    +<span class="nc bnc" id="L136" title="All 2 branches missed.">                if (dao == null)</span>
    +<span class="nc" id="L137">                    continue;</span>
    +                
    +<span class="nc" id="L139">                List&lt;Result&gt; r = ap.getResultIfAlreadyCalculated(dao, metricList);</span>
    +<span class="nc" id="L140">                result.addAll(r);</span>
    +<span class="nc" id="L141">            } catch (Exception e) {</span>
    +<span class="nc" id="L142">                e.printStackTrace();</span>
    +            }
    +        }
    +        
    +<span class="nc bnc" id="L146" title="All 2 branches missed.">        if (result.isEmpty())</span>
    +<span class="nc" id="L147">            return Collections.EMPTY_LIST;</span>
    +        
    +<span class="nc" id="L149">        return result; </span>
    +	}
    +    
    +	@Path(&quot;/metrics/by-mnem/{mnem}&quot;)
    +	@GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	public Metric getMetricByMnem(@PathParam(&quot;mnem&quot;) String name) {
    +<span class="nc" id="L156">		return Metric.getMetricByMnemonic(name);</span>
    +	}
    +	
    +	@Path(&quot;/metrics/by-mnem/{mnem}/result/{rid: .+}&quot;)
    +    @GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +    public List&lt;Result&gt; getMetricResultByMnem(@PathParam(&quot;mnem&quot;) String name,
    +            @PathParam(&quot;rid&quot;) String resourceIds) {
    +        
    +<span class="nc" id="L165">        Metric m = Metric.getMetricByMnemonic(name);</span>
    +        
    +<span class="nc bnc" id="L167" title="All 2 branches missed.">        if (m == null)</span>
    +<span class="nc" id="L168">            return Collections.EMPTY_LIST;  </span>
    +        
    +<span class="nc" id="L170">       return getResult(m, resourceIds);</span>
    +    }
    +	
    +	@Path(&quot;/metrics/by-type/{type}&quot;)
    +	@GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	public Set&lt;Metric&gt; getMetricByType(@PathParam(&quot;type&quot;) String type) {
    +<span class="nc" id="L177">		MetricType mt = MetricType.getMetricType(Type.fromString(type));</span>
    +		
    +<span class="nc bnc" id="L179" title="All 2 branches missed.">		if (mt == null) //No metric of this type has been installed yet</span>
    +<span class="nc" id="L180">		    return Collections.EMPTY_SET;</span>
    +		
    +<span class="nc" id="L182">		return mt.getMetrics();</span>
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/StoredProjectResource.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/StoredProjectResource.html
    new file mode 100644
    index 000000000..eb14291e2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/StoredProjectResource.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>StoredProjectResource</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.rest.api</a> &gt; <span class="el_class">StoredProjectResource</span></div><h1>StoredProjectResource</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">234 of 234</td><td class="ctr2">0%</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">62</td><td class="ctr2">62</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a9"><a href="StoredProjectResource.java.html#L98" class="el_method">getVersions(Long, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="70" alt="70"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">16</td><td class="ctr2" id="i0">16</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="StoredProjectResource.java.html#L161" class="el_method">getFilesInDir(String, String, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="48" height="10" title="28" alt="28"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="StoredProjectResource.java.html#L206" class="el_method">getDirs(String, String, String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="48" height="10" title="28" alt="28"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="StoredProjectResource.java.html#L130" class="el_method">getVersion(String, String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="44" height="10" title="26" alt="26"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">3</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="StoredProjectResource.java.html#L76" class="el_method">getProject(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="32" height="10" title="19" alt="19"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">5</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="StoredProjectResource.java.html#L147" class="el_method">getAllFiles(String, String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="24" height="10" title="14" alt="14"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h6">4</td><td class="ctr2" id="i6">4</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="StoredProjectResource.java.html#L191" class="el_method">getDirs(String, String)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="24" height="10" title="14" alt="14"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h5">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a2"><a href="StoredProjectResource.java.html#L178" class="el_method">getChangedFiles(String, String)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="20" height="10" title="12" alt="12"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h7">4</td><td class="ctr2" id="i7">4</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="StoredProjectResource.java.html#L65" class="el_method">getProjects()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="18" height="10" title="11" alt="11"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">4</td><td class="ctr2" id="i8">4</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a1"><a href="StoredProjectResource.java.html#L88" class="el_method">getAllVersions(Long)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="15" height="10" title="9" alt="9"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a10"><a href="StoredProjectResource.java.html#L59" class="el_method">StoredProjectResource()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/StoredProjectResource.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/StoredProjectResource.java.html
    new file mode 100644
    index 000000000..215347a8c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/StoredProjectResource.java.html
    @@ -0,0 +1,217 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>StoredProjectResource.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.rest.api</a> &gt; <span class="el_source">StoredProjectResource.java</span></div><h1>StoredProjectResource.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.rest.api;
    +
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.HashSet;
    +import java.util.List;
    +import java.util.Set;
    +
    +import javax.ws.rs.GET;
    +import javax.ws.rs.Path;
    +import javax.ws.rs.PathParam;
    +import javax.ws.rs.Produces;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Directory;
    +import eu.sqooss.service.db.Metric;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +
    +@Path(&quot;/api&quot;)
    +public class StoredProjectResource {
    +
    +<span class="nc" id="L59">	public StoredProjectResource() {}</span>
    +	
    +	@GET
    +	@Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	@Path(&quot;/project/&quot;)
    +	public List&lt;StoredProject&gt; getProjects() {
    +<span class="nc" id="L65">		DBService db = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L66">		String q = &quot; from StoredProject&quot;;</span>
    +<span class="nc" id="L67">		List&lt;StoredProject&gt; sp = (List&lt;StoredProject&gt;) db.doHQL(q);</span>
    +<span class="nc" id="L68">		return sp;</span>
    +	}
    +
    +	@Path(&quot;/project/{id}&quot;)
    +	@GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	public StoredProject getProject(@PathParam(&quot;id&quot;) String id) {
    +		
    +<span class="nc" id="L76">		StoredProject sp = null;</span>
    +<span class="nc bnc" id="L77" title="All 2 branches missed.">		if (id.matches(&quot;^[0-9]*$&quot;)) //numeric id</span>
    +<span class="nc" id="L78">			sp = DAObject.loadDAObyId(Long.valueOf(id), StoredProject.class);</span>
    +		else 
    +<span class="nc" id="L80">			sp = StoredProject.getProjectByName(id);</span>
    +<span class="nc" id="L81">		return sp;</span>
    +	}
    +	
    +	@Path(&quot;/project/{id}/versions&quot;)
    +	@GET
    +	@Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	public List&lt;ProjectVersion&gt; getAllVersions(@PathParam(&quot;id&quot;) Long id) {
    +<span class="nc" id="L88">		StoredProject sp = DAObject.loadDAObyId(id, StoredProject.class);</span>
    +	
    +<span class="nc" id="L90">		return sp.getProjectVersions();</span>
    +	}
    +	
    +	@Path(&quot;/project/{id}/versions/{vid: .+}&quot;)
    +	@GET
    +	@Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	public List&lt;ProjectVersion&gt; getVersions(@PathParam(&quot;id&quot;) Long id,
    +			@PathParam(&quot;vid&quot;) String vid) {
    +<span class="nc" id="L98">		StoredProject sp = DAObject.loadDAObyId(id, StoredProject.class);</span>
    +	
    +<span class="nc bnc" id="L100" title="All 2 branches missed.">		if (sp == null)</span>
    +<span class="nc" id="L101">			return Collections.EMPTY_LIST;</span>
    +		
    +<span class="nc" id="L103">		Set&lt;String&gt;  ids = new HashSet&lt;String&gt;();</span>
    +<span class="nc" id="L104">	    int count = 0;</span>
    +<span class="nc bnc" id="L105" title="All 2 branches missed.">	    for (String resourceId : vid.split(&quot;,&quot;)) {</span>
    +<span class="nc" id="L106">	        ids.add(resourceId);</span>
    +<span class="nc" id="L107">	        count++;</span>
    +<span class="nc bnc" id="L108" title="All 2 branches missed.">	        if (count &gt;=64) {</span>
    +<span class="nc" id="L109">	            break;</span>
    +	        }
    +	    }
    +		
    +<span class="nc" id="L113">	    List&lt;ProjectVersion&gt; versions = new ArrayList&lt;ProjectVersion&gt;();</span>
    +	    
    +<span class="nc bnc" id="L115" title="All 2 branches missed.">	    for (String verid : ids) {</span>
    +<span class="nc" id="L116">	    	ProjectVersion pv = ProjectVersion.getVersionByRevision(sp, verid);</span>
    +<span class="nc bnc" id="L117" title="All 2 branches missed.">	    	if (pv != null)</span>
    +<span class="nc" id="L118">	    	    versions.add(pv);</span>
    +	    }
    +	    
    +<span class="nc" id="L121">		return versions;</span>
    +	}
    +
    +	@Path(&quot;/project/{id}/version/{vid}&quot;)
    +	@GET
    +	@Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +	public ProjectVersion getVersion(@PathParam(&quot;id&quot;) String prid,
    +			@PathParam(&quot;vid&quot;) String verid) {
    +		
    +<span class="nc bnc" id="L130" title="All 2 branches missed.">	    if (verid.equals(&quot;first&quot;)) </span>
    +<span class="nc" id="L131">	        return ProjectVersion.getFirstProjectVersion(getProject(prid));</span>
    +	    
    +<span class="nc bnc" id="L133" title="All 2 branches missed.">	    if (verid.equals(&quot;latest&quot;))</span>
    +<span class="nc" id="L134">	        return ProjectVersion.getLastMeasuredVersion (</span>
    +<span class="nc" id="L135">	                Metric.getMetricByMnemonic(&quot;TLOC&quot;), //This can break, FIXME</span>
    +<span class="nc" id="L136">	                getProject(prid));</span>
    +	    
    +<span class="nc" id="L138">		return ProjectVersion.getVersionByRevision(getProject(prid), verid);</span>
    +	}
    +
    +	@Path(&quot;/project/{id}/version/{vid}/files/&quot;)
    +    @GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +    public List&lt;ProjectFile&gt; getAllFiles(@PathParam(&quot;id&quot;) String prid,
    +            @PathParam(&quot;vid&quot;) String verid) {
    +        
    +<span class="nc" id="L147">	    ProjectVersion pv = getVersion(prid, verid);</span>
    +<span class="nc bnc" id="L148" title="All 2 branches missed.">	    if (pv == null)</span>
    +<span class="nc" id="L149">	        return Collections.EMPTY_LIST;</span>
    +	        
    +<span class="nc" id="L151">        return pv.getFiles((Directory)null, ProjectVersion.MASK_FILES);</span>
    +    }
    +
    +	@Path(&quot;/project/{id}/version/{vid}/files/{dir: .+}&quot;)
    +    @GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +    public List&lt;ProjectFile&gt; getFilesInDir(@PathParam(&quot;id&quot;) String prid,
    +            @PathParam(&quot;vid&quot;) String verid,
    +            @PathParam(&quot;dir&quot;) String path) {
    +        
    +<span class="nc" id="L161">        ProjectVersion pv = getVersion(prid, verid);</span>
    +<span class="nc bnc" id="L162" title="All 2 branches missed.">        if (pv == null)</span>
    +<span class="nc" id="L163">            return Collections.EMPTY_LIST;</span>
    +        
    +<span class="nc bnc" id="L165" title="All 2 branches missed.">        if (!path.startsWith(&quot;/&quot;))</span>
    +<span class="nc" id="L166">            path = &quot;/&quot; + path;</span>
    +        
    +<span class="nc" id="L168">        return pv.getFiles(Directory.getDirectory(path, false), </span>
    +<span class="nc" id="L169">                ProjectVersion.MASK_FILES);</span>
    +    }
    +
    +	@Path(&quot;/project/{id}/version/{vid}/files/changed&quot;)
    +    @GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +    public Set&lt;ProjectFile&gt; getChangedFiles(@PathParam(&quot;id&quot;) String prid,
    +            @PathParam(&quot;vid&quot;) String verid) {
    +        
    +<span class="nc" id="L178">        ProjectVersion pv = getVersion(prid, verid);</span>
    +<span class="nc bnc" id="L179" title="All 2 branches missed.">        if (pv == null)</span>
    +<span class="nc" id="L180">            return Collections.EMPTY_SET;</span>
    +        
    +<span class="nc" id="L182">        return pv.getVersionFiles();</span>
    +    }
    +
    +	@Path(&quot;/project/{id}/version/{vid}/dirs/&quot;)
    +    @GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +    public List&lt;ProjectFile&gt; getDirs(@PathParam(&quot;id&quot;) String prid,
    +            @PathParam(&quot;vid&quot;) String verid) {
    +        
    +<span class="nc" id="L191">	    ProjectVersion pv = getVersion(prid, verid);</span>
    +<span class="nc bnc" id="L192" title="All 2 branches missed.">        if (pv == null)</span>
    +<span class="nc" id="L193">            return Collections.EMPTY_LIST;</span>
    + 
    +<span class="nc" id="L195">        return pv.getFiles((Directory)null,</span>
    +<span class="nc" id="L196">                ProjectVersion.MASK_DIRECTORIES);</span>
    +	}
    +
    +	@Path(&quot;/project/{id}/version/{vid}/dirs/{dir: .+}&quot;)
    +    @GET
    +    @Produces({&quot;application/xml&quot;, &quot;application/json&quot;})
    +    public List&lt;ProjectFile&gt; getDirs(@PathParam(&quot;id&quot;) String prid,
    +            @PathParam(&quot;vid&quot;) String verid,
    +            @PathParam(&quot;dir&quot;) String path) {
    +        
    +<span class="nc" id="L206">        ProjectVersion pv = getVersion(prid, verid);</span>
    +<span class="nc bnc" id="L207" title="All 2 branches missed.">        if (pv == null)</span>
    +<span class="nc" id="L208">            return Collections.EMPTY_LIST;</span>
    +        
    +<span class="nc bnc" id="L210" title="All 2 branches missed.">        if (!path.startsWith(&quot;/&quot;))</span>
    +<span class="nc" id="L211">            path = &quot;/&quot; + path;</span>
    +        
    +<span class="nc" id="L213">        return pv.getFiles(Directory.getDirectory(path, false), </span>
    +<span class="nc" id="L214">                ProjectVersion.MASK_DIRECTORIES);</span>
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/index.html
    new file mode 100644
    index 000000000..1daab3d26
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.rest.api</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.rest.api</span></div><h1>eu.sqooss.rest.api</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">414 of 414</td><td class="ctr2">0%</td><td class="bar">50 of 50</td><td class="ctr2">0%</td><td class="ctr1">45</td><td class="ctr2">45</td><td class="ctr1">114</td><td class="ctr2">114</td><td class="ctr1">20</td><td class="ctr2">20</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="StoredProjectResource.html" class="el_class">StoredProjectResource</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="234" alt="234"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">26</td><td class="ctr2" id="g0">26</td><td class="ctr1" id="h0">62</td><td class="ctr2" id="i0">62</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="MetricsResource.html" class="el_class">MetricsResource</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="92" height="10" title="180" alt="180"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">19</td><td class="ctr2" id="g1">19</td><td class="ctr1" id="h1">52</td><td class="ctr2" id="i1">52</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/index.source.html
    new file mode 100644
    index 000000000..2fd84f497
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.rest.api/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.rest.api</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.rest.api</span></div><h1>eu.sqooss.rest.api</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">414 of 414</td><td class="ctr2">0%</td><td class="bar">50 of 50</td><td class="ctr2">0%</td><td class="ctr1">45</td><td class="ctr2">45</td><td class="ctr1">114</td><td class="ctr2">114</td><td class="ctr1">20</td><td class="ctr2">20</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="StoredProjectResource.java.html" class="el_source">StoredProjectResource.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="234" alt="234"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">26</td><td class="ctr2" id="g0">26</td><td class="ctr1" id="h0">62</td><td class="ctr2" id="i0">62</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="MetricsResource.java.html" class="el_source">MetricsResource.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="92" height="10" title="180" alt="180"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">19</td><td class="ctr2" id="g1">19</td><td class="ctr1" id="h1">52</td><td class="ctr2" id="i1">52</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AbstractMetric.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AbstractMetric.html
    new file mode 100644
    index 000000000..c2c90eb29
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AbstractMetric.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AbstractMetric</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">AbstractMetric</span></div><h1>AbstractMetric</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,654 of 1,654</td><td class="ctr2">0%</td><td class="bar">124 of 124</td><td class="ctr2">0%</td><td class="ctr1">95</td><td class="ctr2">95</td><td class="ctr1">345</td><td class="ctr2">345</td><td class="ctr1">33</td><td class="ctr2">33</td></tr></tfoot><tbody><tr><td id="a0"><a href="AbstractMetric.java.html#L93" class="el_method">AbstractMetric(BundleContext)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="236" alt="236"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="90" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">10</td><td class="ctr2" id="g1">10</td><td class="ctr1" id="h0">44</td><td class="ctr2" id="i0">44</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a16"><a href="AbstractMetric.java.html#L892" class="el_method">getObjectIdsToSync(StoredProject, Metric)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="72" height="10" title="143" alt="143"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h1">35</td><td class="ctr2" id="i1">35</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a23"><a href="AbstractMetric.java.html#L589" class="el_method">install()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="65" height="10" title="128" alt="128"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f4">5</td><td class="ctr2" id="g4">5</td><td class="ctr1" id="h2">29</td><td class="ctr2" id="i2">29</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a19"><a href="AbstractMetric.java.html#L335" class="el_method">getResultIfAlreadyCalculated(DAObject, List)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="62" height="10" title="123" alt="123"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="40" height="10" title="8" alt="8"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f5">5</td><td class="ctr2" id="g5">5</td><td class="ctr1" id="h3">24</td><td class="ctr2" id="i3">24</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="AbstractMetric.java.html#L722" class="el_method">addConfigEntry(String, String, String, PluginInfo.ConfigurationType)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="56" height="10" title="111" alt="111"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="40" height="10" title="8" alt="8"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f6">5</td><td class="ctr2" id="g6">5</td><td class="ctr1" id="h4">22</td><td class="ctr2" id="i4">22</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a27"><a href="AbstractMetric.java.html#L770" class="el_method">removeConfigEntry(String, PluginInfo.ConfigurationType)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="48" height="10" title="96" alt="96"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f8">4</td><td class="ctr2" id="g8">4</td><td class="ctr1" id="h6">18</td><td class="ctr2" id="i6">18</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a24"><a href="AbstractMetric.java.html#L439" class="el_method">lockObject(DAObject)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="44" height="10" title="87" alt="87"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f10">3</td><td class="ctr2" id="g10">3</td><td class="ctr1" id="h7">15</td><td class="ctr2" id="i7">15</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a28"><a href="AbstractMetric.java.html#L494" class="el_method">run(DAObject)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="44" height="10" title="87" alt="87"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="50" height="10" title="10" alt="10"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f2">6</td><td class="ctr2" id="g2">6</td><td class="ctr1" id="h5">22</td><td class="ctr2" id="i5">22</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a18"><a href="AbstractMetric.java.html#L404" class="el_method">getResult(DAObject, List)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="36" height="10" title="72" alt="72"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="50" height="10" title="10" alt="10"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f3">6</td><td class="ctr2" id="g3">6</td><td class="ctr1" id="h8">14</td><td class="ctr2" id="i8">14</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a31"><a href="AbstractMetric.java.html#L469" class="el_method">unlockObject(DAObject)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="26" height="10" title="53" alt="53"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d13"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f13">2</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h13">8</td><td class="ctr2" id="i13">8</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a25"><a href="AbstractMetric.java.html#L544" class="el_method">logErr(String, DAObject, Exception)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="25" height="10" title="51" alt="51"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h11">9</td><td class="ctr2" id="i11">9</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a17"><a href="AbstractMetric.java.html#L843" class="el_method">getResult(DAObject, Class, Metric, Result.ResultType)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="25" height="10" title="50" alt="50"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d14"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f14">2</td><td class="ctr2" id="g14">2</td><td class="ctr1" id="h10">10</td><td class="ctr2" id="i10">10</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a30"><a href="AbstractMetric.java.html#L824" class="el_method">static {...}</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="22" height="10" title="45" alt="45"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h9">11</td><td class="ctr2" id="i9">11</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a2"><a href="AbstractMetric.java.html#L869" class="el_method">checkDependencies()</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="21" height="10" title="42" alt="42"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f9">4</td><td class="ctr2" id="g9">4</td><td class="ctr1" id="h14">8</td><td class="ctr2" id="i14">8</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a4"><a href="AbstractMetric.java.html#L370" class="el_method">findGetResultMethod(Class)</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="20" height="10" title="41" alt="41"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">7</td><td class="ctr2" id="i18">7</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a21"><a href="AbstractMetric.java.html#L681" class="el_method">getUniqueKey()</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="20" height="10" title="40" alt="40"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h12">9</td><td class="ctr2" id="i12">9</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a20"><a href="AbstractMetric.java.html#L565" class="el_method">getSupportedMetrics(Class)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="18" height="10" title="37" alt="37"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="40" height="10" title="8" alt="8"/></td><td class="ctr2" id="e12">0%</td><td class="ctr1" id="f7">5</td><td class="ctr2" id="g7">5</td><td class="ctr1" id="h15">8</td><td class="ctr2" id="i15">8</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a5"><a href="AbstractMetric.java.html#L528" class="el_method">findRunMethod(String, Class)</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="16" height="10" title="33" alt="33"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h19">7</td><td class="ctr2" id="i19">7</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a10"><a href="AbstractMetric.java.html#L698" class="el_method">getConfigurationSchema()</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="16" height="10" title="32" alt="32"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e13">0%</td><td class="ctr1" id="f11">3</td><td class="ctr2" id="g11">3</td><td class="ctr1" id="h20">6</td><td class="ctr2" id="i20">6</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a9"><a href="AbstractMetric.java.html#L808" class="el_method">getConfigurationOption(String)</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="13" height="10" title="27" alt="27"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d12"><img src="../../../.resources/redbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e14">0%</td><td class="ctr1" id="f12">3</td><td class="ctr2" id="g12">3</td><td class="ctr1" id="h16">8</td><td class="ctr2" id="i16">8</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a32"><a href="AbstractMetric.java.html#L657" class="el_method">update()</a></td><td class="bar" id="b20"><img src="../../../.resources/redbar.gif" width="12" height="10" title="24" alt="24"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d15"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e15">0%</td><td class="ctr1" id="f15">2</td><td class="ctr2" id="g15">2</td><td class="ctr1" id="h17">8</td><td class="ctr2" id="i17">8</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a7"><a href="AbstractMetric.java.html#L556" class="el_method">getAllSupportedMetrics()</a></td><td class="bar" id="b21"><img src="../../../.resources/redbar.gif" width="9" height="10" title="19" alt="19"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">4</td><td class="ctr2" id="i21">4</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a3"><a href="AbstractMetric.java.html#L650" class="el_method">cleanup(DAObject)</a></td><td class="bar" id="b22"><img src="../../../.resources/redbar.gif" width="7" height="10" title="14" alt="14"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">3</td><td class="ctr2" id="i22">3</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a26"><a href="AbstractMetric.java.html#L640" class="el_method">remove()</a></td><td class="bar" id="b23"><img src="../../../.resources/redbar.gif" width="4" height="10" title="9" alt="9"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">2</td><td class="ctr2" id="i23">2</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a8"><a href="AbstractMetric.java.html#L278" class="el_method">getAuthor()</a></td><td class="bar" id="b24"><img src="../../../.resources/redbar.gif" width="4" height="10" title="8" alt="8"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">2</td><td class="ctr2" id="i24">2</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a13"><a href="AbstractMetric.java.html#L287" class="el_method">getDescription()</a></td><td class="bar" id="b25"><img src="../../../.resources/redbar.gif" width="4" height="10" title="8" alt="8"/></td><td class="ctr2" id="c25">0%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">1</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h25">2</td><td class="ctr2" id="i25">2</td><td class="ctr1" id="j25">1</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a15"><a href="AbstractMetric.java.html#L296" class="el_method">getName()</a></td><td class="bar" id="b26"><img src="../../../.resources/redbar.gif" width="4" height="10" title="8" alt="8"/></td><td class="ctr2" id="c26">0%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">1</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">2</td><td class="ctr2" id="i26">2</td><td class="ctr1" id="j26">1</td><td class="ctr2" id="k26">1</td></tr><tr><td id="a22"><a href="AbstractMetric.java.html#L305" class="el_method">getVersion()</a></td><td class="bar" id="b27"><img src="../../../.resources/redbar.gif" width="4" height="10" title="8" alt="8"/></td><td class="ctr2" id="c27">0%</td><td class="bar" id="d27"/><td class="ctr2" id="e27">n/a</td><td class="ctr1" id="f27">1</td><td class="ctr2" id="g27">1</td><td class="ctr1" id="h27">2</td><td class="ctr2" id="i27">2</td><td class="ctr1" id="j27">1</td><td class="ctr2" id="k27">1</td></tr><tr><td id="a14"><a href="AbstractMetric.java.html#L862" class="el_method">getMetricActivationTypes(Metric)</a></td><td class="bar" id="b28"><img src="../../../.resources/redbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="c28">0%</td><td class="bar" id="d28"/><td class="ctr2" id="e28">n/a</td><td class="ctr1" id="f28">1</td><td class="ctr2" id="g28">1</td><td class="ctr1" id="h29">1</td><td class="ctr2" id="i29">1</td><td class="ctr1" id="j28">1</td><td class="ctr2" id="k28">1</td></tr><tr><td id="a11"><a href="AbstractMetric.java.html#L313" class="el_method">getDateInstalled()</a></td><td class="bar" id="b29"><img src="../../../.resources/redbar.gif" width="2" height="10" title="5" alt="5"/></td><td class="ctr2" id="c29">0%</td><td class="bar" id="d29"/><td class="ctr2" id="e29">n/a</td><td class="ctr1" id="f29">1</td><td class="ctr2" id="g29">1</td><td class="ctr1" id="h30">1</td><td class="ctr2" id="i30">1</td><td class="ctr1" id="j29">1</td><td class="ctr2" id="k29">1</td></tr><tr><td id="a29"><a href="AbstractMetric.java.html#L939" class="el_method">setJob(Job)</a></td><td class="bar" id="b30"><img src="../../../.resources/redbar.gif" width="2" height="10" title="5" alt="5"/></td><td class="ctr2" id="c30">0%</td><td class="bar" id="d30"/><td class="ctr2" id="e30">n/a</td><td class="ctr1" id="f30">1</td><td class="ctr2" id="g30">1</td><td class="ctr1" id="h28">2</td><td class="ctr2" id="i28">2</td><td class="ctr1" id="j30">1</td><td class="ctr2" id="k30">1</td></tr><tr><td id="a6"><a href="AbstractMetric.java.html#L674" class="el_method">getActivationTypes()</a></td><td class="bar" id="b31"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c31">0%</td><td class="bar" id="d31"/><td class="ctr2" id="e31">n/a</td><td class="ctr1" id="f31">1</td><td class="ctr2" id="g31">1</td><td class="ctr1" id="h31">1</td><td class="ctr2" id="i31">1</td><td class="ctr1" id="j31">1</td><td class="ctr2" id="k31">1</td></tr><tr><td id="a12"><a href="AbstractMetric.java.html#L885" class="el_method">getDependencies()</a></td><td class="bar" id="b32"><img src="../../../.resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c32">0%</td><td class="bar" id="d32"/><td class="ctr2" id="e32">n/a</td><td class="ctr1" id="f32">1</td><td class="ctr2" id="g32">1</td><td class="ctr1" id="h32">1</td><td class="ctr2" id="i32">1</td><td class="ctr1" id="j32">1</td><td class="ctr2" id="k32">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AbstractMetric.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AbstractMetric.java.html
    new file mode 100644
    index 000000000..01c508d09
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AbstractMetric.java.html
    @@ -0,0 +1,942 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AbstractMetric.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">AbstractMetric.java</span></div><h1>AbstractMetric.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +package eu.sqooss.service.abstractmetric;
    +
    +import java.lang.reflect.InvocationTargetException;
    +import java.lang.reflect.Method;
    +import java.math.BigInteger;
    +import java.security.MessageDigest;
    +import java.security.NoSuchAlgorithmException;
    +import java.util.ArrayList;
    +import java.util.Arrays;
    +import java.util.Collections;
    +import java.util.Date;
    +import java.util.HashMap;
    +import java.util.HashSet;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Set;
    +import java.util.SortedSet;
    +import java.util.TreeSet;
    +import java.util.concurrent.ConcurrentHashMap;
    +
    +import org.osgi.framework.Bundle;
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.ServiceReference;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.EncapsulationUnitMeasurement;
    +import eu.sqooss.service.db.ExecutionUnitMeasurement;
    +import eu.sqooss.service.db.MailMessageMeasurement;
    +import eu.sqooss.service.db.MailingListThreadMeasurement;
    +import eu.sqooss.service.db.Metric;
    +import eu.sqooss.service.db.MetricMeasurement;
    +import eu.sqooss.service.db.MetricType;
    +import eu.sqooss.service.db.NameSpaceMeasurement;
    +import eu.sqooss.service.db.Plugin;
    +import eu.sqooss.service.db.PluginConfiguration;
    +import eu.sqooss.service.db.ProjectFileMeasurement;
    +import eu.sqooss.service.db.ProjectVersionMeasurement;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.db.StoredProjectMeasurement;
    +import eu.sqooss.service.db.MetricType.Type;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +import eu.sqooss.service.util.Pair;
    +
    +/**
    + * A base class for all metrics. Implements basic functionality such as
    + * logging setup and plug-in information retrieval from the OSGi bundle
    + * manifest file. Metrics can choose to directly implement
    + * the {@link eu.sqooss.abstractmetric.AlitheiaPlugin} interface instead of 
    + * extending this class.
    + */
    +public abstract class AbstractMetric implements AlitheiaPlugin {
    +
    +    /** Reference to the metric bundle context */
    +    protected BundleContext bc;
    +
    +    /** Logger for administrative operations */
    +<span class="nc" id="L93">    protected Logger log = null;</span>
    +
    +    /** Reference to the DB service, not to be passed to metric jobs */
    +    protected DBService db;
    +
    +    /** 
    +     * Reference to the plugin administrator service, not to be passed to 
    +     * metric jobs 
    +     */
    +    protected PluginAdmin pa;
    +    
    +    /**
    +     * The scheduler job that executes this metric. 
    +     */
    +<span class="nc" id="L107">    protected ThreadLocal&lt;Job&gt; job = new ThreadLocal&lt;Job&gt;();</span>
    +
    +    /** 
    +     * Metric mnemonics for the metrics required to be present for this 
    +     * metric to operate.
    +     */
    +<span class="nc" id="L113">    private Set&lt;String&gt; dependencies = new HashSet&lt;String&gt;();</span>
    +    
    +    /** Set of declared metrics indexed by their mnemonic*/
    +<span class="nc" id="L116">    private Map&lt;String, Metric&gt; metrics = new HashMap&lt;String, Metric&gt;();</span>
    +    
    +    /** The list of this plug-in's activators*/
    +<span class="nc" id="L119">    private Set&lt;Class&lt;? extends DAObject&gt;&gt; activators =</span>
    +<span class="nc" id="L120">        new HashSet&lt;Class&lt;? extends DAObject&gt;&gt;();</span>
    +
    +<span class="nc" id="L122">    private Map&lt;Metric, List&lt;Class&lt;? extends DAObject&gt;&gt;&gt; metricActType =</span>
    +<span class="nc" id="L123">    	new HashMap&lt;Metric, List&lt;Class&lt;? extends DAObject&gt;&gt;&gt;();</span>
    +    
    +    protected static final String QRY_SYNC_PV = &quot;select pv.id from ProjectVersion pv &quot; +
    +    		&quot;where pv.project = :project and not exists(&quot; +
    +    		&quot;	select pvm.projectVersion from ProjectVersionMeasurement pvm &quot; +
    +    		&quot;	where pvm.projectVersion.id = pv.id and pvm.metric.id = :metric) &quot; +
    +    		&quot;order by pv.sequence asc&quot;;
    +    
    +    protected static final String QRY_SYNC_PF = &quot;select pf.id &quot; +
    +    		&quot;from ProjectVersion pv, ProjectFile pf &quot; +
    +    		&quot;where pf.projectVersion=pv and pv.project = :project &quot; +
    +    		&quot;and not exists (&quot; +
    +    		&quot;	select pfm.projectFile &quot; +
    +    		&quot;	from ProjectFileMeasurement pfm &quot; +
    +    		&quot;	where pfm.projectFile.id = pf.id &quot; +
    +    		&quot;	and pfm.metric.id = :metric) &quot; +
    +    		&quot;	and pf.isDirectory = false)  &quot; +
    +    		&quot;order by pv.sequence asc&quot;;
    +    
    +    protected static final String QRY_SYNC_PD = &quot;select pf.id &quot; +
    +		&quot;from ProjectVersion pv, ProjectFile pf &quot; +
    +		&quot;where pf.projectVersion=pv and pv.project = :project &quot; +
    +		&quot;and not exists (&quot; +
    +		&quot;	select pfm.projectFile &quot; +
    +		&quot;	from ProjectFileMeasurement pfm &quot; +
    +		&quot;	where pfm.projectFile.id = pf.id &quot; +
    +		&quot;	and pfm.metric.id = :metric) &quot; +
    +		&quot;	and pf.isDirectory = true)  &quot; +
    +		&quot;order by pv.sequence asc&quot;;
    +    
    +    protected static final String QRY_SYNC_MM = &quot;select mm.id &quot; +
    +    		&quot;from MailMessage mm &quot; +
    +    		&quot;where mm.list.storedProject = :project &quot; +
    +    		&quot;and mm.id not in (&quot; +
    +    		&quot;	select mmm.mail.id &quot; +
    +    		&quot;	from MailMessageMeasurement mmm &quot; +
    +    		&quot;	where mmm.metric.id =:metric and mmm.mail.id = mm.id))&quot;;
    +    
    +    protected static final String QRY_SYNC_MT = &quot;select mlt.id &quot; +
    +    		&quot;from MailingListThread mlt &quot; +
    +    		&quot;where mlt.list.storedProject = :project &quot; +
    +    		&quot;and mlt.id not in (&quot; +
    +    		&quot;	select mltm.thread.id &quot; +
    +    		&quot;	from MailingListThreadMeasurement mltm &quot; +
    +    		&quot;	where mltm.metric.id =:metric and mltm.thread.id = mlt.id)&quot;;
    +    
    +    protected static final String QRY_SYNC_DEV = &quot;select d.id &quot; +
    +    		&quot;from Developer d &quot; +
    +    		&quot;where d.storedProject = :project&quot;;
    +    
    +    protected static final String QRY_SYNC_NS = &quot;select ns.id &quot; +
    +            &quot;from NameSpace ns, ProjectVersion pv &quot; +
    +            &quot;where pv = ns.changeVersion &quot; +
    +            &quot;and pv.project = :project &quot; +
    +            &quot;and not exists ( &quot; +
    +            &quot;   select nsm &quot; + 
    +            &quot;   from NameSpaceMeasurement nsm &quot; + 
    +            &quot;   where nsm.metric.id = :metric &quot; +
    +            &quot;   and nsm.namespace = ns) &quot; +
    +            &quot;order by pv.sequence asc&quot;;
    +    
    +    protected static final String QRY_SYNC_ENCUNT = &quot;select encu.id &quot; +
    +            &quot;from EncapsulationUnit encu, ProjectVersion pv, ProjectFile pf &quot; +
    +            &quot; where pf.projectVersion = pv &quot; +
    +            &quot; and encu.file = pf &quot; +
    +            &quot;and pv.project = :project &quot; +
    +            &quot;and not exists ( &quot; +
    +            &quot;    select eum &quot; +
    +            &quot;    from EncapsulationUnitMeasurement eum &quot; +
    +            &quot;    where eum.encapsulationUnit = encu &quot; +
    +            &quot;    and eum.metric.id = :metric &quot; +
    +            &quot; ) order by pv.sequence asc &quot;;
    +    
    +    protected static final String QRY_SYNC_EXECUNT = &quot;select exu.id &quot; +
    +    		&quot;from ExecutionUnit exu, EncapsulationUnit encu, &quot; +
    +    		&quot;     ProjectVersion pv, ProjectFile pf &quot; +
    +            &quot;where pf.projectVersion = pv &quot; +
    +            &quot;and encu.file = pf &quot; +
    +            &quot;and pv.project = :project &quot; +
    +            &quot;and exu.changed = true &quot; +
    +            &quot;and exu.encapsulationUnit = encu &quot; +
    +            &quot;and not exists ( &quot; +
    +            &quot;    select eum  &quot; +
    +            &quot;    from ExecutionUnitMeasurement eum &quot; +
    +            &quot;    where eum.executionUnit = exu &quot; +
    +            &quot;    and eum.metric.id = :metric) &quot; +
    +            &quot;order by pv.sequence asc&quot;;
    +    
    +    /**
    +     * Init basic services common to all implementing classes
    +     * @param bc - The bundle context of the implementing metric - to be passed
    +     * by the activator.
    +     */
    +<span class="nc" id="L216">    protected AbstractMetric(BundleContext bc) {</span>
    +
    +<span class="nc" id="L218">        this.bc = bc;</span>
    +       
    +<span class="nc" id="L220">        log = AlitheiaCore.getInstance().getLogManager().createLogger(Logger.NAME_SQOOSS_METRIC);</span>
    +
    +<span class="nc bnc" id="L222" title="All 2 branches missed.">        if (log == null) {</span>
    +<span class="nc" id="L223">            System.out.println(&quot;ERROR: Got no logger&quot;);</span>
    +        }
    +
    +<span class="nc" id="L226">        db = AlitheiaCore.getInstance().getDBService();</span>
    +
    +<span class="nc bnc" id="L228" title="All 2 branches missed.">        if(db == null)</span>
    +<span class="nc" id="L229">            log.error(&quot;Could not get a reference to the DB service&quot;);</span>
    +
    +<span class="nc" id="L231">        pa = AlitheiaCore.getInstance().getPluginAdmin();</span>
    +
    +<span class="nc bnc" id="L233" title="All 2 branches missed.">        if(pa == null)</span>
    +<span class="nc" id="L234">            log.error(&quot;Could not get a reference to the Plugin Administation &quot;</span>
    +                    + &quot;service&quot;);
    +        
    +        /*Discover the declared metrics*/
    +<span class="nc" id="L238">        MetricDeclarations md = this.getClass().getAnnotation(MetricDeclarations.class);</span>
    +
    +<span class="nc bnc" id="L240" title="All 4 branches missed.">		if (md != null &amp;&amp; md.metrics().length &gt; 0) {</span>
    +<span class="nc bnc" id="L241" title="All 2 branches missed.">			for (MetricDecl metric : md.metrics()) {</span>
    +<span class="nc" id="L242">				log.debug(&quot;Found metric: &quot; + metric.mnemonic() + &quot; with &quot;</span>
    +<span class="nc" id="L243">						+ metric.activators().length + &quot; activators&quot;);</span>
    +
    +<span class="nc bnc" id="L245" title="All 2 branches missed.">				if (metrics.containsKey(metric.mnemonic())) {</span>
    +<span class="nc" id="L246">				    log.error(&quot;Duplicate metric mnemonic &quot; + metric.mnemonic());</span>
    +<span class="nc" id="L247">				    continue;</span>
    +				}
    +				
    +<span class="nc" id="L250">				Metric m = new Metric();</span>
    +<span class="nc" id="L251">				m.setDescription(metric.descr());</span>
    +<span class="nc" id="L252">				m.setMnemonic(metric.mnemonic());</span>
    +<span class="nc" id="L253">				m.setMetricType(new MetricType(MetricType.fromActivator(metric.activators()[0])));</span>
    +			
    +<span class="nc" id="L255">				List&lt;Class&lt;? extends DAObject&gt;&gt; activs = new ArrayList&lt;Class&lt;? extends DAObject&gt;&gt;();				</span>
    +<span class="nc bnc" id="L256" title="All 2 branches missed.">				for (Class&lt;? extends DAObject&gt; o : metric.activators()) {</span>
    +<span class="nc" id="L257">					activs.add(o);</span>
    +				}
    +				
    +<span class="nc" id="L260">				metricActType.put(m, activs);</span>
    +				
    +<span class="nc" id="L262">				activators.addAll(Arrays.asList(metric.activators()));</span>
    +				
    +<span class="nc" id="L264">				metrics.put(m.getMnemonic(), m);</span>
    +<span class="nc bnc" id="L265" title="All 2 branches missed.">				if (metric.dependencies().length &gt; 0)</span>
    +<span class="nc" id="L266">					dependencies.addAll(Arrays.asList(metric.dependencies()));</span>
    +			}
    +<span class="nc" id="L268">		} else {</span>
    +<span class="nc" id="L269">			log.warn(&quot;Plug-in &quot; + getName() + &quot; declares no metrics&quot;);</span>
    +		}
    +<span class="nc" id="L271">     }</span>
    +
    +    /**
    +     * Retrieve author information from the plug-in bundle
    +     */
    +    public String getAuthor() {
    +
    +<span class="nc" id="L278">        return (String) bc.getBundle().getHeaders().get(</span>
    +<span class="nc" id="L279">                org.osgi.framework.Constants.BUNDLE_CONTACTADDRESS);</span>
    +    }
    +
    +    /**
    +     * Retrieve the plug-in description from the plug-in bundle
    +     */
    +    public String getDescription() {
    +
    +<span class="nc" id="L287">        return (String) bc.getBundle().getHeaders().get(</span>
    +<span class="nc" id="L288">                org.osgi.framework.Constants.BUNDLE_DESCRIPTION);</span>
    +    }
    +
    +    /**
    +     * Retrieve the plug-in name as specified in the metric bundle
    +     */
    +    public String getName() {
    +
    +<span class="nc" id="L296">        return (String) bc.getBundle().getHeaders().get(</span>
    +<span class="nc" id="L297">                org.osgi.framework.Constants.BUNDLE_NAME);</span>
    +    }
    +
    +    /**
    +     * Retrieve the plug-in version as specified in the metric bundle
    +     */
    +    public String getVersion() {
    +
    +<span class="nc" id="L305">        return (String) bc.getBundle().getHeaders().get(</span>
    +<span class="nc" id="L306">                org.osgi.framework.Constants.BUNDLE_VERSION);</span>
    +    }
    +
    +    /**
    +     * Retrieve the installation date for this plug-in version
    +     */
    +    public final Date getDateInstalled() {
    +<span class="nc" id="L313">        return Plugin.getPluginByHashcode(getUniqueKey()).getInstalldate();</span>
    +    }
    +
    +<span class="nc" id="L316">    Map&lt;Long,Pair&lt;Object,Long&gt;&gt; blockerObjects = new ConcurrentHashMap&lt;Long,Pair&lt;Object,Long&gt;&gt;();</span>
    +
    +    /**
    +     * Call the appropriate getResult() method according to
    +     * the type of the entity that is measured.
    +     *
    +     * Use this method if you don't want the metric results
    +     * to be calculated on-demand. Otherwise, use getResult().
    +     *
    +     * @param o DAO that specifies the desired result type.
    +     *      The type of o is used to dispatch to the correct
    +     *      specialized getResult() method of the sub-interfaces.
    +     * @return result (measurement) performed by this metric
    +     *      on the project data specified by o.
    +     * @throws MetricMismatchException if the DAO is of a type
    +     *      not supported by this metric.
    +     */
    +     @SuppressWarnings(&quot;unchecked&quot;)
    +     public List&lt;Result&gt; getResultIfAlreadyCalculated(DAObject o, List&lt;Metric&gt; l) throws MetricMismatchException {
    +<span class="nc" id="L335">        boolean found = false;        </span>
    +<span class="nc" id="L336">        List&lt;Result&gt; result = new ArrayList&lt;Result&gt;();</span>
    +        
    +<span class="nc bnc" id="L338" title="All 2 branches missed.">        for (Metric m : l) {</span>
    +<span class="nc bnc" id="L339" title="All 2 branches missed.">            if (!metrics.containsKey(m.getMnemonic())) {</span>
    +<span class="nc" id="L340">                throw new MetricMismatchException(&quot;Metric &quot; + m.getMnemonic()</span>
    +<span class="nc" id="L341">                        + &quot; not defined by plugin &quot;</span>
    +<span class="nc" id="L342">                        + Plugin.getPluginByHashcode(getUniqueKey()).getName());</span>
    +            }
    +<span class="nc" id="L344">            List&lt;Result&gt; re = null;</span>
    +            try {
    +<span class="nc" id="L346">                Method method = findGetResultMethod(o.getClass());</span>
    +<span class="nc" id="L347">                re = (List&lt;Result&gt;) method.invoke(this, o, m);</span>
    +<span class="nc" id="L348">            } catch (SecurityException e) {</span>
    +<span class="nc" id="L349">                logErr(&quot;getResult&quot;, o, e);</span>
    +<span class="nc" id="L350">            } catch (NoSuchMethodException e) {</span>
    +<span class="nc" id="L351">                log.error(&quot;No method getResult(&quot; + m.getMetricType().toActivator() + &quot;) for type &quot;</span>
    +<span class="nc" id="L352">                        + this.getClass().getName());</span>
    +<span class="nc" id="L353">            } catch (IllegalArgumentException e) {</span>
    +<span class="nc" id="L354">                logErr(&quot;getResult&quot;, o, e);</span>
    +<span class="nc" id="L355">            } catch (IllegalAccessException e) {</span>
    +<span class="nc" id="L356">                logErr(&quot;getResult&quot;, o, e);</span>
    +<span class="nc" id="L357">            } catch (InvocationTargetException e) {</span>
    +<span class="nc" id="L358">                logErr(&quot;getResult&quot;, o, e);</span>
    +            }
    +<span class="nc bnc" id="L360" title="All 4 branches missed.">            if (re != null &amp;&amp; !re.isEmpty()) {</span>
    +<span class="nc" id="L361">                result.addAll(re);</span>
    +            }
    +        }
    +
    +<span class="nc" id="L365">        return result;</span>
    +    }
    +
    +     private Method findGetResultMethod(Class&lt;?&gt; clazz) 
    +     throws NoSuchMethodException {
    +<span class="nc" id="L370">     Method m = null;</span>
    +     
    +     try {
    +<span class="nc" id="L373">         m = this.getClass().getMethod(&quot;getResult&quot;, clazz, Metric.class);                </span>
    +<span class="nc" id="L374">     } catch (NoSuchMethodException nsme) {</span>
    +         try {
    +<span class="nc" id="L376">             m = this.getClass().getMethod(&quot;getResult&quot;, clazz.getSuperclass(), Metric.class);</span>
    +<span class="nc" id="L377">         } catch (NoSuchMethodException nsme1) {</span>
    +<span class="nc" id="L378">             throw nsme;</span>
    +         }
    +     }
    +
    +<span class="nc" id="L382">     return m;</span>
    +     }
    +     
    +    /**
    +     * Call the appropriate getResult() method according to
    +     * the type of the entity that is measured.
    +     *
    +     * If the appropriate getResult() doesn't return any value,
    +     * the metric is forced to calculate the result. Then the
    +     * appropriate getResult() method is called again.
    +     *
    +     * @param o DAO that specifies the desired result type.
    +     *      The type of o is used to dispatch to the correct
    +     *      specialized getResult() method of the sub-interfaces.
    +     * @return result (measurement) performed by this metric
    +     *      on the project data specified by o.
    +     * @throws MetricMismatchException if the DAO is of a type
    +     *      not supported by this metric.
    +     * @throws AlreadyProcessingException 
    +     */
    +    public List&lt;Result&gt; getResult(DAObject o, List&lt;Metric&gt; l) 
    +    throws MetricMismatchException, AlreadyProcessingException, Exception {
    +<span class="nc" id="L404">        List&lt;Result&gt; r = getResultIfAlreadyCalculated(o, l);</span>
    +
    +        // the result hasn't been calculated yet. Do so.
    +<span class="nc bnc" id="L407" title="All 4 branches missed.">        if (r == null || r.size() == 0) {</span>
    +           /*
    +             * To ensure that no two instances of the metric operate on the same
    +             * DAO lock on the DAO. Working on the same DAO can happen often
    +             * when a plugin starts the calculation of another metric as a
    +             * result of a plugin dependency association. This lock has the side
    +             * effect that no two Plugins can be invoked with the same DAO as an
    +             * argument even if the plug-ins do not depend on each other.
    +             */
    +<span class="nc" id="L416">            synchronized (lockObject(o)) {</span>
    +                try {
    +<span class="nc" id="L418">                    run(o);</span>
    +                    
    +<span class="nc" id="L420">                    r = getResultIfAlreadyCalculated(o, l);</span>
    +<span class="nc bnc" id="L421" title="All 4 branches missed.">                    if (r == null || r.size() == 0) {</span>
    +<span class="nc bnc" id="L422" title="All 2 branches missed.">                        if (job.get().state() != Job.State.Yielded)</span>
    +<span class="nc" id="L423">                            log.debug(&quot;Metric &quot; + getClass() + &quot; didn't return&quot;</span>
    +<span class="nc" id="L424">                                + &quot;a result even after running it. DAO: &quot;</span>
    +<span class="nc" id="L425">                                + o.getId());</span>
    +                    }
    +<span class="nc" id="L427">                } finally {</span>
    +<span class="nc" id="L428">                    unlockObject(o);</span>
    +<span class="nc" id="L429">                }</span>
    +            }
    +        }
    +
    +<span class="nc" id="L433">        return r;</span>
    +    }
    +
    +<span class="nc" id="L436">    private Map&lt;Long,Pair&lt;Object,Integer&gt;&gt; locks = new HashMap&lt;Long,Pair&lt;Object,Integer&gt;&gt;();</span>
    +    
    +    private Object lockObject(DAObject o) throws AlreadyProcessingException {
    +<span class="nc" id="L439">    	synchronized (locks) {</span>
    +<span class="nc bnc" id="L440" title="All 2 branches missed.">            if (!locks.containsKey(o.getId())) {</span>
    +<span class="nc" id="L441">                locks.put(o.getId(), </span>
    +<span class="nc" id="L442">                        new Pair&lt;Object, Integer&gt;(new Object(),0));</span>
    +            }
    +<span class="nc" id="L444">            Pair&lt;Object, Integer&gt; p = locks.get(o.getId());</span>
    +<span class="nc bnc" id="L445" title="All 2 branches missed.">            if (p.second + 1 &gt; 1) {</span>
    +                /*
    +                 * Break and reschedule the calculation of each call to the
    +                 * getResult method if it originates from another thread than
    +                 * the thread that has currently locked the DAO object. 
    +                 * This is required for the DB transaction in the stopped
    +                 * job to see the results of the calculation of the original
    +                 * job.
    +                 */ 
    +<span class="nc" id="L454">                log.debug(&quot;DAO Id:&quot; + o.getId() + </span>
    +<span class="nc" id="L455">                        &quot; Already locked - failing job&quot;);</span>
    +                try {
    +<span class="nc" id="L457">                    throw new AlreadyProcessingException();</span>
    +<span class="nc" id="L458">                } finally {</span>
    +<span class="nc" id="L459">                    MetricActivator ma = AlitheiaCore.getInstance().getMetricActivator();</span>
    +<span class="nc" id="L460">                    ma.runMetric(o, this);</span>
    +<span class="nc" id="L461">                }</span>
    +            }
    +<span class="nc" id="L463">            p.second = p.second + 1;</span>
    +<span class="nc" id="L464">            return p.first;</span>
    +        }
    +    }
    +    
    +    private void unlockObject(DAObject o) {
    +<span class="nc" id="L469">    	synchronized(locks) {</span>
    +<span class="nc" id="L470">    		Pair&lt;Object,Integer&gt; p = locks.get(o.getId());</span>
    +<span class="nc" id="L471">    		p.second = p.second - 1;</span>
    +<span class="nc bnc" id="L472" title="All 2 branches missed.">    		if (p.second == 0) {</span>
    +<span class="nc" id="L473">    			locks.remove(o.getId());</span>
    +<span class="nc" id="L474">    		} else {</span>
    +<span class="nc" id="L475">    		log.debug(&quot;Unlocking DAO Id:&quot; + o.getId());</span>
    +    		}
    +    	}
    +<span class="nc" id="L478">    }</span>
    +    
    +    /**
    +     * Call the appropriate run() method according to the type of the entity
    +     * that is measured.
    +     *
    +     * @param o
    +     *                DAO which determines which sub-interface run method is
    +     *                called and also determines what is to be measured by that
    +     *                sub-interface.
    +     * @throws MetricMismatchException
    +     *                 if the DAO is of a type not supported by this metric.
    +     */
    +    public void run(DAObject o) throws MetricMismatchException, 
    +        AlreadyProcessingException, Exception {
    +
    +<span class="nc bnc" id="L494" title="All 2 branches missed.">        if (!checkDependencies()) {</span>
    +<span class="nc" id="L495">            log.error(&quot;Plug-in dependency check failed&quot;);</span>
    +<span class="nc" id="L496">            return;</span>
    +        }
    +
    +        try {
    +<span class="nc" id="L500">            Method m = findRunMethod(&quot;run&quot;, o.getClass());</span>
    +<span class="nc" id="L501">            m.invoke(this, o);</span>
    +<span class="nc" id="L502">        } catch (SecurityException e) {</span>
    +<span class="nc" id="L503">            logErr(&quot;run&quot;, o, e);</span>
    +<span class="nc" id="L504">        } catch (NoSuchMethodException e) {</span>
    +<span class="nc" id="L505">            logErr(&quot;run&quot;, o, e);</span>
    +<span class="nc" id="L506">        } catch (IllegalArgumentException e) {</span>
    +<span class="nc" id="L507">            logErr(&quot;run&quot;, o, e);</span>
    +<span class="nc" id="L508">        } catch (IllegalAccessException e) {</span>
    +<span class="nc" id="L509">            logErr(&quot;run&quot;, o, e);</span>
    +<span class="nc" id="L510">        } catch (InvocationTargetException e) {</span>
    +            // Forward exception to metric job exception handler
    +<span class="nc bnc" id="L512" title="All 2 branches missed.">            if (e.getCause() instanceof AlreadyProcessingException) {</span>
    +<span class="nc" id="L513">                throw (AlreadyProcessingException) e.getCause();</span>
    +            } else {
    +<span class="nc bnc" id="L515" title="All 4 branches missed.">                if (e != null &amp;&amp; e.getCause() != null) {</span>
    +<span class="nc" id="L516">                    logErr(&quot;run&quot;, o, e);</span>
    +<span class="nc bnc" id="L517" title="All 2 branches missed.">                    if (e.getCause() != null)</span>
    +<span class="nc" id="L518">                        throw new Exception(e.getCause());</span>
    +                    else
    +<span class="nc" id="L520">                        throw new Exception(e);</span>
    +                }
    +            }
    +        }
    +<span class="nc" id="L524">    }</span>
    +    
    +    private Method findRunMethod(String name, Class&lt;?&gt; clazz) 
    +        throws NoSuchMethodException {
    +<span class="nc" id="L528">        Method m = null;</span>
    +        
    +        try {
    +<span class="nc" id="L531">            m = this.getClass().getMethod(name, clazz);                </span>
    +<span class="nc" id="L532">        } catch (NoSuchMethodException nsme) {</span>
    +            try {
    +<span class="nc" id="L534">                m = this.getClass().getMethod(name, clazz.getSuperclass());</span>
    +<span class="nc" id="L535">            } catch (NoSuchMethodException nsme1) {</span>
    +<span class="nc" id="L536">                throw nsme;</span>
    +            }
    +        }
    +       
    +<span class="nc" id="L540">        return m;</span>
    +    }
    +    
    +    private void logErr(String method, DAObject o, Exception e) {
    +<span class="nc" id="L544">        log.error(&quot;Plugin:&quot; + this.getClass().toString() + </span>
    +<span class="nc" id="L545">                &quot;\nDAO id: &quot; + o.getId() + </span>
    +<span class="nc" id="L546">                &quot;\nDAO class: &quot; + o.getClass() +</span>
    +<span class="nc" id="L547">                &quot;\nDAO toString(): &quot; + o.toString() +</span>
    +<span class="nc" id="L548">                &quot;\nError when invoking the &quot; + method + &quot; method.&quot; +</span>
    +<span class="nc" id="L549">                &quot;\nException:&quot; + e.getClass().getName() +</span>
    +<span class="nc" id="L550">                &quot;\nError:&quot; + e.getMessage() + </span>
    +<span class="nc" id="L551">                &quot;\nReason:&quot; + e.getCause(), e);</span>
    +<span class="nc" id="L552">    }</span>
    +
    +    /** {@inheritDoc} */
    +    public List&lt;Metric&gt; getAllSupportedMetrics() {
    +<span class="nc" id="L556">        String qry = &quot;from Metric m where m.plugin=:plugin&quot;;</span>
    +<span class="nc" id="L557">        Map&lt;String,Object&gt; params = new HashMap&lt;String,Object&gt;();</span>
    +<span class="nc" id="L558">        params.put(&quot;plugin&quot;, Plugin.getPluginByHashcode(getUniqueKey()));</span>
    +        
    +<span class="nc" id="L560">        return (List&lt;Metric&gt;)db.doHQL(qry, params);</span>
    +    }
    +    
    +    /** {@inheritDoc} */
    +    public List&lt;Metric&gt; getSupportedMetrics(Class&lt;? extends DAObject&gt; activator) {
    +<span class="nc" id="L565">        List&lt;Metric&gt; m = new ArrayList&lt;Metric&gt;();</span>
    +
    +        //Query the database just once
    +<span class="nc" id="L568">        List&lt;Metric&gt; all = getAllSupportedMetrics();</span>
    +        
    +<span class="nc bnc" id="L570" title="All 4 branches missed.">        if (all == null || all.isEmpty())</span>
    +<span class="nc" id="L571">            return m;</span>
    +        
    +<span class="nc bnc" id="L573" title="All 2 branches missed.">        for (Metric metric : all) {</span>
    +<span class="nc bnc" id="L574" title="All 2 branches missed.">            if (getMetricActivationTypes(metric).contains(activator)) {</span>
    +<span class="nc" id="L575">                m.add(metric);</span>
    +            }
    +        }
    +        
    +<span class="nc" id="L579">        return m;</span>
    +    }
    +   
    +    /**
    +     * Register the metric to the DB. Subclasses can run their custom
    +     * initialization routines (i.e. registering DAOs or tables) after calling
    +     * super().install()
    +     */
    +    public boolean install() {
    +        //1. check if dependencies are satisfied
    +<span class="nc bnc" id="L589" title="All 2 branches missed.">        if (!checkDependencies()) {</span>
    +<span class="nc" id="L590">            log.error(&quot;Plug-in installation failed&quot;);</span>
    +<span class="nc" id="L591">            return false;</span>
    +        }
    +        
    +<span class="nc" id="L594">        HashMap&lt;String, Object&gt; h = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L595">        h.put(&quot;name&quot;, this.getName());</span>
    +
    +<span class="nc" id="L597">        List&lt;Plugin&gt; plugins = db.findObjectsByProperties(Plugin.class, h);</span>
    +
    +<span class="nc bnc" id="L599" title="All 2 branches missed.">        if (!plugins.isEmpty()) {</span>
    +<span class="nc" id="L600">            log.warn(&quot;A plugin with name &lt;&quot; + getName()</span>
    +<span class="nc" id="L601">                    + &quot;&gt; is already installed, won't re-install.&quot;);</span>
    +<span class="nc" id="L602">            return false;</span>
    +        }
    +
    +
    +        //2. Add the plug-in
    +<span class="nc" id="L607">        Plugin p = new Plugin();</span>
    +<span class="nc" id="L608">        p.setName(getName());</span>
    +<span class="nc" id="L609">        p.setInstalldate(new Date(System.currentTimeMillis()));</span>
    +<span class="nc" id="L610">        p.setVersion(getVersion());</span>
    +<span class="nc" id="L611">        p.setActive(true);</span>
    +<span class="nc" id="L612">        p.setHashcode(getUniqueKey());</span>
    +<span class="nc" id="L613">        boolean result =  db.addRecord(p);</span>
    +        
    +        //3. Add the metrics
    +<span class="nc bnc" id="L616" title="All 2 branches missed.">        for (String mnem :metrics.keySet()) {</span>
    +<span class="nc" id="L617">        	Metric m = metrics.get(mnem);</span>
    +<span class="nc" id="L618">        	Type type = Type.fromString(m.getMetricType().getType());</span>
    +<span class="nc" id="L619">        	MetricType newType = MetricType.getMetricType(type);</span>
    +<span class="nc bnc" id="L620" title="All 2 branches missed.">        	if (newType == null) {</span>
    +<span class="nc" id="L621">                newType = new MetricType(type);</span>
    +<span class="nc" id="L622">                db.addRecord(newType);</span>
    +<span class="nc" id="L623">                m.setMetricType(newType);</span>
    +            }
    +        	
    +<span class="nc" id="L626">        	m.setMetricType(newType);</span>
    +<span class="nc" id="L627">        	m.setPlugin(p);</span>
    +<span class="nc" id="L628">        	db.addRecord(m);</span>
    +        }
    +        
    +<span class="nc" id="L631">        return result;</span>
    +    }
    +
    +    /**
    +     * Remove a plug-in's record from the DB. The DB's referential integrity
    +     * mechanisms are expected to automatically remove associated records.
    +     * Subclasses should also clean up any custom tables created.
    +     */
    +    public boolean remove() {
    +<span class="nc" id="L640">        Plugin p = Plugin.getPluginByHashcode(getUniqueKey());</span>
    +<span class="nc" id="L641">        return db.deleteRecord(p);</span>
    +    }
    +    
    +    /**
    +     * Default (empty) implementation of the clean up method. What to 
    +     * do with the provided DAO is left to sub-classes to decide.
    +     * {@inheritDoc}
    +     */
    +    public boolean cleanup(DAObject sp) {
    +<span class="nc" id="L650">        log.warn(&quot;Empty cleanup method for plug-in &quot; </span>
    +<span class="nc" id="L651">                + this.getClass().getName());</span>
    +<span class="nc" id="L652">        return true; </span>
    +    }
    +
    +    /**{@inheritDoc}}*/
    +    public boolean update() {
    +<span class="nc" id="L657">        ServiceReference serviceRef = null;</span>
    +<span class="nc" id="L658">        serviceRef = bc.getServiceReference(AlitheiaCore.class.getName());</span>
    +
    +<span class="nc" id="L660">        MetricActivator ma =</span>
    +<span class="nc" id="L661">            ((AlitheiaCore)bc.getService(serviceRef)).getMetricActivator();</span>
    +
    +<span class="nc bnc" id="L663" title="All 2 branches missed.">        if (ma == null) {</span>
    +<span class="nc" id="L664">            return false;</span>
    +        }
    +
    +<span class="nc" id="L667">        ma.syncMetrics(this);</span>
    +
    +<span class="nc" id="L669">        return true;</span>
    +    }
    +
    +    /**{@inheritDoc}*/
    +    public final Set&lt;Class&lt;? extends DAObject&gt;&gt; getActivationTypes() {    
    +<span class="nc" id="L674">        return activators;</span>
    +    }
    +
    +    /**
    +     * Return an MD5 hex key uniquely identifying the plug-in
    +     */
    +    public final String getUniqueKey() {
    +<span class="nc" id="L681">    	MessageDigest m = null;</span>
    +		try {
    +<span class="nc" id="L683">			m = MessageDigest.getInstance(&quot;MD5&quot;);</span>
    +<span class="nc" id="L684">		} catch (NoSuchAlgorithmException e) {</span>
    +<span class="nc" id="L685">			log.error(&quot;Cannot find a valid implementation of the MD5 &quot; +</span>
    +					&quot;hash algorithm&quot;);
    +		}
    +<span class="nc" id="L688">    	String name = this.getClass().getCanonicalName();</span>
    +<span class="nc" id="L689">		byte[] data = name.getBytes(); </span>
    +<span class="nc" id="L690">		m.update(data,0,data.length);</span>
    +<span class="nc" id="L691">		BigInteger i = new BigInteger(1,m.digest());</span>
    +<span class="nc" id="L692">		return String.format(&quot;%1$032X&quot;, i);</span>
    +    }
    +
    +    /** {@inheritDoc} */
    +    public final Set&lt;PluginConfiguration&gt; getConfigurationSchema() {
    +        // Retrieve the plug-in's info object
    +<span class="nc" id="L698">        PluginInfo pi = pa.getPluginInfo(getUniqueKey());</span>
    +<span class="nc bnc" id="L699" title="All 2 branches missed.">        if (pi == null) {</span>
    +            // The plug-in's info object is always null during bundle startup,
    +            // but if it is not available when the bundle is active, something
    +            // is possibly wrong.
    +<span class="nc bnc" id="L703" title="All 2 branches missed.">            if (bc.getBundle().getState() == Bundle.ACTIVE) {</span>
    +<span class="nc" id="L704">                log.warn(&quot;Plugin &lt;&quot; + getName() + &quot;&gt; is loaded but not installed.&quot;);</span>
    +            }
    +<span class="nc" id="L706">            return Collections.emptySet();</span>
    +        }
    +<span class="nc" id="L708">        return pi.getConfiguration();</span>
    +    }
    +
    +    /**
    +     * Add an entry to this plug-in's configuration schema.
    +     *
    +     * @param name The name of the configuration property
    +     * @param defValue The default value for the configuration property
    +     * @param msg The description of the configuration property
    +     * @param type The type of the configuration property
    +     */
    +    protected final void addConfigEntry(String name, String defValue,
    +            String msg, PluginInfo.ConfigurationType type) {
    +        // Retrieve the plug-in's info object
    +<span class="nc" id="L722">        PluginInfo pi = pa.getPluginInfo(getUniqueKey());</span>
    +        // Will happen if called during bundle's startup
    +<span class="nc bnc" id="L724" title="All 2 branches missed.">        if (pi == null) {</span>
    +<span class="nc" id="L725">            log.warn(&quot;Adding configuration key &lt;&quot; + name +</span>
    +<span class="nc" id="L726">                &quot;&gt; to plugin &lt;&quot; + getName() + &quot;&gt; failed: &quot; +</span>
    +<span class="nc" id="L727">                &quot;no PluginInfo.&quot;);</span>
    +<span class="nc" id="L728">            return;</span>
    +        }
    +        // Modify the plug-in's configuration
    +        try {
    +            // Update property
    +<span class="nc bnc" id="L733" title="All 2 branches missed.">            if (pi.hasConfProp(name, type.toString())) {</span>
    +<span class="nc bnc" id="L734" title="All 2 branches missed.">                if (pi.updateConfigEntry(db, name, defValue)) {</span>
    +                    // Update the Plug-in Admin's information
    +<span class="nc" id="L736">                    pa.pluginUpdated(pa.getPlugin(pi));</span>
    +<span class="nc" id="L737">                }</span>
    +                else {
    +<span class="nc" id="L739">                    log.error(&quot;Property (&quot; + name +&quot;) update has failed!&quot;);</span>
    +                }
    +<span class="nc" id="L741">            }</span>
    +            // Create property
    +            else {
    +<span class="nc" id="L744">                if (pi.addConfigEntry(</span>
    +<span class="nc bnc" id="L745" title="All 2 branches missed.">                        db, name, msg, type.toString(), defValue)) {</span>
    +                    // Update the Plug-in Admin's information
    +<span class="nc" id="L747">                    pa.pluginUpdated(pa.getPlugin(pi));</span>
    +<span class="nc" id="L748">                }</span>
    +                else {
    +<span class="nc" id="L750">                    log.error(&quot;Property (&quot; + name +&quot;) append has failed!&quot;);</span>
    +                }
    +            }
    +<span class="nc" id="L753">        }</span>
    +<span class="nc" id="L754">        catch (Exception ex){</span>
    +<span class="nc" id="L755">            log.error(&quot;Can not modify property (&quot; + name +&quot;) for plugin (&quot;</span>
    +<span class="nc" id="L756">                    + getName(), ex);</span>
    +        }
    +<span class="nc" id="L758">    }</span>
    +
    +    /**
    +     * Remove an entry from the plug-in's configuration schema
    +     *
    +     * @param name The name of the configuration property to remove
    +     * @param name The type of the configuration property to remove
    +     */
    +    protected final void removeConfigEntry(
    +            String name,
    +            PluginInfo.ConfigurationType type) {
    +        // Retrieve the plug-in's info object
    +<span class="nc" id="L770">        PluginInfo pi = pa.getPluginInfo(getUniqueKey());</span>
    +        // Will happen if called during bundle's startup
    +<span class="nc bnc" id="L772" title="All 2 branches missed.">        if (pi == null) {</span>
    +<span class="nc" id="L773">            log.warn(&quot;Removing configuration key &lt;&quot; + name +</span>
    +<span class="nc" id="L774">                &quot;&gt; from plugin &lt;&quot; + getName() + &quot;&gt; failed: &quot; +</span>
    +<span class="nc" id="L775">                &quot;no PluginInfo.&quot;);</span>
    +<span class="nc" id="L776">            return;</span>
    +        }
    +        // Modify the plug-in's configuration
    +        try {
    +<span class="nc bnc" id="L780" title="All 2 branches missed.">            if (pi.hasConfProp(name, type.toString())) {</span>
    +<span class="nc bnc" id="L781" title="All 2 branches missed.">                if (pi.removeConfigEntry(db, name, type.toString())) {</span>
    +                    // Update the Plug-in Admin's information
    +<span class="nc" id="L783">                    pa.pluginUpdated(pa.getPlugin(pi));</span>
    +<span class="nc" id="L784">                }</span>
    +                else {
    +<span class="nc" id="L786">                    log.error(&quot;Property (&quot; + name +&quot;) remove has failed!&quot;);</span>
    +                }
    +<span class="nc" id="L788">            }</span>
    +            else {
    +<span class="nc" id="L790">                log.error(&quot;Property (&quot; + name +&quot;) does not exist!&quot;);</span>
    +            }
    +<span class="nc" id="L792">        }</span>
    +<span class="nc" id="L793">        catch (Exception ex){</span>
    +<span class="nc" id="L794">            log.error(&quot;Can not remove property (&quot; + name +&quot;) from plugin (&quot;</span>
    +<span class="nc" id="L795">                    + getName() + &quot;)&quot;, ex);</span>
    +        }
    +<span class="nc" id="L797">    }</span>
    +    
    +    /**
    +     * Get a configuration option for this metric from the plugin configuration
    +     * store
    +     * 
    +     * @param config The configuration option to retrieve
    +     * @return The configuration entry corresponding the provided description or
    +     * null if not found in the plug-in's configuration schema
    +     */
    +    public PluginConfiguration getConfigurationOption(String config) {
    +<span class="nc" id="L808">        Set&lt;PluginConfiguration&gt; conf = </span>
    +<span class="nc" id="L809">            pa.getPluginInfo(getUniqueKey()).getConfiguration();</span>
    +        
    +<span class="nc" id="L811">        Iterator&lt;PluginConfiguration&gt; i = conf.iterator();</span>
    +        
    +<span class="nc bnc" id="L813" title="All 2 branches missed.">        while (i.hasNext()) {</span>
    +<span class="nc" id="L814">            PluginConfiguration pc = i.next();</span>
    +<span class="nc bnc" id="L815" title="All 2 branches missed.">            if (pc.getName().equals(config)) {</span>
    +<span class="nc" id="L816">                return pc;</span>
    +            }
    +        }
    +        
    +        /* Config option not found */
    +<span class="nc" id="L821">        return null;</span>
    +    }
    +    
    +<span class="nc" id="L824">    private static Map&lt;Class&lt;? extends MetricMeasurement&gt;, String&gt; resultFieldNames = </span>
    +<span class="nc" id="L825">        new HashMap&lt;Class&lt;? extends MetricMeasurement&gt;, String&gt;();</span>
    +    
    +    static {
    +<span class="nc" id="L828">        resultFieldNames.put(StoredProjectMeasurement.class, &quot;storedProject&quot;);</span>
    +<span class="nc" id="L829">        resultFieldNames.put(ProjectVersionMeasurement.class, &quot;projectVersion&quot;);</span>
    +<span class="nc" id="L830">        resultFieldNames.put(ProjectFileMeasurement.class, &quot;projectFile&quot;);</span>
    +<span class="nc" id="L831">        resultFieldNames.put(MailMessageMeasurement.class, &quot;mail&quot;);</span>
    +<span class="nc" id="L832">        resultFieldNames.put(MailingListThreadMeasurement.class, &quot;thread&quot;);</span>
    +<span class="nc" id="L833">        resultFieldNames.put(ExecutionUnitMeasurement.class, &quot;executionUnit&quot;);</span>
    +<span class="nc" id="L834">        resultFieldNames.put(EncapsulationUnitMeasurement.class, &quot;encapsulationUnit&quot;);</span>
    +<span class="nc" id="L835">        resultFieldNames.put(NameSpaceMeasurement.class, &quot;namespace&quot;);</span>
    +<span class="nc" id="L836">    }</span>
    +
    +    /**
    +     * Convenience method to get the measurement for a single metric.
    +     */
    +    protected List&lt;Result&gt; getResult(DAObject o, Class&lt;? extends MetricMeasurement&gt; clazz, 
    +            Metric m, Result.ResultType type) {
    +<span class="nc" id="L843">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L844">        Map&lt;String, Object&gt; props = new HashMap&lt;String, Object&gt;();</span>
    +        
    +<span class="nc" id="L846">        props.put(resultFieldNames.get(clazz), o);</span>
    +<span class="nc" id="L847">        props.put(&quot;metric&quot;, m);</span>
    +<span class="nc" id="L848">        List resultat = dbs.findObjectsByProperties(clazz, props);</span>
    +        
    +<span class="nc bnc" id="L850" title="All 2 branches missed.">        if (resultat.isEmpty())</span>
    +<span class="nc" id="L851">            return Collections.EMPTY_LIST;</span>
    +        
    +<span class="nc" id="L853">        ArrayList&lt;Result&gt; result = new ArrayList&lt;Result&gt;();</span>
    +<span class="nc" id="L854">        result.add(new Result(o, m, ((MetricMeasurement)resultat.get(0)).getResult(), type));</span>
    +<span class="nc" id="L855">        return result;</span>
    +        
    +    }
    +
    +    /**{@inheritDoc}*/
    +    @Override
    +    public final List&lt;Class&lt;? extends DAObject&gt;&gt; getMetricActivationTypes (Metric m) {
    +<span class="nc" id="L862">        return metricActType.get(m);</span>
    +    }
    +    
    +    /**
    +     * Check if the plug-in dependencies are satisfied
    +     */
    +    private boolean checkDependencies() {
    +<span class="nc bnc" id="L869" title="All 2 branches missed.">        for (String mnemonic : dependencies) {</span>
    +        	//Check thyself first
    +<span class="nc bnc" id="L871" title="All 2 branches missed.">        	if (metrics.containsKey(mnemonic))</span>
    +<span class="nc" id="L872">        		continue;</span>
    +        	
    +<span class="nc bnc" id="L874" title="All 2 branches missed.">            if (pa.getImplementingPlugin(mnemonic) == null) {</span>
    +<span class="nc" id="L875">                log.error(&quot;No plug-in implements metric &quot;  + mnemonic + </span>
    +<span class="nc" id="L876">                        &quot; which is required by &quot; + getName());</span>
    +<span class="nc" id="L877">                return false;</span>
    +            }
    +        }
    +<span class="nc" id="L880">        return true;</span>
    +    }
    +    
    +    /** {@inheritDoc} */
    +    public Set&lt;String&gt; getDependencies() {
    +<span class="nc" id="L885">        return dependencies;</span>
    +    }
    +
    +    @Override
    +    public Map&lt;MetricType.Type, SortedSet&lt;Long&gt;&gt; getObjectIdsToSync(StoredProject sp, Metric m) 
    +    throws MetricActivationException {
    +
    +<span class="nc" id="L892">    	Map&lt;MetricType.Type, SortedSet&lt;Long&gt;&gt; IDs = new HashMap&lt;Type, SortedSet&lt;Long&gt;&gt;();</span>
    +    	
    +<span class="nc" id="L894">        Map&lt;String, Object&gt; params = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L895">        params.put(&quot;project&quot;, sp);</span>
    +<span class="nc" id="L896">        params.put(&quot;metric&quot;, m.getId());</span>
    +
    +<span class="nc" id="L898">    	String q = null;</span>
    +    	
    +<span class="nc bnc" id="L900" title="All 2 branches missed.">    	for (Class&lt;? extends DAObject&gt; at : getMetricActivationTypes(m)) {</span>
    +    	
    +<span class="nc bnc" id="L902" title="All 2 branches missed.">	    	if (MetricType.fromActivator(at) == Type.PROJECT_VERSION) {</span>
    +<span class="nc" id="L903">	    		q = QRY_SYNC_PV;</span>
    +<span class="nc bnc" id="L904" title="All 2 branches missed.">	    	} else if (MetricType.fromActivator(at) == Type.SOURCE_FILE) {</span>
    +<span class="nc" id="L905">	    		q = QRY_SYNC_PF;</span>
    +<span class="nc bnc" id="L906" title="All 2 branches missed.">	    	} else if (MetricType.fromActivator(at) == Type.SOURCE_DIRECTORY) {</span>
    +<span class="nc" id="L907">	    		q = QRY_SYNC_PD;</span>
    +<span class="nc bnc" id="L908" title="All 2 branches missed.">	     	} else if (MetricType.fromActivator(at) == Type.MAILING_LIST) {</span>
    +<span class="nc" id="L909">	    		throw new MetricActivationException(&quot;Metric synchronisation with MAILING_LIST objects not implemented&quot;);</span>
    +<span class="nc bnc" id="L910" title="All 2 branches missed.">	    	} else if (MetricType.fromActivator(at) == Type.MAILMESSAGE) {</span>
    +<span class="nc" id="L911">	    		q = QRY_SYNC_MM;</span>
    +<span class="nc bnc" id="L912" title="All 2 branches missed.">	    	} else if (MetricType.fromActivator(at) == Type.MAILTHREAD) {</span>
    +<span class="nc" id="L913">	    		q = QRY_SYNC_MT;</span>
    +<span class="nc bnc" id="L914" title="All 2 branches missed.">	    	} else if (MetricType.fromActivator(at) == Type.BUG) {</span>
    +<span class="nc" id="L915">	    		throw new MetricActivationException(&quot;Metric synchronisation with BUG objects not implemented&quot;);</span>
    +<span class="nc bnc" id="L916" title="All 2 branches missed.">	    	} else if (MetricType.fromActivator(at) == Type.DEVELOPER) {</span>
    +<span class="nc" id="L917">	    		q = QRY_SYNC_DEV;</span>
    +<span class="nc bnc" id="L918" title="All 2 branches missed.">	    	} else if (MetricType.fromActivator(at) == Type.NAMESPACE) {</span>
    +<span class="nc" id="L919">                q = QRY_SYNC_NS;</span>
    +<span class="nc bnc" id="L920" title="All 2 branches missed.">            } else if (MetricType.fromActivator(at) == Type.ENCAPSUNIT) {</span>
    +<span class="nc" id="L921">                q = QRY_SYNC_ENCUNT;</span>
    +<span class="nc bnc" id="L922" title="All 2 branches missed.">            } else if (MetricType.fromActivator(at) == Type.EXECUNIT) {</span>
    +<span class="nc" id="L923">                q = QRY_SYNC_EXECUNT;</span>
    +<span class="nc" id="L924">            } else {</span>
    +<span class="nc" id="L925">	    		throw new MetricActivationException(&quot;Metric synchronisation with GENERIC objects not implemented&quot;);</span>
    +	    	}
    +	    	
    +<span class="nc" id="L928">	    	List&lt;Long&gt; objectIds = (List&lt;Long&gt;) db.doHQL(q, params);</span>
    +<span class="nc" id="L929">	    	TreeSet&lt;Long&gt; ids = new TreeSet&lt;Long&gt;();</span>
    +<span class="nc" id="L930">	    	ids.addAll(objectIds);</span>
    +<span class="nc" id="L931">	    	IDs.put(MetricType.fromActivator(at), ids);</span>
    +    	}
    +<span class="nc" id="L933">    	return IDs;</span>
    +    }
    +    
    +    /** {@inheritDoc} */
    +    @Override
    +    public void setJob(Job j) {
    +<span class="nc" id="L939">        this.job.set(j);</span>
    +<span class="nc" id="L940">    }</span>
    + }
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AlreadyProcessingException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AlreadyProcessingException.html
    new file mode 100644
    index 000000000..1ac7a7797
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AlreadyProcessingException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AlreadyProcessingException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">AlreadyProcessingException</span></div><h1>AlreadyProcessingException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3 of 3</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AlreadyProcessingException.java.html#L51" class="el_method">AlreadyProcessingException()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AlreadyProcessingException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AlreadyProcessingException.java.html
    new file mode 100644
    index 000000000..08d27cc9b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/AlreadyProcessingException.java.html
    @@ -0,0 +1,54 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AlreadyProcessingException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">AlreadyProcessingException.java</span></div><h1>AlreadyProcessingException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.abstractmetric;
    +
    +/**
    + * Thrown when a DAO is locked for processing by another metric plugin.
    + * Metrics cannot lock a DAO object; this happens automatically on
    + * entering the metric result calculation code in AbstractMetric to ensure
    + * that no two instances of the metric operate on the same DAO (this happens
    + * often when a metric starts the calculation of another metric as a result
    + * of a metric dependency association). To ensure that a metric transaction
    + * actually sees the results of the calculation of the other metric working
    + * on the same DAO, this exception is thrown.
    + */
    +public class AlreadyProcessingException extends Exception {
    +    
    +    private static final long serialVersionUID = 1L;
    +
    +    AlreadyProcessingException() {
    +<span class="nc" id="L51">        super();</span>
    +<span class="nc" id="L52">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/InvocationOrder.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/InvocationOrder.html
    new file mode 100644
    index 000000000..3ae23a50d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/InvocationOrder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvocationOrder</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">InvocationOrder</span></div><h1>InvocationOrder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="InvocationOrder.java.html#L37" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="InvocationOrder.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="56" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="InvocationOrder.java.html#L37" class="el_method">InvocationOrder(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="InvocationOrder.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/InvocationOrder.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/InvocationOrder.java.html
    new file mode 100644
    index 000000000..2fcb5fe47
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/InvocationOrder.java.html
    @@ -0,0 +1,47 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvocationOrder.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">InvocationOrder.java</span></div><h1>InvocationOrder.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * Copyright 2012 - Organization for Free and Open Source Software,
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.abstractmetric;
    +
    +/**
    + * Hints to the metric activator on the ordering of the resource
    + * version to be used.
    + */
    +<span class="nc" id="L37">public enum InvocationOrder {</span>
    +<span class="nc" id="L38">    /**Old entries first*/</span>
    +<span class="nc" id="L39">    OLDFIRST,</span>
    +
    +<span class="nc" id="L41">    /**New entries first*/</span>
    +<span class="nc" id="L42">    NEWFIRST,</span>
    +
    +<span class="nc" id="L44">    /**Randomized ordering*/</span>
    +<span class="nc" id="L45">    RANDOM</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricActivationException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricActivationException.html
    new file mode 100644
    index 000000000..101522d45
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricActivationException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivationException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">MetricActivationException</span></div><h1>MetricActivationException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="MetricActivationException.java.html#L6" class="el_method">MetricActivationException(String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricActivationException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricActivationException.java.html
    new file mode 100644
    index 000000000..50dc21786
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricActivationException.java.html
    @@ -0,0 +1,9 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricActivationException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">MetricActivationException.java</span></div><h1>MetricActivationException.java</h1><pre class="source lang-java linenums">package eu.sqooss.service.abstractmetric;
    +
    +public class MetricActivationException extends Exception {
    +
    +	public MetricActivationException(String e) {
    +<span class="nc" id="L6">		super(e);</span>
    +<span class="nc" id="L7">	}</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricMismatchException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricMismatchException.html
    new file mode 100644
    index 000000000..436c2048a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricMismatchException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricMismatchException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">MetricMismatchException</span></div><h1>MetricMismatchException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="MetricMismatchException.java.html#L50" class="el_method">MetricMismatchException(DAObject)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="MetricMismatchException.java.html#L54" class="el_method">MetricMismatchException(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricMismatchException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricMismatchException.java.html
    new file mode 100644
    index 000000000..60361b4c5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/MetricMismatchException.java.html
    @@ -0,0 +1,60 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MetricMismatchException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">MetricMismatchException.java</span></div><h1>MetricMismatchException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.abstractmetric;
    +
    +import eu.sqooss.service.db.DAObject;
    +
    +/**
    + * Since the metrics have generic methods that take a DAO,
    + * we could pass a DAO (of some specific subtype) to a metric
    + * that doesn't support that subtype; this exception flags
    + * those situations. Example: passing a ProjectVerson DAO
    + * to a metric that implements only the ProjectFile metric
    + * subinterface.
    + */
    +public class MetricMismatchException extends Exception {
    +    private static final long serialVersionUID = 1L;
    +
    +    public MetricMismatchException(DAObject o) {
    +<span class="nc" id="L50">        super(&quot;DAO type &quot; + o.getClass().getName() + &quot; is unsupported.&quot;);</span>
    +<span class="nc" id="L51">    }</span>
    +    
    +    public MetricMismatchException(String s) {
    +<span class="nc" id="L54">        super(s);</span>
    +<span class="nc" id="L55">    }</span>
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginAnnotationProcessor.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginAnnotationProcessor.html
    new file mode 100644
    index 000000000..4707f76e7
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginAnnotationProcessor.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PluginAnnotationProcessor</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">PluginAnnotationProcessor</span></div><h1>PluginAnnotationProcessor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="PluginAnnotationProcessor.java.html#L47" class="el_method">PluginAnnotationProcessor()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="PluginAnnotationProcessor.java.html#L52" class="el_method">init(ProcessingEnvironment)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="PluginAnnotationProcessor.java.html#L57" class="el_method">process(Set, RoundEnvironment)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginAnnotationProcessor.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginAnnotationProcessor.java.html
    new file mode 100644
    index 000000000..1eabff729
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginAnnotationProcessor.java.html
    @@ -0,0 +1,60 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PluginAnnotationProcessor.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">PluginAnnotationProcessor.java</span></div><h1>PluginAnnotationProcessor.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +package eu.sqooss.service.abstractmetric;
    +
    +import java.util.HashSet;
    +import java.util.Set;
    +
    +import javax.tools.Diagnostic.Kind;
    +import javax.annotation.processing.AbstractProcessor;
    +import javax.annotation.processing.ProcessingEnvironment;
    +import javax.annotation.processing.RoundEnvironment;
    +import javax.annotation.processing.SupportedAnnotationTypes;
    +import javax.lang.model.element.TypeElement;
    +
    +//@SupportedSourceVersion(SourceVersion.RELEASE_6)
    +@SupportedAnnotationTypes(&quot;eu.sqooss.service.abstractmetric.*&quot;)
    +<span class="nc" id="L47">public class PluginAnnotationProcessor extends AbstractProcessor {</span>
    +<span class="nc" id="L48">	Set&lt;String&gt; declActivators = new HashSet&lt;String&gt;();</span>
    +
    +	@Override
    +    public void init(ProcessingEnvironment pe) {
    +<span class="nc" id="L52">        super.init(pe);</span>
    +<span class="nc" id="L53">    }</span>
    +	
    +	@Override
    +	public boolean process(Set&lt;? extends TypeElement&gt; annotations, RoundEnvironment roundEnvironment) {
    +<span class="nc" id="L57">		return true;</span>
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo$ConfigurationType.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo$ConfigurationType.html
    new file mode 100644
    index 000000000..4a1f5c05c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo$ConfigurationType.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PluginInfo.ConfigurationType</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">PluginInfo.ConfigurationType</span></div><h1>PluginInfo.ConfigurationType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">100 of 100</td><td class="ctr2">0%</td><td class="bar">8 of 8</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">15</td><td class="ctr2">15</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a2"><a href="PluginInfo.java.html#L69" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="44" alt="44"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="PluginInfo.java.html#L76" class="el_method">fromString(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="81" height="10" title="30" alt="30"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="PluginInfo.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="43" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="PluginInfo.java.html#L69" class="el_method">PluginInfo.ConfigurationType(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="PluginInfo.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo.html
    new file mode 100644
    index 000000000..18f3fdf5a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PluginInfo</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">PluginInfo</span></div><h1>PluginInfo</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">517 of 517</td><td class="ctr2">0%</td><td class="bar">82 of 82</td><td class="ctr2">0%</td><td class="ctr1">65</td><td class="ctr2">65</td><td class="ctr1">143</td><td class="ctr2">143</td><td class="ctr1">24</td><td class="ctr2">24</td></tr></tfoot><tbody><tr><td id="a1"><a href="PluginInfo.java.html#L335" class="el_method">addConfigEntry(DBService, String, String, String, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="104" alt="104"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">11</td><td class="ctr2" id="g0">11</td><td class="ctr1" id="h0">28</td><td class="ctr2" id="i0">28</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a23"><a href="PluginInfo.java.html#L264" class="el_method">updateConfigEntry(DBService, String, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="106" height="10" title="92" alt="92"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="108" height="10" title="18" alt="18"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">10</td><td class="ctr2" id="g1">10</td><td class="ctr1" id="h1">24</td><td class="ctr2" id="i1">24</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a22"><a href="PluginInfo.java.html#L572" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="70" alt="70"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="84" height="10" title="14" alt="14"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">8</td><td class="ctr2" id="g2">8</td><td class="ctr1" id="h2">24</td><td class="ctr2" id="i2">24</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a14"><a href="PluginInfo.java.html#L96" class="el_method">PluginInfo(Set, AlitheiaPlugin)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="48" height="10" title="42" alt="42"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h3">15</td><td class="ctr2" id="i3">15</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a15"><a href="PluginInfo.java.html#L405" class="el_method">removeConfigEntry(DBService, String, String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="47" height="10" title="41" alt="41"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="72" height="10" title="12" alt="12"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f3">7</td><td class="ctr2" id="g3">7</td><td class="ctr1" id="h4">12</td><td class="ctr2" id="i4">12</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="PluginInfo.java.html#L219" class="el_method">getConfPropId(String, String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="39" height="10" title="34" alt="34"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="60" height="10" title="10" alt="10"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f4">6</td><td class="ctr2" id="g4">6</td><td class="ctr1" id="h7">7</td><td class="ctr2" id="i7">7</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a13"><a href="PluginInfo.java.html#L96" class="el_method">PluginInfo(Set)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="32" height="10" title="28" alt="28"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h5">11</td><td class="ctr2" id="i5">11</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a12"><a href="PluginInfo.java.html#L96" class="el_method">PluginInfo()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="28" height="10" title="25" alt="25"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h6">10</td><td class="ctr2" id="i6">10</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a11"><a href="PluginInfo.java.html#L514" class="el_method">isActivationType(Class)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="20" height="10" title="18" alt="18"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h8">6</td><td class="ctr2" id="i8">6</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a10"><a href="PluginInfo.java.html#L243" class="el_method">hasConfProp(String, String)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="10" height="10" title="9" alt="9"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="12" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="PluginInfo.java.html#L501" class="el_method">addActivationType(Class)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a2"><a href="PluginInfo.java.html#L604" class="el_method">compareTo(PluginInfo)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a18"><a href="PluginInfo.java.html#L196" class="el_method">setPluginConfiguration(Set)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h10">2</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a19"><a href="PluginInfo.java.html#L437" class="el_method">setPluginName(String)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h11">2</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a20"><a href="PluginInfo.java.html#L458" class="el_method">setPluginVersion(String)</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h12">2</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a16"><a href="PluginInfo.java.html#L481" class="el_method">setActivationTypes(Set)</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h13">2</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a21"><a href="PluginInfo.java.html#L530" class="el_method">setServiceRef(ServiceReference)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h14">2</td><td class="ctr2" id="i14">2</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a17"><a href="PluginInfo.java.html#L553" class="el_method">setHashcode(String)</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h15">2</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a4"><a href="PluginInfo.java.html#L205" class="el_method">getConfiguration()</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a7"><a href="PluginInfo.java.html#L447" class="el_method">getPluginName()</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a8"><a href="PluginInfo.java.html#L468" class="el_method">getPluginVersion()</a></td><td class="bar" id="b20"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a3"><a href="PluginInfo.java.html#L491" class="el_method">getActivationTypes()</a></td><td class="bar" id="b21"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a9"><a href="PluginInfo.java.html#L540" class="el_method">getServiceRef()</a></td><td class="bar" id="b22"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">1</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a6"><a href="PluginInfo.java.html#L562" class="el_method">getHashcode()</a></td><td class="bar" id="b23"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">1</td><td class="ctr2" id="i23">1</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo.java.html
    new file mode 100644
    index 000000000..3a3cb0f56
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/PluginInfo.java.html
    @@ -0,0 +1,609 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PluginInfo.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">PluginInfo.java</span></div><h1>PluginInfo.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.abstractmetric;
    +
    +import java.util.HashSet;
    +import java.util.Iterator;
    +import java.util.Set;
    +
    +import org.osgi.framework.Constants;
    +import org.osgi.framework.ServiceReference;
    +
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Plugin;
    +import eu.sqooss.service.db.PluginConfiguration;
    +import eu.sqooss.service.util.StringUtils;
    +
    +/**
    + * This class holds runtime and configuration information about single metric
    + * plug-in.
    + * &lt;br/&gt;
    + * Usually an instance of a &lt;code&gt;PluginInfo&lt;/code&gt; is created from the
    + * &lt;code&gt;PluginAdmin&lt;/code&gt; implementation, just after a new metric plug-in
    + * bundle is installed in the OSGi framework, who registers a metric
    + * plug-in service. Some of the information provided from the metric
    + * plug-in object registered with that OSGi service, as well as part of
    + * the service's information are copied into this new &lt;code&gt;PluginInfo&lt;/code&gt;
    + * instance.
    + */
    +public class PluginInfo implements Comparable&lt;PluginInfo&gt; {
    +
    +    /**
    +     * This enumeration includes all permitted types of configuration values,
    +     * that a metrics can support. The various configuration parameters and
    +     * their values are used mostly from internal metric processes, like
    +     * results rendering and validation.
    +     */
    +<span class="nc" id="L69">    public enum ConfigurationType {</span>
    +<span class="nc" id="L70">        INTEGER,</span>
    +<span class="nc" id="L71">        STRING,</span>
    +<span class="nc" id="L72">        BOOLEAN,</span>
    +<span class="nc" id="L73">        DOUBLE;</span>
    +
    +        public static ConfigurationType fromString(String config) {
    +<span class="nc bnc" id="L76" title="All 2 branches missed.">            if (config.equals(BOOLEAN.toString()))</span>
    +<span class="nc" id="L77">                return BOOLEAN;</span>
    +
    +<span class="nc bnc" id="L79" title="All 2 branches missed.">            if (config.equals(STRING.toString()))</span>
    +<span class="nc" id="L80">                return STRING;</span>
    +
    +<span class="nc bnc" id="L82" title="All 2 branches missed.">            if (config.equals(INTEGER.toString()))</span>
    +<span class="nc" id="L83">                return INTEGER;</span>
    +           
    +<span class="nc bnc" id="L85" title="All 2 branches missed.">            if (config.equals(DOUBLE.toString()))</span>
    +<span class="nc" id="L86">            	return DOUBLE;</span>
    +
    +<span class="nc" id="L88">            return null;</span>
    +        }
    +    };
    +
    +    /**
    +     * The service reference of the service that registered this metric
    +     * plug-in
    +     */
    +<span class="nc" id="L96">    private ServiceReference serviceRef = null;</span>
    +
    +    /**
    +     * The name of the associated  metric plug-in
    +     */
    +<span class="nc" id="L101">    private String pluginName = null;</span>
    +
    +    /**
    +     * The version of the associated metric plug-in
    +     */
    +<span class="nc" id="L106">    private String pluginVersion = null;</span>
    +
    +    /**
    +     * This list include all activation interfaces supported by the associated
    +     * metric plug-in.
    +     * &lt;br/&gt;
    +     * The list of permitted activation interfaces is described in the
    +     * {@link AlitheiaPlugin} interface and currently includes:
    +     * &lt;ul&gt;
    +     *   &lt;li&gt;{@link StoredProjectMetric}&lt;/li&gt;
    +     *   &lt;li&gt;{@link ProjectVersionMetric}&lt;/li&gt;
    +     *   &lt;li&gt;{@link ProjectFileMetric}&lt;/li&gt;
    +     *   &lt;li&gt;{@link FileGroupMetric}&lt;/li&gt;
    +     * &lt;/ul&gt;
    +     */
    +<span class="nc" id="L121">    Set&lt;Class&lt;? extends DAObject&gt;&gt; activationTypes =</span>
    +<span class="nc" id="L122">        new HashSet&lt;Class&lt;? extends DAObject&gt;&gt;();</span>
    +
    +    /**
    +     * The hash code's value of the associated metric metric plug-in.
    +     * &lt;br/&gt;
    +     * After a new metric plug-in is registered as service in the OSGi
    +     * framework, the &lt;code&gt;PluginAdmin&lt;/code&gt; initializes this field with
    +     * the service's ID value, by calling the &lt;code&gt;setHashcode(String)&lt;/code&gt;
    +     * method.
    +     * &lt;br/&gt;
    +     * Once the metric plug-in's &lt;code&gt;install()&lt;/code&gt; method is called,
    +     * the &lt;code&gt;PluginAdmin&lt;/code&gt; replaces the old &lt;code&gt;PluginInfo&lt;/code&gt;
    +     * with a new one, whose &lt;code&gt;hashcode&lt;/code&gt; field is initialized with
    +     * the hash code's value, that this metric plug-in stored in its database
    +     * record.
    +     */
    +    private String hashcode;
    +
    +    /**
    +     * A list containing the current set of configuration parameters of the
    +     * associated metric plug-in
    +     */
    +<span class="nc" id="L144">    private Set&lt;PluginConfiguration&gt; config =</span>
    +<span class="nc" id="L145">        new HashSet&lt;PluginConfiguration&gt;();</span>
    +
    +    /**
    +     * This flag is set to &lt;code&gt;false&lt;code&gt; on a newly registered metric
    +     * plug-ins, and changed to &lt;code&gt;true&lt;/code&gt; after the metric plug-in's
    +     * &lt;code&gt;install()&lt;/code&gt; method is called (and successfully performed).
    +     */
    +<span class="nc" id="L152">    public boolean installed = false;</span>
    +
    +    /**
    +     * Empty constructor.
    +     */
    +<span class="nc" id="L157">    public PluginInfo() {</span>
    +
    +<span class="nc" id="L159">    }</span>
    +
    +    /**
    +     * Simple constructor, that creates a new &lt;code&gt;PluginInfo&lt;/code&gt; instance
    +     * and initializes it with the given metric plug-in's configuration
    +     * parameters.
    +     *
    +     * @param c - the list of configuration parameters
    +     */
    +<span class="nc" id="L168">    public PluginInfo(Set&lt;PluginConfiguration&gt; c) {</span>
    +<span class="nc" id="L169">        setPluginConfiguration(c);</span>
    +<span class="nc" id="L170">    }</span>
    +
    +    /**
    +     * Creates a new &lt;code&gt;PluginInfo&lt;/code&gt; instance, and initializes it with
    +     * the given metric plug-in's configuration parameters and the description
    +     * fields found in the given plug-in instance.
    +     *
    +     * @param c - the list of configuration parameters
    +     * @param p the &lt;code&gt;AlitheiaPlugin&lt;/code&gt; instance
    +     */
    +<span class="nc" id="L180">    public PluginInfo(Set&lt;PluginConfiguration&gt; c, AlitheiaPlugin p) {</span>
    +<span class="nc" id="L181">        setPluginConfiguration(c);</span>
    +<span class="nc bnc" id="L182" title="All 2 branches missed.">        if (p != null) {</span>
    +<span class="nc" id="L183">            setPluginName(p.getName());</span>
    +<span class="nc" id="L184">            setPluginVersion(p.getVersion());</span>
    +<span class="nc" id="L185">            setActivationTypes(p.getActivationTypes());</span>
    +        }
    +<span class="nc" id="L187">    }</span>
    +
    +
    +    /**
    +     * Initializes the configuration set that is available for this plug-in.
    +     * 
    +     * @param c the plug-in configuration set
    +     */
    +    public void setPluginConfiguration (Set&lt;PluginConfiguration&gt; c) {
    +<span class="nc" id="L196">        this.config = c;</span>
    +<span class="nc" id="L197">    }</span>
    +
    +    /**
    +     * Returns the list of existing metric configuration parameters.
    +     *
    +     * @return The list of configuration parameters.
    +     */
    +    public Set&lt;PluginConfiguration&gt; getConfiguration() {
    +<span class="nc" id="L205">        return this.config;</span>
    +    }
    +
    +    /**
    +     * Returns the Id of the given configuration property.
    +     *
    +     * @param name the property's name
    +     * @param type the property's type
    +     *
    +     * @return The property's Id, or &lt;code&gt;null&lt;/code&gt; if the property does
    +     *   not exist.
    +     */
    +    public Long getConfPropId (String name, String type) {
    +        // Check if all values are valid
    +<span class="nc bnc" id="L219" title="All 4 branches missed.">        if ((name == null) || (type == null)) {</span>
    +<span class="nc" id="L220">            return null;</span>
    +        }
    +        // Search for a matching property
    +<span class="nc bnc" id="L223" title="All 2 branches missed.">        for (PluginConfiguration property : config) {</span>
    +<span class="nc bnc" id="L224" title="All 2 branches missed.">            if ((property.getName().equals(name))</span>
    +<span class="nc bnc" id="L225" title="All 2 branches missed.">                    &amp;&amp; (property.getType().equals(type))) {</span>
    +<span class="nc" id="L226">                return property.getId();</span>
    +            }
    +        }
    +<span class="nc" id="L229">        return null;</span>
    +    }
    +
    +    /**
    +     * Verifies, if the specified configuration property exist in this
    +     * plug-in's information object.
    +     *
    +     * @param name the property's name
    +     * @param type the property's type
    +     *
    +     * @return &lt;code&gt;true&lt;/code&gt;, if such property is found,
    +     *   or &lt;code&gt;false&lt;/code&gt; otherwise.
    +     */
    +    public boolean hasConfProp (String name, String type) {
    +<span class="nc bnc" id="L243" title="All 2 branches missed.">        return ((getConfPropId(name, type) == null) ? false : true);</span>
    +    }
    +
    +    /**
    +     * Sets a new value of existing metric plugin's configuration property
    +     * by creating a new database record.
    +     *
    +     * @param db the DB components object
    +     * @param name the configuration property's name
    +     * @param newVal the new value, that should be assigned to the
    +     *   selected configuration property
    +     *
    +     * @return &lt;code&gt;true&lt;/code&gt; upon successful update, of &lt;code&gt;false&lt;/code&gt;
    +     *   when a corresponding database record does not exist.
    +     *
    +     * @throws &lt;code&gt;Exception&lt;/code&gt; upon incorrect value's syntax, or
    +     *   invalid property's type.
    +     */
    +    public boolean updateConfigEntry(DBService db, String name, String newVal)
    +        throws Exception {
    +        // Check for an invalid name
    +<span class="nc bnc" id="L264" title="All 2 branches missed.">        if (name == null) {</span>
    +<span class="nc" id="L265">            throw new Exception(&quot;Invalid name!&quot;);</span>
    +        }
    +        // Check if such configuration property exists
    +<span class="nc bnc" id="L268" title="All 2 branches missed.">        for (PluginConfiguration pc : config) {</span>
    +<span class="nc bnc" id="L269" title="All 2 branches missed.">            if (pc.getName().equals(name)) {</span>
    +                // Retrieve the configuration property's type
    +<span class="nc" id="L271">                ConfigurationType type =</span>
    +<span class="nc" id="L272">                    ConfigurationType.fromString(pc.getType());</span>
    +                // Check for invalid type
    +<span class="nc bnc" id="L274" title="All 2 branches missed.">                if (type == null) {</span>
    +<span class="nc" id="L275">                    throw new Exception(&quot;Invalid property's type!&quot;);</span>
    +                }
    +                // Check for a boolean type
    +<span class="nc bnc" id="L278" title="All 2 branches missed.">                else if (type.equals(ConfigurationType.BOOLEAN)) {</span>
    +<span class="nc bnc" id="L279" title="All 2 branches missed.">                    if ((newVal.equals(&quot;true&quot;) == false)</span>
    +<span class="nc bnc" id="L280" title="All 2 branches missed.">                            &amp;&amp; (newVal.equals(&quot;false&quot;) == false)) {</span>
    +<span class="nc" id="L281">                        throw new Exception(&quot;Not a valid boolean value!&quot;);</span>
    +                    }
    +                }
    +                // Check for an integer type
    +<span class="nc bnc" id="L285" title="All 2 branches missed.">                else if (type.equals(ConfigurationType.INTEGER)) {</span>
    +                    try {
    +<span class="nc" id="L287">                        Integer.valueOf(newVal);</span>
    +<span class="nc" id="L288">                    } catch (NumberFormatException nfe) {</span>
    +<span class="nc" id="L289">                        throw new Exception(&quot;Not a valid integer value!&quot;);</span>
    +                    }
    +                }
    +                
    +                // Check for a double type
    +<span class="nc bnc" id="L294" title="All 2 branches missed.">                else if (type.equals(ConfigurationType.DOUBLE)) {</span>
    +                    try {
    +<span class="nc" id="L296">                        Double.valueOf(newVal);</span>
    +<span class="nc" id="L297">                    } catch (NumberFormatException nfe) {</span>
    +<span class="nc" id="L298">                        throw new Exception(&quot;Not a valid double value!&quot;);</span>
    +                    }
    +                }
    +
    +                // Update the given configuration property
    +<span class="nc" id="L303">                pc = db.attachObjectToDBSession(pc);</span>
    +<span class="nc" id="L304">                pc.setValue(newVal);</span>
    +<span class="nc" id="L305">                return true;</span>
    +            }
    +        }
    +<span class="nc" id="L308">        return false;</span>
    +    }
    +
    +    /**
    +     * Adds a new configuration property for this metric plug-in by creating
    +     * a new database record for it.
    +     *
    +     * @param db the DB components object
    +     * @param name the configuration property's name
    +     * @param description the configuration property's description
    +     * @param type the configuration property's type
    +     * @param value the configuration property's value
    +     *
    +     * @return &lt;code&gt;true&lt;/code&gt; upon successful append, of &lt;code&gt;false&lt;/code&gt;
    +     *   when a corresponding database record can not be created.
    +     *
    +     * @throws &lt;code&gt;Exception&lt;/code&gt; upon incorrect value's syntax,
    +     *   invalid property's type, or invalid property's name.
    +     */
    +    public boolean addConfigEntry(
    +            DBService db,
    +            String name,
    +            String description,
    +            String type,
    +            String value)
    +    throws Exception {
    +        // Check for an invalid name
    +<span class="nc bnc" id="L335" title="All 2 branches missed.">        if (name == null) {</span>
    +<span class="nc" id="L336">            throw new Exception(&quot;Invalid name!&quot;);</span>
    +        }
    +
    +        // Check for invalid type
    +<span class="nc bnc" id="L340" title="All 2 branches missed.">        if ((type == null)</span>
    +<span class="nc bnc" id="L341" title="All 2 branches missed.">                || (ConfigurationType.fromString(type) == null)) {</span>
    +<span class="nc" id="L342">            throw new Exception(&quot;Invalid type!&quot;);</span>
    +        }
    +
    +        // Check for invalid value
    +<span class="nc bnc" id="L346" title="All 2 branches missed.">        if (value == null) {</span>
    +<span class="nc" id="L347">            throw new Exception(&quot;Invalid value!&quot;);</span>
    +        }
    +        // Check for invalid boolean value
    +<span class="nc bnc" id="L350" title="All 2 branches missed.">        else if (type.equals(ConfigurationType.BOOLEAN.toString())) {</span>
    +<span class="nc bnc" id="L351" title="All 2 branches missed.">            if ((value.equals(&quot;true&quot;) == false)</span>
    +<span class="nc bnc" id="L352" title="All 2 branches missed.">                    &amp;&amp; (value.equals(&quot;false&quot;) == false)) {</span>
    +<span class="nc" id="L353">                throw new Exception(&quot;Not a valid boolean value!&quot;);</span>
    +            }
    +        }
    +        // Check for an invalid integer value
    +<span class="nc bnc" id="L357" title="All 2 branches missed.">        else if (type.equals(ConfigurationType.INTEGER.toString())) {</span>
    +            try {
    +<span class="nc" id="L359">                Integer.valueOf(value);</span>
    +<span class="nc" id="L360">            } catch (NumberFormatException nfe) {</span>
    +<span class="nc" id="L361">                throw new Exception(&quot;Not a valid integer value!&quot;);</span>
    +            }
    +        }
    +     
    +     // Check for an invalid double value
    +<span class="nc bnc" id="L366" title="All 2 branches missed.">        else if (type.equals(ConfigurationType.DOUBLE.toString())) {</span>
    +            try {
    +<span class="nc" id="L368">                Double.valueOf(value);</span>
    +<span class="nc" id="L369">            } catch (NumberFormatException nfe) {</span>
    +<span class="nc" id="L370">                throw new Exception(&quot;Not a valid double value!&quot;);</span>
    +            }
    +        }
    +
    +        // Add the new configuration property
    +<span class="nc" id="L375">        PluginConfiguration newParam =</span>
    +<span class="nc" id="L376">            new PluginConfiguration();</span>
    +<span class="nc" id="L377">        newParam.setName(name);</span>
    +<span class="nc bnc" id="L378" title="All 2 branches missed.">        newParam.setMsg((description != null) ? description : &quot;&quot;);</span>
    +<span class="nc" id="L379">        newParam.setType(type);</span>
    +<span class="nc" id="L380">        newParam.setValue(value);</span>
    +<span class="nc" id="L381">        Plugin p = Plugin.getPluginByHashcode(hashcode);</span>
    +<span class="nc" id="L382">        newParam.setPlugin(p);</span>
    +<span class="nc" id="L383">        return p.getConfigurations().add(newParam);</span>
    +}
    +
    +    /**
    +     * Removes an existing configuration property of this metric plug-in by
    +     * deleting its database record.
    +     *
    +     * @param db the DB components object
    +     * @param name the configuration property's name
    +     * @param type the configuration property's type
    +     *
    +     * @return &lt;code&gt;true&lt;/code&gt; upon successful remove, or &lt;code&gt;false&lt;/code&gt;
    +     *   when a corresponding database record can not be found.
    +     *
    +     * @throws &lt;code&gt;Exception&lt;/code&gt; upon invalid property's type or name.
    +     */
    +    public boolean removeConfigEntry(
    +            DBService db,
    +            String name,
    +            String type)
    +    throws Exception {
    +        // Check for an invalid name
    +<span class="nc bnc" id="L405" title="All 2 branches missed.">        if (name == null) {</span>
    +<span class="nc" id="L406">            throw new Exception(&quot;Invalid name!&quot;);</span>
    +        }
    +
    +        // Check for invalid type
    +<span class="nc bnc" id="L410" title="All 2 branches missed.">        if ((type == null)</span>
    +<span class="nc bnc" id="L411" title="All 2 branches missed.">                || (ConfigurationType.fromString(type) == null)) {</span>
    +<span class="nc" id="L412">            throw new Exception(&quot;Invalid type!&quot;);</span>
    +        }
    +
    +        // Get the property's Id
    +<span class="nc" id="L416">        Long propId = getConfPropId(name, type);</span>
    +<span class="nc bnc" id="L417" title="All 2 branches missed.">        if (propId != null) {</span>
    +            // Remove the specified configuration property
    +<span class="nc" id="L419">            PluginConfiguration prop = db.findObjectById(</span>
    +<span class="nc" id="L420">                    PluginConfiguration.class, propId);</span>
    +<span class="nc bnc" id="L421" title="All 4 branches missed.">            if ((prop != null) &amp;&amp; (db.deleteRecord(prop))) {</span>
    +<span class="nc" id="L422">                return true;</span>
    +            }
    +        }
    +
    +<span class="nc" id="L426">        return false;</span>
    +}
    +
    +    /**
    +     * Sets the metric's name. In practice the &lt;code&gt;metricName&lt;/code&gt;
    +     * parameter must be equal with the name of the associated metric
    +     * plug-in.
    +     *
    +     * @param metricName - the metric name
    +     */
    +    public void setPluginName(String metricName) {
    +<span class="nc" id="L437">        this.pluginName = metricName;</span>
    +<span class="nc" id="L438">    }</span>
    +
    +    /**
    +     * Returns the metric name stored in this &lt;code&gt;MetricInfo&lt;/code&gt;
    +     * object.
    +     *
    +     * @return Metric name.
    +     */
    +    public String getPluginName() {
    +<span class="nc" id="L447">        return pluginName;</span>
    +    }
    +
    +    /**
    +     * Sets the metric's version. In practice the &lt;code&gt;metricVersion&lt;/code&gt;
    +     * parameter must be equal with the version of the associated metric
    +     * plug-in.
    +     *
    +     * @param metricVersion - a metric version
    +     */
    +    public void setPluginVersion(String metricVersion) {
    +<span class="nc" id="L458">        this.pluginVersion = metricVersion;</span>
    +<span class="nc" id="L459">    }</span>
    +
    +    /**
    +     * Returns the metric version stored in this &lt;code&gt;MetricInfo&lt;/code&gt;
    +     * object.
    +     *
    +     * @return Metric version.
    +     */
    +    public String getPluginVersion() {
    +<span class="nc" id="L468">        return pluginVersion;</span>
    +    }
    +
    +    /**
    +     * Sets the list of supported activation interfaces (types). In practice
    +     * the given list must contain the same entries like those supported by
    +     * the associated metric plug-in.&lt;br/&gt;
    +     * &lt;br/&gt;
    +     * Note: Any previous entries in this list will be deleted by this action.
    +     *
    +     * @param l - the list of supported activation interfaces
    +     */
    +    public void setActivationTypes(Set&lt;Class&lt;? extends DAObject&gt;&gt; l) {
    +<span class="nc" id="L481">        this.activationTypes = l;</span>
    +<span class="nc" id="L482">    }</span>
    +
    +    /**
    +     * Returns the list off all activation interfaces (types) supported by the
    +     * associated metric plug-in.
    +     *
    +     * @return - the list of supported activation interfaces
    +     */
    +    public Set&lt;Class&lt;? extends DAObject&gt;&gt; getActivationTypes() {
    +<span class="nc" id="L491">        return this.activationTypes;</span>
    +    }
    +
    +    /**
    +     * Adds one or more additional activation interfaces (types) to the
    +     * locally stored list of supported activation interfaces.
    +     *
    +     * @param activator - the list of additional activation interfaces
    +     */
    +    public void addActivationType(Class&lt;? extends DAObject&gt; activator) {
    +<span class="nc" id="L501">        this.activationTypes.add(activator);</span>
    +<span class="nc" id="L502">    }</span>
    +
    +    /**
    +     * Compares the provided activation interface to the locally stored list
    +     * of supported activation interfaces.
    +     *
    +     * @return &lt;code&gt;true&lt;/code&gt; when the given activation interface is found
    +     * in the list, or &lt;code&gt;false&lt;/code&gt; otherwise.
    +     */
    +    public boolean isActivationType(Class&lt;? extends DAObject&gt; o) {
    +        // Compare the activation list's entries to the given activation
    +        // interface, until a match is found
    +<span class="nc" id="L514">        Iterator&lt;Class&lt;? extends DAObject&gt;&gt; i =</span>
    +<span class="nc" id="L515">            this.activationTypes.iterator();</span>
    +<span class="nc bnc" id="L516" title="All 2 branches missed.">        while (i.hasNext()) {</span>
    +<span class="nc bnc" id="L517" title="All 2 branches missed.">            if (i.next().equals(o))</span>
    +<span class="nc" id="L518">                return true;</span>
    +        }
    +<span class="nc" id="L520">        return false;</span>
    +    }
    +
    +    /**
    +     * Initializes the corresponding local field with the reference to the
    +     * service, that registered the associated metric plug-in.
    +     *
    +     * @param serviceRef - the service reference
    +     */
    +    public void setServiceRef(ServiceReference serviceRef) {
    +<span class="nc" id="L530">        this.serviceRef = serviceRef;</span>
    +<span class="nc" id="L531">    }</span>
    +
    +    /**
    +     * Returns the service reference that points to the associated metric
    +     * plug-in.
    +     *
    +     * @return The service reference.
    +     */
    +    public ServiceReference getServiceRef() {
    +<span class="nc" id="L540">        return serviceRef;</span>
    +    }
    +
    +    /**
    +     * Sets the hash code's value of this &lt;code&gt;MetricInfo&lt;/code&gt; instance.
    +     * &lt;br/&gt;
    +     * The value must be unique, which means that no other
    +     * &lt;code&gt;MetricInfo&lt;/code&gt; with the same hash code should be kept by
    +     * the &lt;code&gt;PluginAdmin&lt;/code&gt; instance that created this object.
    +     *
    +     * @param hashcode - the hash code's value of this object
    +     */
    +    public void setHashcode(String hashcode) {
    +<span class="nc" id="L553">        this.hashcode = hashcode;</span>
    +<span class="nc" id="L554">    }</span>
    +
    +    /**
    +     * Returns the hash code's value of this &lt;code&gt;MetricInfo&lt;/code&gt; instance.
    +     *
    +     * @return The hash code's value of this object.
    +     */
    +    public String getHashcode() {
    +<span class="nc" id="L562">        return hashcode;</span>
    +    }
    +
    +    /**
    +     * Creates a text representation of this &lt;code&gt;MetricInfo&lt;/code&gt;
    +     * instance.
    +     *
    +     * @return The text representation of this object.
    +     */
    +    public String toString() {
    +<span class="nc" id="L572">        StringBuilder b = new StringBuilder();</span>
    +        // Add the metric plug-in's name
    +<span class="nc" id="L574">        b.append((</span>
    +<span class="nc bnc" id="L575" title="All 2 branches missed.">                ((getPluginName() != null)</span>
    +<span class="nc bnc" id="L576" title="All 2 branches missed.">                        &amp;&amp; (getPluginName().length() &gt; 0))</span>
    +<span class="nc" id="L577">                ? getPluginName()</span>
    +<span class="nc" id="L578">                        : &quot;[UNKNOWN]&quot;));</span>
    +        // Add the metric plug-in's version
    +<span class="nc" id="L580">        b.append((</span>
    +<span class="nc bnc" id="L581" title="All 2 branches missed.">                ((getPluginVersion() != null)</span>
    +<span class="nc bnc" id="L582" title="All 2 branches missed.">                        &amp;&amp; (getPluginVersion().length() &gt; 0))</span>
    +<span class="nc" id="L583">                ? getPluginVersion()</span>
    +<span class="nc" id="L584">                        : &quot;[UNKNOWN]&quot;));</span>
    +        // Add the metric plug-in's class name
    +<span class="nc" id="L586">        b.append(&quot; [&quot;);</span>
    +<span class="nc bnc" id="L587" title="All 2 branches missed.">        if (getServiceRef() != null) {</span>
    +<span class="nc" id="L588">            String[] classNames =</span>
    +<span class="nc" id="L589">                (String[]) serviceRef.getProperty(Constants.OBJECTCLASS);</span>
    +<span class="nc" id="L590">            b.append ((</span>
    +<span class="nc bnc" id="L591" title="All 2 branches missed.">                    ((classNames != null)</span>
    +<span class="nc bnc" id="L592" title="All 2 branches missed.">                            &amp;&amp; (classNames.length &gt; 0))</span>
    +<span class="nc" id="L593">                    ? (StringUtils.join(classNames, &quot;,&quot;))</span>
    +<span class="nc" id="L594">                            : &quot;UNKNOWN&quot;));</span>
    +<span class="nc" id="L595">        }</span>
    +        else {
    +<span class="nc" id="L597">            b.append(&quot;UNKNOWN&quot;);</span>
    +        }
    +<span class="nc" id="L599">        b.append(&quot;]&quot;);</span>
    +<span class="nc" id="L600">        return b.toString();</span>
    +    }
    +
    +	public int compareTo(PluginInfo pi) {
    +<span class="nc" id="L604">		return hashcode.compareTo(pi.hashcode);</span>
    +	}
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result$ResultType.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result$ResultType.html
    new file mode 100644
    index 000000000..f1476bace
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result$ResultType.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Result.ResultType</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">Result.ResultType</span></div><h1>Result.ResultType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">70 of 70</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="Result.java.html#L15" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="44" alt="44"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="Result.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="43" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="Result.java.html#L15" class="el_method">Result.ResultType(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="Result.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result.html
    new file mode 100644
    index 000000000..661090119
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Result</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_class">Result</span></div><h1>Result</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">50 of 50</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">19</td><td class="ctr2">19</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a5"><a href="Result.java.html#L36" class="el_method">Result(DAObject, Metric, Object, Result.ResultType)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Result.java.html#L48" class="el_method">setArtifactId(Long)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="25" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a7"><a href="Result.java.html#L56" class="el_method">setMetricId(Long)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="25" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="Result.java.html#L64" class="el_method">setResult(Object)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="25" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a9"><a href="Result.java.html#L72" class="el_method">setType(Result.ResultType)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="25" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="Result.java.html#L34" class="el_method">Result()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="Result.java.html#L44" class="el_method">getArtifactId()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="Result.java.html#L52" class="el_method">getMetricId()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="Result.java.html#L60" class="el_method">getResult()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="Result.java.html#L68" class="el_method">getType()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result.java.html
    new file mode 100644
    index 000000000..bc411baa8
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/Result.java.html
    @@ -0,0 +1,77 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Result.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.abstractmetric</a> &gt; <span class="el_source">Result.java</span></div><h1>Result.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">package eu.sqooss.service.abstractmetric;</span>
    +
    +import javax.xml.bind.annotation.XmlAccessType;
    +import javax.xml.bind.annotation.XmlAccessorType;
    +import javax.xml.bind.annotation.XmlElement;
    +import javax.xml.bind.annotation.XmlRootElement;
    +
    +import eu.sqooss.service.db.DAObject;
    +import eu.sqooss.service.db.Metric;
    +
    +@XmlRootElement(name=&quot;r&quot;)
    +@XmlAccessorType(XmlAccessType.NONE)
    +public class Result {
    +
    +<span class="nc" id="L15">    public enum ResultType {</span>
    +<span class="nc" id="L16">        STRING, </span>
    +<span class="nc" id="L17">        INTEGER,</span>
    +<span class="nc" id="L18">        FLOAT,</span>
    +<span class="nc" id="L19">        DOUBLE</span>
    +    }
    +    
    +    @XmlElement
    +    private Long artifactId;
    +    
    +    @XmlElement
    +    private Long metricId;
    +    
    +    @XmlElement(type=String.class)
    +    private Object result;
    +    
    +    @XmlElement
    +    private ResultType type;
    +
    +<span class="nc" id="L34">    public Result() {}</span>
    +    
    +<span class="nc" id="L36">    public Result(DAObject o, Metric m, Object result, ResultType type) {</span>
    +<span class="nc" id="L37">        this.artifactId = o.getId();</span>
    +<span class="nc" id="L38">        this.metricId = m.getId();</span>
    +<span class="nc" id="L39">        this.result = result;</span>
    +<span class="nc" id="L40">        this.type = type;</span>
    +<span class="nc" id="L41">    }</span>
    +
    +    public Long getArtifactId() {
    +<span class="nc" id="L44">        return artifactId;</span>
    +    }
    +
    +    public void setArtifactId(Long artifactId) {
    +<span class="nc" id="L48">        this.artifactId = artifactId;</span>
    +<span class="nc" id="L49">    }</span>
    +
    +    public Long getMetricId() {
    +<span class="nc" id="L52">        return metricId;</span>
    +    }
    +
    +    public void setMetricId(Long metricId) {
    +<span class="nc" id="L56">        this.metricId = metricId;</span>
    +<span class="nc" id="L57">    }</span>
    +
    +    public Object getResult() {
    +<span class="nc" id="L60">        return result;</span>
    +    }
    +
    +    public void setResult(Object result) {
    +<span class="nc" id="L64">        this.result = result;</span>
    +<span class="nc" id="L65">    }</span>
    +
    +    public ResultType getType() {
    +<span class="nc" id="L68">        return type;</span>
    +    }
    +
    +    public void setType(ResultType type) {
    +<span class="nc" id="L72">        this.type = type;</span>
    +<span class="nc" id="L73">    }</span>
    +}
    +
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/index.html
    new file mode 100644
    index 000000000..dfd14aa57
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.abstractmetric</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.abstractmetric</span></div><h1>eu.sqooss.service.abstractmetric</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2,490 of 2,490</td><td class="ctr2">0%</td><td class="bar">214 of 214</td><td class="ctr2">0%</td><td class="ctr1">194</td><td class="ctr2">194</td><td class="ctr1">549</td><td class="ctr2">549</td><td class="ctr1">87</td><td class="ctr2">87</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a0"><a href="AbstractMetric.html" class="el_class">AbstractMetric</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,654" alt="1,654"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="124" alt="124"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">95</td><td class="ctr2" id="g0">95</td><td class="ctr1" id="h0">345</td><td class="ctr2" id="i0">345</td><td class="ctr1" id="j0">33</td><td class="ctr2" id="k0">33</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a6"><a href="PluginInfo.html" class="el_class">PluginInfo</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="37" height="10" title="517" alt="517"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="79" height="10" title="82" alt="82"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">65</td><td class="ctr2" id="g1">65</td><td class="ctr1" id="h1">143</td><td class="ctr2" id="i1">143</td><td class="ctr1" id="j1">24</td><td class="ctr2" id="k1">24</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a7"><a href="PluginInfo$ConfigurationType.html" class="el_class">PluginInfo.ConfigurationType</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="7" height="10" title="100" alt="100"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="7" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">9</td><td class="ctr2" id="g3">9</td><td class="ctr1" id="h3">15</td><td class="ctr2" id="i3">15</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k3">5</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a9"><a href="Result$ResultType.html" class="el_class">Result.ResultType</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="5" height="10" title="70" alt="70"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h5">6</td><td class="ctr2" id="i5">6</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k4">4</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a2"><a href="InvocationOrder.html" class="el_class">InvocationOrder</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="4" height="10" title="60" alt="60"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h4">8</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j5">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a8"><a href="Result.html" class="el_class">Result</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="3" height="10" title="50" alt="50"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f2">10</td><td class="ctr2" id="g2">10</td><td class="ctr1" id="h2">19</td><td class="ctr2" id="i2">19</td><td class="ctr1" id="j2">10</td><td class="ctr2" id="k2">10</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a4"><a href="MetricMismatchException.html" class="el_class">MetricMismatchException</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="1" height="10" title="18" alt="18"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h7">4</td><td class="ctr2" id="i7">4</td><td class="ctr1" id="j7">2</td><td class="ctr2" id="k7">2</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a5"><a href="PluginAnnotationProcessor.html" class="el_class">PluginAnnotationProcessor</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="1" height="10" title="14" alt="14"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h6">5</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j6">3</td><td class="ctr2" id="k6">3</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a3"><a href="MetricActivationException.html" class="el_class">MetricActivationException</a></td><td class="bar" id="b8"/><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a1"><a href="AlreadyProcessingException.html" class="el_class">AlreadyProcessingException</a></td><td class="bar" id="b9"/><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/index.source.html
    new file mode 100644
    index 000000000..a0a18656d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.abstractmetric/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.abstractmetric</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.abstractmetric</span></div><h1>eu.sqooss.service.abstractmetric</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2,490 of 2,490</td><td class="ctr2">0%</td><td class="bar">214 of 214</td><td class="ctr2">0%</td><td class="ctr1">194</td><td class="ctr2">194</td><td class="ctr1">549</td><td class="ctr2">549</td><td class="ctr1">87</td><td class="ctr2">87</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a0"><a href="AbstractMetric.java.html" class="el_source">AbstractMetric.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,654" alt="1,654"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="124" alt="124"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">95</td><td class="ctr2" id="g0">95</td><td class="ctr1" id="h0">345</td><td class="ctr2" id="i0">345</td><td class="ctr1" id="j0">33</td><td class="ctr2" id="k0">33</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a6"><a href="PluginInfo.java.html" class="el_source">PluginInfo.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="44" height="10" title="617" alt="617"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="87" height="10" title="90" alt="90"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">74</td><td class="ctr2" id="g1">74</td><td class="ctr1" id="h1">158</td><td class="ctr2" id="i1">158</td><td class="ctr1" id="j1">29</td><td class="ctr2" id="k1">29</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr><tr><td id="a7"><a href="Result.java.html" class="el_source">Result.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="8" height="10" title="120" alt="120"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">14</td><td class="ctr2" id="g2">14</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">25</td><td class="ctr1" id="j2">14</td><td class="ctr2" id="k2">14</td><td class="ctr1" id="l1">2</td><td class="ctr2" id="m1">2</td></tr><tr><td id="a2"><a href="InvocationOrder.java.html" class="el_source">InvocationOrder.java</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="4" height="10" title="60" alt="60"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h3">8</td><td class="ctr2" id="i3">8</td><td class="ctr1" id="j3">4</td><td class="ctr2" id="k3">4</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a4"><a href="MetricMismatchException.java.html" class="el_source">MetricMismatchException.java</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="1" height="10" title="18" alt="18"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">4</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j5">2</td><td class="ctr2" id="k5">2</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a5"><a href="PluginAnnotationProcessor.java.html" class="el_source">PluginAnnotationProcessor.java</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="1" height="10" title="14" alt="14"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h4">5</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j4">3</td><td class="ctr2" id="k4">3</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a3"><a href="MetricActivationException.java.html" class="el_source">MetricActivationException.java</a></td><td class="bar" id="b6"/><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a1"><a href="AlreadyProcessingException.java.html" class="el_source">AlreadyProcessingException.java</a></td><td class="bar" id="b7"/><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject$1.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject$1.html
    new file mode 100644
    index 000000000..91dcb53de
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject$1.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AddProject.new FilenameFilter() {...}</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.admin.actions</a> &gt; <span class="el_class">AddProject.new FilenameFilter() {...}</span></div><h1>AddProject.new FilenameFilter() {...}</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="AddProject.java.html#L239" class="el_method">accept(File, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="AddProject.java.html#L1" class="el_method">{...}</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject.html
    new file mode 100644
    index 000000000..10e52a8d0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AddProject</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.admin.actions</a> &gt; <span class="el_class">AddProject</span></div><h1>AddProject</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">809 of 809</td><td class="ctr2">0%</td><td class="bar">86 of 86</td><td class="ctr2">0%</td><td class="ctr1">48</td><td class="ctr2">48</td><td class="ctr1">132</td><td class="ctr2">132</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="AddProject.java.html#L80" class="el_method">execute()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="592" alt="592"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="64" alt="64"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">33</td><td class="ctr2" id="g0">33</td><td class="ctr1" id="h0">92</td><td class="ctr2" id="i0">92</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="AddProject.java.html#L222" class="el_method">addProjectDir(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="42" height="10" title="210" alt="210"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="41" height="10" title="22" alt="22"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">12</td><td class="ctr2" id="g1">12</td><td class="ctr1" id="h1">37</td><td class="ctr2" id="i1">37</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="AddProject.java.html#L62" class="el_method">AddProject()</a></td><td class="bar" id="b2"/><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="AddProject.java.html#L70" class="el_method">mnemonic()</a></td><td class="bar" id="b3"/><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="AddProject.java.html#L75" class="el_method">descr()</a></td><td class="bar" id="b4"/><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject.java.html
    new file mode 100644
    index 000000000..bc1ce688a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/AddProject.java.html
    @@ -0,0 +1,290 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AddProject.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.admin.actions</a> &gt; <span class="el_source">AddProject.java</span></div><h1>AddProject.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">package eu.sqooss.service.admin.actions;</span>
    +
    +import java.io.File;
    +import java.io.FileInputStream;
    +import java.io.FilenameFilter;
    +import java.util.HashMap;
    +import java.util.Properties;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.admin.AdminActionBase;
    +import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.ConfigOption;
    +import eu.sqooss.service.db.ConfigurationOption;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.tds.BTSAccessor;
    +import eu.sqooss.service.tds.InvalidAccessorException;
    +import eu.sqooss.service.tds.InvalidRepositoryException;
    +import eu.sqooss.service.tds.MailAccessor;
    +import eu.sqooss.service.tds.ProjectAccessor;
    +import eu.sqooss.service.tds.TDSService;
    +
    +/**
    + * Action that adds a new project to the project database. 
    + * 
    + * &lt;h2&gt;Arguments&lt;/h2&gt;
    + * 
    + * &lt;table&gt;
    + * &lt;th&gt;
    + *  &lt;td&gt;Argument&lt;/td&gt;
    + *  &lt;td&gt;Required?&lt;/td&gt;
    + *  &lt;td&gt;Explanation&lt;/td&gt;
    + * &lt;/th&gt;
    + * 
    + * &lt;tr&gt;
    + *  &lt;td&gt;name&lt;/td&gt;
    + *  &lt;td&gt;*&lt;/td&gt;
    + *  &lt;td&gt;The name to use to reference the project&lt;/td&gt;
    + * &lt;/tr&gt;
    + * &lt;tr&gt;
    + *  &lt;td&gt;scm&lt;/td&gt;
    + *  &lt;td&gt;*&lt;/td&gt;
    + *  &lt;td&gt;The URL for the project's SCM system&lt;/td&gt;
    + * &lt;/tr&gt;
    + * &lt;tr&gt;
    + *  &lt;td&gt;dir&lt;/td&gt;
    + *  &lt;td&gt;&lt;/td&gt;
    + *  &lt;td&gt;Directory that contains the project, in the Alitheia Core expected layout. 
    + *      If the action finds this argument it ignores all others.&lt;/td&gt;
    + * &lt;/tr&gt;
    + * &lt;tr&gt;
    + *  &lt;td&gt;update&lt;/td&gt;
    + *  &lt;td&gt;&lt;/td&gt;
    + *  &lt;td&gt;Its presence controls whether a data update will be triggered after the project has been
    + *  succesfully installed.&lt;/td&gt;
    + * &lt;/tr&gt;
    + * &lt;/table&gt;
    + * 
    + * @author gousiosg
    + *
    + */
    +<span class="nc" id="L62">public class AddProject extends AdminActionBase {</span>
    +
    +	public static final String MNEMONIC = &quot;addpr&quot;;
    +	
    +    Properties p;
    +    
    +    @Override
    +    public String mnemonic() {
    +<span class="nc" id="L70">        return MNEMONIC;</span>
    +    }
    +
    +    @Override
    +    public String descr() {
    +<span class="nc" id="L75">        return &quot;Adds a project to the database&quot;;</span>
    +    }
    +
    +    @Override
    +    public void execute() throws Exception {
    +<span class="nc" id="L80">        super.execute();</span>
    +<span class="nc" id="L81">        String name = null, bts = null, scm = null, mail = null, contact = null, web = null;</span>
    +<span class="nc" id="L82">        DBService db = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L83">        TDSService tds = AlitheiaCore.getInstance().getTDSService();</span>
    +        
    +<span class="nc bnc" id="L85" title="All 2 branches missed.">        if (args.containsKey(&quot;dir&quot;)) { </span>
    +<span class="nc" id="L86">            addProjectDir(args.get(&quot;dir&quot;).toString());</span>
    +            
    +<span class="nc" id="L88">            name = p.getProperty(ConfigOption.PROJECT_NAME.getName());</span>
    +<span class="nc" id="L89">            bts = p.getProperty(ConfigOption.PROJECT_BTS_URL.getName());</span>
    +<span class="nc" id="L90">            scm = p.getProperty(ConfigOption.PROJECT_SCM_URL.getName());</span>
    +<span class="nc" id="L91">            mail = p.getProperty(ConfigOption.PROJECT_ML_URL.getName());</span>
    +<span class="nc" id="L92">            contact = p.getProperty(ConfigOption.PROJECT_CONTACT.getName());</span>
    +<span class="nc" id="L93">            web = p.getProperty(ConfigOption.PROJECT_WEBSITE.getName());</span>
    +<span class="nc" id="L94">        } else {</span>
    +<span class="nc bnc" id="L95" title="All 2 branches missed.">            name = (args.get(&quot;name&quot;) == null)?&quot;&quot;:args.get(&quot;name&quot;).toString();</span>
    +<span class="nc bnc" id="L96" title="All 2 branches missed.">            bts = (args.get(&quot;bts&quot;) == null)?&quot;&quot;:args.get(&quot;bts&quot;).toString();</span>
    +<span class="nc bnc" id="L97" title="All 2 branches missed.">            scm = (args.get(&quot;scm&quot;) == null)?&quot;&quot;:args.get(&quot;scm&quot;).toString();</span>
    +<span class="nc bnc" id="L98" title="All 2 branches missed.">            mail = (args.get(&quot;mail&quot;) == null)?&quot;&quot;:args.get(&quot;mail&quot;).toString();</span>
    +<span class="nc bnc" id="L99" title="All 2 branches missed.">            contact = (args.get(&quot;contact&quot;) == null)?&quot;&quot;:args.get(&quot;contact&quot;).toString();</span>
    +<span class="nc bnc" id="L100" title="All 2 branches missed.">            web = (args.get(&quot;web&quot;) == null)?&quot;&quot;:args.get(&quot;web&quot;).toString();</span>
    +            
    +<span class="nc" id="L102">            p = new Properties();</span>
    +<span class="nc" id="L103">            p.put(ConfigOption.PROJECT_NAME.getName(), name);</span>
    +<span class="nc" id="L104">            p.put(ConfigOption.PROJECT_WEBSITE.getName(), web);</span>
    +<span class="nc" id="L105">            p.put(ConfigOption.PROJECT_CONTACT.getName(), contact);</span>
    +<span class="nc" id="L106">            p.put(ConfigOption.PROJECT_BTS_URL.getName(), bts);</span>
    +<span class="nc" id="L107">            p.put(ConfigOption.PROJECT_ML_URL.getName(), mail);</span>
    +<span class="nc" id="L108">            p.put(ConfigOption.PROJECT_SCM_URL.getName(), scm);</span>
    +        }
    +
    +        // Avoid missing-entirely kinds of parameters.
    +<span class="nc bnc" id="L112" title="All 4 branches missed.">        if ( (name == null) || (scm == null) ) {</span>
    +<span class="nc bnc" id="L113" title="All 2 branches missed.">            error(&quot;missing.param&quot;, &quot;Missing required parameter &quot; + ((name == null)?&quot;name&quot;:&quot;scm&quot;));</span>
    +        }
    +
    +        // Avoid adding projects with empty names or SVN.
    +<span class="nc bnc" id="L117" title="All 4 branches missed.">        if (name.trim().length() == 0 || scm.trim().length() == 0) {</span>
    +<span class="nc bnc" id="L118" title="All 2 branches missed.">            error(&quot;missing.param&quot;, &quot;Missing required parameter &quot; + ((name.length() == 0)?&quot;name&quot;:&quot;scm&quot;));</span>
    +        }
    +
    +        /* Run a few checks before actually storing the project */
    +        // 1. Duplicate project
    +<span class="nc" id="L123">        HashMap&lt;String, Object&gt; props = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L124">        props.put(&quot;name&quot;,  name);</span>
    +<span class="nc bnc" id="L125" title="All 2 branches missed.">        if (!db.findObjectsByProperties(StoredProject.class, props).isEmpty()) {</span>
    +<span class="nc" id="L126">            error(&quot;project.exists&quot;, &quot;A project with the same name already exists&quot;);</span>
    +        }
    +
    +        // 2. Check for data handlers Add accessor and try to access project resources
    +<span class="nc bnc" id="L130" title="All 2 branches missed.">        if (!tds.isURLSupported(scm)) {</span>
    +<span class="nc" id="L131">            error(&quot;tds.unsupported.url&quot;, &quot;No appropriate accessor for repository URI: &quot;+ scm);</span>
    +        }
    +        
    +<span class="nc bnc" id="L134" title="All 6 branches missed.">        if (mail != null &amp;&amp;  !mail.isEmpty() &amp;&amp; !tds.isURLSupported(mail)) {</span>
    +<span class="nc" id="L135">             error(&quot;tds.unsupported.url&quot;, &quot;No appropriate accessor for repository URI: &quot;+ mail);</span>
    +        }
    +        
    +<span class="nc bnc" id="L138" title="All 6 branches missed.">        if (bts != null &amp;&amp; !bts.isEmpty() &amp;&amp; !tds.isURLSupported(bts)) {</span>
    +<span class="nc" id="L139">            error(&quot;tds.unsupported.url&quot;, &quot;No appropriate accessor for repository URI: &quot;+ bts);</span>
    +        }
    +
    +<span class="nc" id="L142">        tds.addAccessor(Integer.MAX_VALUE, name, bts, mail, scm);</span>
    +        
    +<span class="nc bnc" id="L144" title="All 2 branches missed.">        if (tds.getAccessor(Integer.MAX_VALUE) == null)</span>
    +<span class="nc" id="L145">        	warn(&quot;tds&quot;, &quot;Error retrieving accessor for project: &quot; + name);</span>
    +        
    +<span class="nc" id="L147">        ProjectAccessor a = tds.getAccessor(Integer.MAX_VALUE);</span>
    +        
    +        try {
    +<span class="nc" id="L150">        	debug(&quot;Testing SCM accessor for project: &quot; + name);</span>
    +<span class="nc" id="L151">            a.getSCMAccessor().getHeadRevision();</span>
    +<span class="nc" id="L152">            debug(&quot;SCM accessor OK. SCM Head: &quot; + </span>
    +<span class="nc" id="L153">            		a.getSCMAccessor().getHeadRevision().getUniqueId());</span>
    +            
    +<span class="nc" id="L155">            debug(&quot;Testing BTS accessor for project: &quot; + name);</span>
    +<span class="nc" id="L156">            BTSAccessor ba = a.getBTSAccessor();</span>
    +<span class="nc bnc" id="L157" title="All 2 branches missed.">            if (ba == null) {</span>
    +<span class="nc" id="L158">                warn(&quot;tds.bts.url&quot;, &quot;Bug Accessor failed initialization for URI:&quot; + bts);</span>
    +<span class="nc" id="L159">            } else {</span>
    +<span class="nc" id="L160">            	debug(&quot;BTS accessor OK.&quot;);</span>
    +            }
    +
    +<span class="nc" id="L163">            debug(&quot;Testing mail accessor for project: &quot; + name);</span>
    +<span class="nc" id="L164">            MailAccessor ma = a.getMailAccessor();</span>
    +<span class="nc bnc" id="L165" title="All 2 branches missed.">            if (ma == null) {</span>
    +<span class="nc" id="L166">                warn(&quot;tds.mail.maildir&quot;, &quot;Mail accessor failed initialization for URI:&quot; + bts);</span>
    +<span class="nc" id="L167">            } else {</span>
    +<span class="nc" id="L168">            	debug(&quot;Mail accessor OK.&quot;);</span>
    +            }
    +<span class="nc" id="L170">        } catch (InvalidRepositoryException ire) {</span>
    +<span class="nc" id="L171">            error(&quot;tds.scm.url&quot;, &quot;No appropriate accessor for repository URI: &quot;+ scm);</span>
    +<span class="nc" id="L172">        } catch (InvalidAccessorException iae) {</span>
    +<span class="nc" id="L173">            error(&quot;tds&quot;, &quot;Invalid accessor: &quot;+ iae.getAccessorURI());</span>
    +<span class="nc" id="L174">        } catch (Exception e) {</span>
    +<span class="nc" id="L175">        	error(&quot;tds&quot;, &quot;Accessor failed: &quot;+ e.getMessage());</span>
    +<span class="nc" id="L176">        } finally {</span>
    +<span class="nc" id="L177">            tds.releaseAccessor(a);</span>
    +<span class="nc" id="L178">        }</span>
    +        
    +<span class="nc" id="L180">        StoredProject sp = new StoredProject(name);</span>
    +        //The project is now ready to be added 
    +<span class="nc" id="L182">        db.addRecord(sp);</span>
    +        
    +        //Store all known properties to the database
    +<span class="nc bnc" id="L185" title="All 2 branches missed.">        for (ConfigOption co : ConfigOption.values()) {</span>
    +<span class="nc" id="L186">            String s = p.getProperty(co.getName());</span>
    +            
    +<span class="nc bnc" id="L188" title="All 2 branches missed.">            if (s == null)</span>
    +<span class="nc" id="L189">                continue;</span>
    +            
    +            //Don't split URLs
    +<span class="nc bnc" id="L192" title="All 2 branches missed.">            if (co.equals(ConfigOption.PROJECT_BTS_URL) ||</span>
    +<span class="nc bnc" id="L193" title="All 2 branches missed.">            		co.equals(ConfigOption.PROJECT_ML_URL) ||</span>
    +<span class="nc bnc" id="L194" title="All 2 branches missed.">            		co.equals(ConfigOption.PROJECT_SCM_URL)) {</span>
    +<span class="nc" id="L195">            	sp.addConfig(co, s);</span>
    +<span class="nc" id="L196">            	continue;</span>
    +            }
    +
    +<span class="nc" id="L199">            String[] subopts = s.split(&quot; &quot;);</span>
    +            
    +<span class="nc bnc" id="L201" title="All 2 branches missed.">            for (String subopt : subopts) {</span>
    +<span class="nc bnc" id="L202" title="All 2 branches missed.">                if (subopt.trim().length() &gt; 0)</span>
    +<span class="nc" id="L203">                    sp.addConfig(co, subopt.trim());</span>
    +            }
    +        }
    +       
    +<span class="nc" id="L207">        tds.addAccessor(sp.getId(), sp.getName(), sp.getBtsUrl(), sp.getMailUrl(), </span>
    +<span class="nc" id="L208">                sp.getScmUrl());</span>
    +
    +<span class="nc" id="L210">        sp.setClusternode(ClusterNode.thisNode());</span>
    +        
    +<span class="nc" id="L212">        log(&quot;Added a new project &lt;&quot; + name + &quot;&gt; with ID &quot; + sp.getId());</span>
    +        
    +<span class="nc bnc" id="L214" title="All 2 branches missed.">        if (args.get(&quot;update&quot;) != null)</span>
    +<span class="nc" id="L215">            AlitheiaCore.getInstance().getUpdater().update(sp);</span>
    +        
    +<span class="nc" id="L217">        finished(&quot;Project addded succesfully&quot;);</span>
    +<span class="nc" id="L218">    }</span>
    +    
    +    private void addProjectDir(String info) throws Exception {
    +        
    +<span class="nc bnc" id="L222" title="All 4 branches missed.">        if (info == null || info.length() == 0) {</span>
    +<span class="nc" id="L223">            error(&quot;missing.param&quot;, &quot;Missing required parameter path: &quot; + info);</span>
    +        }
    +        
    +<span class="nc" id="L226">        File infoFile = new File(info);</span>
    +        
    +<span class="nc bnc" id="L228" title="All 2 branches missed.">        if (!infoFile.exists()) {</span>
    +<span class="nc" id="L229">            error(&quot;missing.path&quot;, &quot;The provided path does not exist&quot;);</span>
    +        }
    +        
    +<span class="nc" id="L232">        File f = null;</span>
    +        
    +<span class="nc bnc" id="L234" title="All 2 branches missed.">        if (infoFile.isDirectory()) {</span>
    +<span class="nc" id="L235">            File[] contents = infoFile.listFiles(new FilenameFilter() {</span>
    +                
    +                @Override
    +                public boolean accept(File dir, String name) {
    +<span class="nc bnc" id="L239" title="All 2 branches missed.">                    if (name.contentEquals(&quot;project.properties&quot;))</span>
    +<span class="nc" id="L240">                        return true;</span>
    +<span class="nc" id="L241">                    return false;</span>
    +                }
    +            });
    +        
    +<span class="nc bnc" id="L245" title="All 2 branches missed.">            if (contents.length &lt;= 0) {</span>
    +<span class="nc" id="L246">                error(&quot;missing.project.properties&quot;, &quot;The provided directory does not include a project.properties file&quot;);</span>
    +            }
    +            
    +<span class="nc" id="L249">            f = contents[0];</span>
    +            
    +<span class="nc" id="L251">        } else {</span>
    +<span class="nc bnc" id="L252" title="All 2 branches missed.">            if (!info.endsWith(&quot;project.properties&quot;)) {</span>
    +<span class="nc" id="L253">                error(&quot;missing.project.properties&quot;, &quot;The provided directory does not include a project.properties file&quot;);</span>
    +            }
    +<span class="nc" id="L255">            f = infoFile;</span>
    +        }
    +
    +<span class="nc" id="L258">        p = new Properties();</span>
    +        try {
    +<span class="nc" id="L260">            p.load(new FileInputStream(f));</span>
    +<span class="nc" id="L261">        } catch (Exception e1) {</span>
    +<span class="nc" id="L262">            error(&quot;not.properties&quot;, &quot;The provided path is not a valid project.properties file&quot;);</span>
    +        }
    +
    +<span class="nc bnc" id="L265" title="All 2 branches missed.">        if (p.getProperty(ConfigOption.PROJECT_NAME.getName()) == null)</span>
    +<span class="nc" id="L266">            p.setProperty(ConfigOption.PROJECT_NAME.getName(), f.getParentFile().getName());</span>
    +
    +<span class="nc" id="L268">        String parent = f.getParentFile().getAbsolutePath();</span>
    +<span class="nc" id="L269">        debug(&quot;Project dir URI: &quot; + f.getParentFile().toURI());</span>
    +        
    +<span class="nc" id="L271">        p.setProperty(ConfigOption.PROJECT_BTS_URL.getName(),</span>
    +<span class="nc" id="L272">                &quot;bugzilla-xml:///&quot; + parent + File.separator + &quot;bugs&quot;);</span>
    +<span class="nc" id="L273">        p.setProperty(ConfigOption.PROJECT_ML_URL.getName(), </span>
    +<span class="nc" id="L274">                &quot;maildir:///&quot; + parent + File.separator + &quot;mail&quot;);</span>
    +
    +<span class="nc bnc" id="L276" title="All 2 branches missed.">        for (File file: infoFile.listFiles()) {</span>
    +<span class="nc bnc" id="L277" title="All 2 branches missed.">            if (!file.isDirectory())</span>
    +<span class="nc" id="L278">                continue;</span>
    +            
    +<span class="nc bnc" id="L280" title="All 2 branches missed.">            if(file.getName().equals(&quot;svn&quot;)) {</span>
    +<span class="nc" id="L281">                p.setProperty(ConfigOption.PROJECT_SCM_URL.getName(),</span>
    +<span class="nc" id="L282">                        &quot;svn-file:///&quot; + parent + File.separator +&quot;svn&quot;);</span>
    +<span class="nc bnc" id="L283" title="All 2 branches missed.">            } else if (file.getName().equals(&quot;git&quot;)) {</span>
    +<span class="nc" id="L284">                p.setProperty(ConfigOption.PROJECT_SCM_URL.getName(),</span>
    +<span class="nc" id="L285">                        &quot;git-file:///&quot; + parent + File.separator + &quot;git&quot;);</span>
    +            }
    +        }
    +<span class="nc" id="L288">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/RunTimeInfo.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/RunTimeInfo.html
    new file mode 100644
    index 000000000..bd9d1a3ab
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/RunTimeInfo.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RunTimeInfo</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.admin.actions</a> &gt; <span class="el_class">RunTimeInfo</span></div><h1>RunTimeInfo</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">57 of 62</td><td class="ctr2">8%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">4</td><td class="ctr1">13</td><td class="ctr2">16</td><td class="ctr1">2</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="RunTimeInfo.java.html#L58" class="el_method">execute()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="55" alt="55"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">12</td><td class="ctr2" id="i0">12</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="RunTimeInfo.java.html#L53" class="el_method">descr()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="4" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="RunTimeInfo.java.html#L43" class="el_method">RunTimeInfo()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="RunTimeInfo.java.html#L48" class="el_method">mnemonic()</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="4" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/RunTimeInfo.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/RunTimeInfo.java.html
    new file mode 100644
    index 000000000..b560cea2c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/RunTimeInfo.java.html
    @@ -0,0 +1,73 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RunTimeInfo.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.admin.actions</a> &gt; <span class="el_source">RunTimeInfo.java</span></div><h1>RunTimeInfo.java</h1><pre class="source lang-java linenums">/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.admin.actions;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.admin.AdminActionBase;
    +import eu.sqooss.service.scheduler.SchedulerStats;
    +
    +public class RunTimeInfo extends AdminActionBase {
    +
    +    public static final String MNEMONIC = &quot;rti&quot;;
    +    private static final String descr = &quot;Returns misc runtime information&quot;;
    +
    +    public RunTimeInfo() {
    +<span class="fc" id="L43">        super();</span>
    +<span class="fc" id="L44">    }</span>
    +
    +    @Override
    +    public String mnemonic() {
    +<span class="fc" id="L48">        return MNEMONIC;</span>
    +    }
    +
    +    @Override
    +    public String descr() {
    +<span class="nc" id="L53">        return descr;</span>
    +    }
    +
    +    @Override
    +    public void execute() throws Exception {
    +<span class="nc" id="L58">        super.execute();</span>
    +        try {
    +<span class="nc" id="L60">            SchedulerStats s = AlitheiaCore.getInstance().getScheduler()</span>
    +<span class="nc" id="L61">                    .getSchedulerStats();</span>
    +<span class="nc" id="L62">            result.put(&quot;sched.jobs.failed&quot;, s.getFailedJobs());</span>
    +<span class="nc" id="L63">            result.put(&quot;sched.jobs.wait&quot;, s.getWaitingJobs());</span>
    +<span class="nc" id="L64">            result.put(&quot;sched.jobs.finished&quot;, s.getFinishedJobs());</span>
    +<span class="nc" id="L65">            result.put(&quot;sched.threads.idle&quot;, s.getIdleWorkerThreads());</span>
    +<span class="nc" id="L66">            result.put(&quot;sched.threads.total&quot;, s.getWorkerThreads());</span>
    +<span class="nc" id="L67">        } catch (Exception e) {</span>
    +<span class="nc" id="L68">            error(e);</span>
    +        }
    +<span class="nc" id="L70">        finished(&quot;Info retrieved&quot;);</span>
    +<span class="nc" id="L71">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/UpdateProject.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/UpdateProject.html
    new file mode 100644
    index 000000000..49a30b6ae
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/UpdateProject.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdateProject</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.admin.actions</a> &gt; <span class="el_class">UpdateProject</span></div><h1>UpdateProject</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">161 of 161</td><td class="ctr2">0%</td><td class="bar">20 of 20</td><td class="ctr2">0%</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">38</td><td class="ctr2">38</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="UpdateProject.java.html#L62" class="el_method">execute()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="154" alt="154"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">11</td><td class="ctr2" id="g0">11</td><td class="ctr1" id="h0">35</td><td class="ctr2" id="i0">35</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="UpdateProject.java.html#L46" class="el_method">UpdateProject()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="UpdateProject.java.html#L52" class="el_method">mnemonic()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="UpdateProject.java.html#L57" class="el_method">descr()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/UpdateProject.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/UpdateProject.java.html
    new file mode 100644
    index 000000000..6610475ce
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/UpdateProject.java.html
    @@ -0,0 +1,119 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdateProject.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.admin.actions</a> &gt; <span class="el_source">UpdateProject.java</span></div><h1>UpdateProject.java</h1><pre class="source lang-java linenums">package eu.sqooss.service.admin.actions;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.admin.AdminActionBase;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.updater.UpdaterService;
    +import eu.sqooss.service.updater.UpdaterService.UpdaterStage;
    +
    +/**
    + * An action that triggers a project update.
    + * 
    + * &lt;h2&gt;Arguments&lt;/h2&gt;
    + * 
    + * &lt;table&gt;
    + * &lt;th&gt;
    + * &lt;td&gt;Argument&lt;/td&gt;
    + * &lt;td&gt;Required?&lt;/td&gt;
    + * &lt;td&gt;Explanation&lt;/td&gt;&lt;/th&gt;
    + * 
    + * &lt;tr&gt;
    + * &lt;td&gt;project&lt;/td&gt;
    + * &lt;td&gt;yes&lt;/td&gt;
    + * &lt;td&gt;The project (name or id) to run the update for&lt;/td&gt;
    + * &lt;/tr&gt;
    + * 
    + * &lt;tr&gt;
    + * &lt;td&gt;updater&lt;/td&gt;
    + * &lt;td&gt;no&lt;/td&gt;
    + * &lt;td&gt;The mnemonic of the updater to run. This parameter takes precedence over
    + * the next one, in case of conflict (i.e. specified updater not in specified
    + * stage)&lt;/td&gt;
    + * &lt;/tr&gt;
    + * 
    + * &lt;tr&gt;
    + * &lt;td&gt;stage&lt;/td&gt;
    + * &lt;td&gt;no&lt;/td&gt;
    + * &lt;td&gt;One of DEFAULT, IMPORT, PARSING, INFERENCE. If omitted, and the updater
    + * parameter is not set, all updaters available to the project will be run.&lt;/td&gt;
    + * &lt;/tr&gt;
    + * 
    + * &lt;/table&gt;
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + * 
    + */
    +<span class="nc" id="L46">public class UpdateProject extends AdminActionBase {</span>
    +
    +    public static final String MNEMONIC = &quot;upd&quot;;
    +    
    +    @Override
    +    public String mnemonic() {
    +<span class="nc" id="L52">        return MNEMONIC;</span>
    +    }
    +
    +    @Override
    +    public String descr() {
    +<span class="nc" id="L57">        return &quot;Schedules update jobs&quot;;</span>
    +    }
    +
    +    @Override
    +    public void execute() throws Exception {
    +<span class="nc" id="L62">        super.execute();</span>
    +<span class="nc bnc" id="L63" title="All 2 branches missed.">        String project = (args.get(&quot;project&quot;) != null) ? args.get(&quot;project&quot;).toString() : null;</span>
    +<span class="nc bnc" id="L64" title="All 2 branches missed.">        String stage = (args.get(&quot;stage&quot;) != null) ? args.get(&quot;stage&quot;).toString() : null;</span>
    +<span class="nc bnc" id="L65" title="All 2 branches missed.">        String updater = (args.get(&quot;updater&quot;) != null) ? args.get(&quot;updater&quot;).toString() : null;</span>
    +
    +<span class="nc bnc" id="L67" title="All 2 branches missed.">        if (project == null) {</span>
    +<span class="nc" id="L68">            error(&quot;missing.param&quot;, &quot;Missing required parameter: project&quot;);</span>
    +        }
    +
    +<span class="nc" id="L71">        Integer projectid = null;</span>
    +        try {
    +<span class="nc" id="L73">            projectid = Integer.parseInt(project);</span>
    +<span class="nc" id="L74">        } catch (NumberFormatException nfe) {}</span>
    +
    +<span class="nc" id="L76">        StoredProject sp = null;</span>
    +
    +<span class="nc bnc" id="L78" title="All 2 branches missed.">        if (projectid == null) {</span>
    +            // The project was provided by name
    +<span class="nc" id="L80">            sp = StoredProject.getProjectByName(project);</span>
    +<span class="nc" id="L81">        } else {</span>
    +<span class="nc" id="L82">            sp = StoredProject.loadDAObyId(projectid, StoredProject.class);</span>
    +        }
    +
    +<span class="nc bnc" id="L85" title="All 2 branches missed.">        if (sp == null) {</span>
    +<span class="nc" id="L86">            error(&quot;project.notexists&quot;, &quot;Project &quot; + project + &quot; does not exist&quot;);</span>
    +        }
    +
    +<span class="nc" id="L89">        UpdaterService u = AlitheiaCore.getInstance().getUpdater();</span>
    +<span class="nc" id="L90">        UpdaterStage us = null;</span>
    +        try {
    +<span class="nc" id="L92">            us = UpdaterStage.valueOf(UpdaterStage.class, stage);</span>
    +<span class="nc" id="L93">        } catch (Exception e) {</span>
    +<span class="nc" id="L94">            warn(&quot;updater.stage.notexists&quot;,</span>
    +<span class="nc" id="L95">                    &quot;No such stage &quot; + stage + &quot;:&quot; + e.getMessage());</span>
    +        }
    +
    +        boolean scheduled;
    +
    +<span class="nc bnc" id="L100" title="All 2 branches missed.">        if (updater == null) {</span>
    +<span class="nc bnc" id="L101" title="All 2 branches missed.">            if (stage == null) {</span>
    +<span class="nc" id="L102">                scheduled = u.update(sp);</span>
    +<span class="nc" id="L103">            } else {</span>
    +<span class="nc" id="L104">                scheduled = u.update(sp, us);</span>
    +            }
    +<span class="nc" id="L106">        } else {</span>
    +<span class="nc" id="L107">            scheduled = u.update(sp, updater);</span>
    +<span class="nc bnc" id="L108" title="All 2 branches missed.">            if (!scheduled)</span>
    +<span class="nc" id="L109">                warn(&quot;updater.notexists&quot;, &quot;No such updater: &quot; + updater);</span>
    +        }
    +
    +<span class="nc bnc" id="L112" title="All 2 branches missed.">        if (scheduled)</span>
    +<span class="nc" id="L113">            finished(&quot;Project addded succesfully&quot;);</span>
    +        else
    +<span class="nc" id="L115">            error(&quot;updater.failed&quot;, &quot;Could not schedule update jobs, check the &quot; +</span>
    +            		&quot;updater log for details&quot;);
    +<span class="nc" id="L117">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/index.html
    new file mode 100644
    index 000000000..cf44eb044
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.admin.actions</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.admin.actions</span></div><h1>eu.sqooss.service.admin.actions</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,041 of 1,046</td><td class="ctr2">0%</td><td class="bar">108 of 108</td><td class="ctr2">0%</td><td class="ctr1">67</td><td class="ctr2">69</td><td class="ctr1">187</td><td class="ctr2">190</td><td class="ctr1">13</td><td class="ctr2">15</td><td class="ctr1">3</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="AddProject.html" class="el_class">AddProject</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="809" alt="809"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="86" alt="86"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">48</td><td class="ctr2" id="g0">48</td><td class="ctr1" id="h0">132</td><td class="ctr2" id="i0">132</td><td class="ctr1" id="j0">5</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a3"><a href="UpdateProject.html" class="el_class">UpdateProject</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="23" height="10" title="161" alt="161"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="27" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">14</td><td class="ctr2" id="g1">14</td><td class="ctr1" id="h1">38</td><td class="ctr2" id="i1">38</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="RunTimeInfo.html" class="el_class">RunTimeInfo</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="8" height="10" title="57" alt="57"/></td><td class="ctr2" id="c0">8%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">13</td><td class="ctr2" id="i2">16</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="AddProject$1.html" class="el_class">AddProject.new FilenameFilter() {...}</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="2" height="10" title="14" alt="14"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">5</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j3">2</td><td class="ctr2" id="k3">2</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/index.source.html
    new file mode 100644
    index 000000000..3432775b5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin.actions/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.admin.actions</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.admin.actions</span></div><h1>eu.sqooss.service.admin.actions</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,041 of 1,046</td><td class="ctr2">0%</td><td class="bar">108 of 108</td><td class="ctr2">0%</td><td class="ctr1">67</td><td class="ctr2">69</td><td class="ctr1">187</td><td class="ctr2">190</td><td class="ctr1">13</td><td class="ctr2">15</td><td class="ctr1">3</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="AddProject.java.html" class="el_source">AddProject.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="823" alt="823"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="88" alt="88"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">51</td><td class="ctr2" id="g0">51</td><td class="ctr1" id="h0">136</td><td class="ctr2" id="i0">136</td><td class="ctr1" id="j0">7</td><td class="ctr2" id="k0">7</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr><tr><td id="a2"><a href="UpdateProject.java.html" class="el_source">UpdateProject.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="23" height="10" title="161" alt="161"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="27" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">14</td><td class="ctr2" id="g1">14</td><td class="ctr1" id="h1">38</td><td class="ctr2" id="i1">38</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="RunTimeInfo.java.html" class="el_source">RunTimeInfo.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="8" height="10" title="57" alt="57"/></td><td class="ctr2" id="c0">8%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">13</td><td class="ctr2" id="i2">16</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminAction$AdminActionStatus.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminAction$AdminActionStatus.html
    new file mode 100644
    index 000000000..38df99acf
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminAction$AdminActionStatus.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminAction.AdminActionStatus</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.admin</a> &gt; <span class="el_class">AdminAction.AdminActionStatus</span></div><h1>AdminAction.AdminActionStatus</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">5 of 80</td><td class="ctr2">94%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">4</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a2"><a href="AdminAction.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="11" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="AdminAction.java.html#L96" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="54" alt="54"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="AdminAction.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="35" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="AdminAction.java.html#L96" class="el_method">AdminAction.AdminActionStatus(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="11" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminAction.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminAction.java.html
    new file mode 100644
    index 000000000..57004bf8b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminAction.java.html
    @@ -0,0 +1,104 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminAction.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.admin</a> &gt; <span class="el_source">AdminAction.java</span></div><h1>AdminAction.java</h1><pre class="source lang-java linenums"><span class="pc" id="L1">/*</span>
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.admin;
    +
    +import java.util.Map;
    +
    +import javax.xml.bind.annotation.XmlElement;
    +import javax.xml.bind.annotation.XmlRootElement;
    +
    +/**
    + * An action that is executed by the admin service on behalf of some client.
    + * Admin actions are identified by a short mnemonic. The long description
    + * should report all returned fields and error codes.
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + */
    +@XmlRootElement(name=&quot;action&quot;)
    +public interface AdminAction {
    +    
    +	/**
    +	 * Add an argument to the list of the action's arguments. Overrides
    +	 * previously set arguments with the same key. Does not have any effect if
    +	 * {@link #execute()} has been called.
    +	 */
    +	void addArg(String key, Object value);
    +	
    +	/**
    +	 * Set all action arguments, overriding previously set ones. Does not have
    +	 * any effect if {@link #execute()} has been called.
    +	 */
    +    void setArgs(Map&lt;String, Object&gt; args);
    +    
    +    /**
    +     * Execute the administrative action.
    +     */
    +    void execute() throws Exception;
    +    void setId(Long id);
    +    
    +    /**
    +     * Return true if the action status is marked as Error.
    +     */
    +    boolean hasErrors();
    +    
    +    @XmlElement(name=&quot;id&quot;)
    +    Long id();
    +    
    +    @XmlElement(name=&quot;args&quot;)
    +    Map&lt;String, Object&gt; args();
    +    
    +    @XmlElement(name=&quot;mnemonic&quot;)
    +    String mnemonic();
    +    
    +    @XmlElement(name=&quot;descr&quot;)
    +    String descr();
    +    
    +    @XmlElement(name=&quot;results&quot;)
    +    Map&lt;String, Object&gt; results();
    +    
    +    @XmlElement(name=&quot;errors&quot;)
    +    Map&lt;String, Object&gt; errors();
    +    
    +    @XmlElement(name=&quot;warn&quot;)
    +    Map&lt;String, Object&gt; warnings();
    +    
    +    @XmlElement(name=&quot;status&quot;)
    +    AdminActionStatus status();
    +    
    +<span class="fc" id="L96">    public enum AdminActionStatus {</span>
    +<span class="fc" id="L97">        CREATED,</span>
    +<span class="fc" id="L98">        EXECUTING,</span>
    +<span class="fc" id="L99">        FINISHED,</span>
    +<span class="fc" id="L100">        ERROR,</span>
    +<span class="fc" id="L101">        UNKNOWN</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminActionBase.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminActionBase.html
    new file mode 100644
    index 000000000..686311eb0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminActionBase.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminActionBase</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.admin</a> &gt; <span class="el_class">AdminActionBase</span></div><h1>AdminActionBase</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">169 of 260</td><td class="ctr2">35%</td><td class="bar">21 of 28</td><td class="ctr2">25%</td><td class="ctr1">24</td><td class="ctr2">36</td><td class="ctr1">41</td><td class="ctr2">70</td><td class="ctr1">10</td><td class="ctr2">21</td></tr></tfoot><tbody><tr><td id="a18"><a href="AdminActionBase.java.html#L156" class="el_method">toString()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="42" alt="42"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="AdminActionBase.java.html#L111" class="el_method">error(Exception)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="54" height="10" title="19" alt="19"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="AdminActionBase.java.html#L131" class="el_method">changeStatus(AdminAction.AdminActionStatus)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="51" height="10" title="18" alt="18"/><img src="../../../.resources/greenbar.gif" width="48" height="10" title="17" alt="17"/></td><td class="ctr2" id="c10">49%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="84" height="10" title="7" alt="7"/><img src="../../../.resources/greenbar.gif" width="36" height="10" title="3" alt="3"/></td><td class="ctr2" id="e3">30%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="AdminActionBase.java.html#L120" class="el_method">log(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="51" height="10" title="18" alt="18"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="AdminActionBase.java.html#L125" class="el_method">debug(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="51" height="10" title="18" alt="18"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a19"><a href="AdminActionBase.java.html#L53" class="el_method">warn(String, Object)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="42" height="10" title="15" alt="15"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="AdminActionBase.java.html#L80" class="el_method">addArg(String, Object)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="42" height="10" title="15" alt="15"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h4">4</td><td class="ctr2" id="i6">4</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="AdminActionBase.java.html#L97" class="el_method">hasErrors()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h7">3</td><td class="ctr2" id="i10">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="AdminActionBase.java.html#L20" class="el_method">AdminActionBase()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="17" height="10" title="6" alt="6"/><img src="../../../.resources/greenbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c9">57%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="12" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="12" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a15"><a href="AdminActionBase.java.html#L87" class="el_method">setArgs(Map)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="AdminActionBase.java.html#L70" class="el_method">args()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a20"><a href="AdminActionBase.java.html#L75" class="el_method">warnings()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a6"><a href="AdminActionBase.java.html#L103" class="el_method">error(String, Object)</a></td><td class="bar" id="b12"><img src="../../../.resources/greenbar.gif" width="65" height="10" title="23" alt="23"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="12" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="12" height="10" title="1" alt="1"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a13"><a href="AdminActionBase.java.html#L47" class="el_method">result(String, Object)</a></td><td class="bar" id="b13"><img src="../../../.resources/greenbar.gif" width="42" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d9"><img src="../../../.resources/greenbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i7">4</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a9"><a href="AdminActionBase.java.html#L42" class="el_method">finished(String)</a></td><td class="bar" id="b14"><img src="../../../.resources/greenbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i11">3</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a16"><a href="AdminActionBase.java.html#L33" class="el_method">setId(Long)</a></td><td class="bar" id="b15"><img src="../../../.resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a8"><a href="AdminActionBase.java.html#L38" class="el_method">execute()</a></td><td class="bar" id="b16"><img src="../../../.resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i14">2</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a11"><a href="AdminActionBase.java.html#L28" class="el_method">id()</a></td><td class="bar" id="b17"><img src="../../../.resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a7"><a href="AdminActionBase.java.html#L60" class="el_method">errors()</a></td><td class="bar" id="b18"><img src="../../../.resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">0</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">0</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a14"><a href="AdminActionBase.java.html#L65" class="el_method">results()</a></td><td class="bar" id="b19"><img src="../../../.resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">0</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">0</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">0</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a17"><a href="AdminActionBase.java.html#L92" class="el_method">status()</a></td><td class="bar" id="b20"><img src="../../../.resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">0</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">0</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">0</td><td class="ctr2" id="k20">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminActionBase.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminActionBase.java.html
    new file mode 100644
    index 000000000..f92174533
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/AdminActionBase.java.html
    @@ -0,0 +1,164 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminActionBase.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.admin</a> &gt; <span class="el_source">AdminActionBase.java</span></div><h1>AdminActionBase.java</h1><pre class="source lang-java linenums">package eu.sqooss.service.admin;
    +
    +import java.util.HashMap;
    +import java.util.Map;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.logging.Logger;
    +
    +public abstract class AdminActionBase implements AdminAction {
    +
    +    protected Map&lt;String, Object&gt; result;
    +    protected Map&lt;String, Object&gt; error;
    +    protected Map&lt;String, Object&gt; args;
    +    protected Map&lt;String, Object&gt; warnings;
    +    protected AdminActionStatus status;
    +    protected Long id;
    +
    +    protected Logger log;
    +    
    +<span class="fc" id="L20">    protected AdminActionBase() {</span>
    +<span class="fc" id="L21">        status = AdminActionStatus.CREATED;</span>
    +<span class="pc bpc" id="L22" title="1 of 2 branches missed.">        if (AlitheiaCore.getInstance() != null)</span>
    +<span class="nc" id="L23">            log = AlitheiaCore.getInstance().getLogManager().createLogger(&quot;sqooss.admin&quot;);</span>
    +<span class="fc" id="L24">    }</span>
    +
    +    @Override
    +    public Long id() {
    +<span class="fc" id="L28">        return id;</span>
    +    }
    +
    +    @Override
    +    public void setId(Long id) {
    +<span class="fc" id="L33">        this.id = id;</span>
    +<span class="fc" id="L34">    }</span>
    +    
    +    @Override
    +    public void execute() throws Exception {
    +<span class="fc" id="L38">        status = AdminActionStatus.EXECUTING;</span>
    +<span class="fc" id="L39">    }</span>
    +    
    +    public final void finished(String results) {
    +<span class="fc" id="L42">        status = AdminActionStatus.FINISHED;</span>
    +<span class="fc" id="L43">        result(&quot;result&quot;, results);</span>
    +<span class="fc" id="L44">    }</span>
    +    
    +    public final void result (String key, Object value) {
    +<span class="fc bfc" id="L47" title="All 2 branches covered.">        if (result == null)</span>
    +<span class="fc" id="L48">            result = new HashMap&lt;String, Object&gt;();</span>
    +<span class="fc" id="L49">        result.put(key, value);</span>
    +<span class="fc" id="L50">    }</span>
    +    
    +    public final void warn (String key, Object value) {
    +<span class="nc bnc" id="L53" title="All 2 branches missed.">        if (warnings == null)</span>
    +<span class="nc" id="L54">            warnings = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L55">        warnings.put(key, value);</span>
    +<span class="nc" id="L56">    }</span>
    +    
    +    @Override
    +    public final Map&lt;String, Object&gt; errors() {
    +<span class="fc" id="L60">        return error;</span>
    +    }
    +    
    +    @Override
    +    public final Map&lt;String, Object&gt; results() {
    +<span class="fc" id="L65">        return result;</span>
    +    }
    +    
    +    @Override
    +    public final Map&lt;String, Object&gt; args() {
    +<span class="nc" id="L70">        return args;</span>
    +    }
    +    
    +    @Override
    +    public final Map&lt;String, Object&gt; warnings() {
    +<span class="nc" id="L75">        return args;</span>
    +    }
    +    
    +    @Override
    +    public final void addArg(String key, Object value) {
    +<span class="nc bnc" id="L80" title="All 2 branches missed.">    	if (args == null)</span>
    +<span class="nc" id="L81">    		args = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L82">    	args.put(key, value);</span>
    +<span class="nc" id="L83">    }</span>
    +    
    +    @Override
    +    public final void setArgs(Map&lt;String, Object&gt; args) {
    +<span class="nc" id="L87">        this.args = args;</span>
    +<span class="nc" id="L88">    }</span>
    +    
    +    @Override
    +    public final AdminActionStatus status() {
    +<span class="fc" id="L92">        return status;</span>
    +    }
    +    
    +    @Override
    +    public boolean hasErrors()  {
    +<span class="nc bnc" id="L97" title="All 2 branches missed.">    	if (status == AdminActionStatus.ERROR)</span>
    +<span class="nc" id="L98">    		return true;</span>
    +<span class="nc" id="L99">    	return false;	</span>
    +    }
    +    
    +    protected final void error(String key, Object o) throws Exception {
    +<span class="pc bpc" id="L103" title="1 of 2 branches missed.">        if (error == null)</span>
    +<span class="fc" id="L104">            error = new HashMap&lt;String, Object&gt;();</span>
    +<span class="fc" id="L105">        error.put(key, o);</span>
    +<span class="fc" id="L106">        changeStatus(AdminActionStatus.ERROR);</span>
    +<span class="fc" id="L107">        throw new Exception(o.toString());</span>
    +    }
    +
    +    protected final void error(Exception e) throws Exception {
    +<span class="nc bnc" id="L111" title="All 2 branches missed.">        if (error == null)</span>
    +<span class="nc" id="L112">            error = new HashMap&lt;String, Object&gt;();</span>
    +<span class="nc" id="L113">        error.put(&quot;exception&quot;, e);</span>
    +        
    +<span class="nc" id="L115">        changeStatus(AdminActionStatus.ERROR);</span>
    +<span class="nc" id="L116">        throw e;</span>
    +    }
    +
    +    protected void log(String msg) {
    +<span class="nc bnc" id="L120" title="All 2 branches missed.">        if (log != null)</span>
    +<span class="nc" id="L121">            log.info(mnemonic() + &quot;:&quot; + msg);</span>
    +<span class="nc" id="L122">    }</span>
    +    
    +    protected void debug(String msg) {
    +<span class="nc bnc" id="L125" title="All 2 branches missed.">        if (log != null)</span>
    +<span class="nc" id="L126">            log.debug(mnemonic() + &quot;:&quot; + msg);</span>
    +<span class="nc" id="L127">    }</span>
    +
    +
    +    private synchronized void changeStatus(AdminActionStatus st) {
    +<span class="pc bpc" id="L131" title="3 of 4 branches missed.">        switch (status) {</span>
    +        case CREATED:
    +<span class="nc bnc" id="L133" title="All 2 branches missed.">            if (st == AdminActionStatus.EXECUTING) {</span>
    +<span class="nc" id="L134">                status = st;</span>
    +<span class="nc" id="L135">            } else {</span>
    +<span class="nc" id="L136">                status = AdminActionStatus.UNKNOWN;   </span>
    +            }
    +<span class="nc" id="L138">            break;</span>
    +        case EXECUTING:
    +<span class="pc bpc" id="L140" title="2 of 4 branches missed.">            if (st == AdminActionStatus.FINISHED || st == AdminActionStatus.ERROR) {</span>
    +<span class="fc" id="L141">                status = st;</span>
    +<span class="fc" id="L142">            } else {</span>
    +<span class="nc" id="L143">                status = AdminActionStatus.UNKNOWN;</span>
    +            }
    +<span class="nc" id="L145">            break;</span>
    +        case FINISHED:
    +<span class="nc" id="L147">            status = AdminActionStatus.UNKNOWN;</span>
    +            break;
    +        case ERROR:
    +        case UNKNOWN:
    +        }
    +<span class="fc" id="L152">    }</span>
    +    
    +    @Override
    +    public String toString() {
    +<span class="nc" id="L156">        String msg = &quot;&quot;;</span>
    +<span class="nc" id="L157">        msg += &quot;args: &quot;;</span>
    +<span class="nc" id="L158">        msg += args;</span>
    +<span class="nc" id="L159">        msg += &quot;, status:&quot;;</span>
    +<span class="nc" id="L160">        msg += status();</span>
    +<span class="nc" id="L161">        return msg;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/index.html
    new file mode 100644
    index 000000000..bd2fd3457
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.admin</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.admin</span></div><h1>eu.sqooss.service.admin</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">174 of 340</td><td class="ctr2">49%</td><td class="bar">21 of 28</td><td class="ctr2">25%</td><td class="ctr1">25</td><td class="ctr2">40</td><td class="ctr1">41</td><td class="ctr2">77</td><td class="ctr1">11</td><td class="ctr2">25</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="AdminActionBase.html" class="el_class">AdminActionBase</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="78" height="10" title="169" alt="169"/><img src="../../../.resources/greenbar.gif" width="42" height="10" title="91" alt="91"/></td><td class="ctr2" id="c1">35%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="90" height="10" title="21" alt="21"/><img src="../../../.resources/greenbar.gif" width="30" height="10" title="7" alt="7"/></td><td class="ctr2" id="e0">25%</td><td class="ctr1" id="f0">24</td><td class="ctr2" id="g0">36</td><td class="ctr1" id="h0">41</td><td class="ctr2" id="i0">70</td><td class="ctr1" id="j0">10</td><td class="ctr2" id="k0">21</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="AdminAction$AdminActionStatus.html" class="el_class">AdminAction.AdminActionStatus</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="2" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="34" height="10" title="75" alt="75"/></td><td class="ctr2" id="c0">94%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/index.source.html
    new file mode 100644
    index 000000000..1d6da68a5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.admin/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.admin</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.admin</span></div><h1>eu.sqooss.service.admin</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">174 of 340</td><td class="ctr2">49%</td><td class="bar">21 of 28</td><td class="ctr2">25%</td><td class="ctr1">25</td><td class="ctr2">40</td><td class="ctr1">41</td><td class="ctr2">77</td><td class="ctr1">11</td><td class="ctr2">25</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="AdminActionBase.java.html" class="el_source">AdminActionBase.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="78" height="10" title="169" alt="169"/><img src="../../../.resources/greenbar.gif" width="42" height="10" title="91" alt="91"/></td><td class="ctr2" id="c1">35%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="90" height="10" title="21" alt="21"/><img src="../../../.resources/greenbar.gif" width="30" height="10" title="7" alt="7"/></td><td class="ctr2" id="e0">25%</td><td class="ctr1" id="f0">24</td><td class="ctr2" id="g0">36</td><td class="ctr1" id="h0">41</td><td class="ctr2" id="i0">70</td><td class="ctr1" id="j0">10</td><td class="ctr2" id="k0">21</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="AdminAction.java.html" class="el_source">AdminAction.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="2" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="34" height="10" title="75" alt="75"/></td><td class="ctr2" id="c0">94%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeActionException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeActionException.html
    new file mode 100644
    index 000000000..ff3de7d4e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeActionException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ClusterNodeActionException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.cluster</a> &gt; <span class="el_class">ClusterNodeActionException</span></div><h1>ClusterNodeActionException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="ClusterNodeActionException.java.html#L50" class="el_method">getMessage()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="ClusterNodeActionException.java.html#L46" class="el_method">ClusterNodeActionException(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="40" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="ClusterNodeActionException.java.html#L43" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeActionException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeActionException.java.html
    new file mode 100644
    index 000000000..f6b720048
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeActionException.java.html
    @@ -0,0 +1,53 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ClusterNodeActionException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.cluster</a> &gt; <span class="el_source">ClusterNodeActionException.java</span></div><h1>ClusterNodeActionException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.cluster;
    +
    +/**
    + * Base class for updater exceptions.
    + */
    +public class ClusterNodeActionException extends Exception {
    +
    +    private static final long serialVersionUID = 1L;
    +
    +<span class="nc" id="L43">    private static String service = &quot;[ClusterNode]&quot;;</span>
    +
    +    public ClusterNodeActionException(String message) {
    +<span class="nc" id="L46">        super(message);</span>
    +<span class="nc" id="L47">    }</span>
    +
    +    public String getMessage() {
    +<span class="nc" id="L50">        return service + &quot; &quot; + super.getMessage();</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeService$ClusterNodeAction.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeService$ClusterNodeAction.html
    new file mode 100644
    index 000000000..b767b7042
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeService$ClusterNodeAction.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ClusterNodeService.ClusterNodeAction</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.cluster</a> &gt; <span class="el_class">ClusterNodeService.ClusterNodeAction</span></div><h1>ClusterNodeService.ClusterNodeAction</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">88 of 88</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">12</td><td class="ctr2">12</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a1"><a href="ClusterNodeService.java.html#L70" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="ClusterNodeService.java.html#L79" class="el_method">toStringArray()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="98" height="10" title="28" alt="28"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="ClusterNodeService.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="56" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ClusterNodeService.java.html#L70" class="el_method">ClusterNodeService.ClusterNodeAction(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="ClusterNodeService.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeService.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeService.java.html
    new file mode 100644
    index 000000000..93113c05f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/ClusterNodeService.java.html
    @@ -0,0 +1,110 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ClusterNodeService.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.cluster</a> &gt; <span class="el_source">ClusterNodeService.java</span></div><h1>ClusterNodeService.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.cluster;
    +
    +
    +import eu.sqooss.core.AlitheiaCoreService;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.db.ClusterNode;
    +
    +/**
    + * The clusternode service is the gateway in Alitheia to control the clusternode
    + * in means of assigning a project on that node, and getting core information
    + * The clusternode service offers an HTTP interface to prompt the system. The URL
    + * supported by the clusternode service lives underneath the web administration
    + * site (which is localhost:8088 in the default Alitheia installation)
    + * as /clusternode. Actions are controlled through the value of the GET
    + * parameter action; Each action accepts parameters described bellow.
    + * The acceptable values of action are taken from the ClusterNodeAction enum.
    + * Sample clusternode URLs are:
    + *
    + *  http://localhost:8088/clusternode?action=xxx&amp;param=yyyy
    + *  
    + * Note that action values are not case-sensitive, though they must match 
    + * exactly the enum names.
    + *
    + * The rest of the interface contains implementation parts which typically
    + * won't be called from code; it would be unusual for an internal part
    + * of the system to call the clusternode, as it is intended as a way to poke
    + * the system from the outside.
    + */
    +public interface ClusterNodeService extends AlitheiaCoreService {
    +
    +    /**
    +     * Targets for an action over a ClusterNode. 
    +     * These names are used in the &lt;webadmin&gt;/clusternode  URLs (case-insensitive) 
    +     * and in the rest of the system code.
    +     *
    +     */
    +<span class="nc" id="L70">    public enum ClusterNodeAction {</span>
    +<span class="nc" id="L71">        /** Request to show assigned projects */</span>
    +<span class="nc" id="L72">        GET_ASSIGNED_PROJECTS,</span>
    +<span class="nc" id="L73">        /** Request to show known ClusterNode names */</span>
    +<span class="nc" id="L74">        GET_KNOWN_SERVERS,</span>
    +<span class="nc" id="L75">        /** Request to assign a project*/</span>
    +<span class="nc" id="L76">        ASSIGN_PROJECT;</span>
    +        
    +        public static String[] toStringArray() {
    +<span class="nc" id="L79">            String[] actions = new String[ClusterNodeAction.values().length];</span>
    +<span class="nc bnc" id="L80" title="All 2 branches missed.">            for (ClusterNodeAction a : ClusterNodeAction.values()) {</span>
    +<span class="nc" id="L81">               actions[a.ordinal()] = a.toString();</span>
    +            }
    +
    +<span class="nc" id="L84">            return actions;</span>
    +        }
    +    }
    +
    +    
    + 
    +    
    +    // return this Node's name
    +    String getClusterNodeName();
    +    
    +    // assign a project to this ClusterNode
    +    boolean assignProject(StoredProject project) throws ClusterNodeActionException;
    +
    +    // assign a project to that ClusterNode
    +    boolean assignProject(ClusterNode node, StoredProject project) throws ClusterNodeActionException;
    +
    +
    +    /**
    +     * Check if project is assigned to this ClusterNode
    +     * @param project the project to check
    +     * @return true if project is assigned to this Cluster Node
    +     */
    +    boolean isProjectAssigned(StoredProject project);
    +
    +
    +  }
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/index.html
    new file mode 100644
    index 000000000..607793b58
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.cluster</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.cluster</span></div><h1>eu.sqooss.service.cluster</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">107 of 107</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="ClusterNodeService$ClusterNodeAction.html" class="el_class">ClusterNodeService.ClusterNodeAction</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="88" alt="88"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">12</td><td class="ctr2" id="i0">12</td><td class="ctr1" id="j0">5</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="ClusterNodeActionException.html" class="el_class">ClusterNodeActionException</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="25" height="10" title="19" alt="19"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">3</td><td class="ctr2" id="k1">3</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/index.source.html
    new file mode 100644
    index 000000000..8f7258b78
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.cluster/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.cluster</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.cluster</span></div><h1>eu.sqooss.service.cluster</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">107 of 107</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="ClusterNodeService.java.html" class="el_source">ClusterNodeService.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="88" alt="88"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">12</td><td class="ctr2" id="i0">12</td><td class="ctr1" id="j0">5</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="ClusterNodeActionException.java.html" class="el_source">ClusterNodeActionException.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="25" height="10" title="19" alt="19"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">3</td><td class="ctr2" id="k1">3</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/BugDBEvent.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/BugDBEvent.html
    new file mode 100644
    index 000000000..6668a71d2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/BugDBEvent.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BugDBEvent</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">BugDBEvent</span></div><h1>BugDBEvent</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="BugDBEvent.java.html#L43" class="el_method">BugDBEvent(long, Bug)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="BugDBEvent.java.html#L52" class="el_method">getAssociatedDAO()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="53" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="BugDBEvent.java.html#L64" class="el_method">getEventId()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="53" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="BugDBEvent.java.html#L59" class="el_method">getEventPriority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="26" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/BugDBEvent.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/BugDBEvent.java.html
    new file mode 100644
    index 000000000..4b1889e52
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/BugDBEvent.java.html
    @@ -0,0 +1,69 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BugDBEvent.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">BugDBEvent.java</span></div><h1>BugDBEvent.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +import eu.sqooss.service.db.Bug;
    +
    +/**
    + * Data transfer object for bug database events
    + */
    +public class BugDBEvent extends ProjectEvent {
    +    
    +<span class="nc" id="L43">    public BugDBEvent(long ts, Bug dao) {</span>
    +<span class="nc" id="L44">        this.timestamp = ts;</span>
    +<span class="nc" id="L45">        this.associatedDAO = dao;</span>
    +<span class="nc" id="L46">    }</span>
    +    
    +    /**
    +     * @return the associatedDAO
    +     */
    +    public Bug getAssociatedDAO() {
    +<span class="nc" id="L52">        return (Bug) associatedDAO;</span>
    +    }
    +    
    +    /**
    +     * @return 2, the priority for bug events
    +     */
    +    public int getEventPriority() {
    +<span class="nc" id="L59">        return 2;</span>
    +    }
    +
    +    protected long getEventId() {
    +        // Bug has no Bug-Id (?)
    +<span class="nc" id="L64">        return getAssociatedDAO().getId();</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/CheckoutException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/CheckoutException.html
    new file mode 100644
    index 000000000..e50f7fac1
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/CheckoutException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CheckoutException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">CheckoutException</span></div><h1>CheckoutException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="CheckoutException.java.html#L43" class="el_method">CheckoutException(String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/CheckoutException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/CheckoutException.java.html
    new file mode 100644
    index 000000000..e1985b704
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/CheckoutException.java.html
    @@ -0,0 +1,49 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CheckoutException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">CheckoutException.java</span></div><h1>CheckoutException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +/**
    + * Exception thrown when there is an error while constructing, updating
    + * or releasing an FDS checkout.
    + */
    +public class CheckoutException extends FDSException {
    +
    +    public CheckoutException(String message) {
    +<span class="nc" id="L43">        super(message);</span>
    +<span class="nc" id="L44">    }</span>
    +
    +    private static final long serialVersionUID = 1L;
    +
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FDSException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FDSException.html
    new file mode 100644
    index 000000000..1b03e7a1d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FDSException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FDSException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">FDSException</span></div><h1>FDSException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="FDSException.java.html#L50" class="el_method">getMessage()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="FDSException.java.html#L46" class="el_method">FDSException(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="40" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="FDSException.java.html#L43" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FDSException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FDSException.java.html
    new file mode 100644
    index 000000000..ee05234f9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FDSException.java.html
    @@ -0,0 +1,55 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FDSException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">FDSException.java</span></div><h1>FDSException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +/**
    + * This is the base class of exceptions thrown by the FDS.
    + * It is mainly here to group together the exceptions
    + * thrown by the service.
    + */
    +public class FDSException extends Exception {
    +    private static final long serialVersionUID = 1L;
    +<span class="nc" id="L43">    private static String service = &quot;[FDS]&quot;;</span>
    +
    +    public FDSException(String message) {
    +<span class="nc" id="L46">        super(message);</span>
    +<span class="nc" id="L47">    }</span>
    +
    +    public String getMessage() {
    +<span class="nc" id="L50">        return service + &quot; &quot; + super.getMessage();</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher$FileType.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher$FileType.html
    new file mode 100644
    index 000000000..6ee4006e5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher$FileType.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FileTypeMatcher.FileType</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">FileTypeMatcher.FileType</span></div><h1>FileTypeMatcher.FileType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">90 of 90</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="FileTypeMatcher.java.html#L78" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="64" alt="64"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="FileTypeMatcher.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="30" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="FileTypeMatcher.java.html#L78" class="el_method">FileTypeMatcher.FileType(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="FileTypeMatcher.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher.html
    new file mode 100644
    index 000000000..bdee0e08b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FileTypeMatcher</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">FileTypeMatcher</span></div><h1>FileTypeMatcher</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,211 of 1,211</td><td class="ctr2">0%</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">99</td><td class="ctr2">99</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a8"><a href="FileTypeMatcher.java.html#L47" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,005" alt="1,005"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="100" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h0">47</td><td class="ctr2" id="i0">47</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="FileTypeMatcher.java.html#L185" class="el_method">getFileExtension(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="9" height="10" title="82" alt="82"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h1">19</td><td class="ctr2" id="i1">19</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="FileTypeMatcher.java.html#L52" class="el_method">FileTypeMatcher()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="6" height="10" title="51" alt="51"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h2">10</td><td class="ctr2" id="i2">10</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="FileTypeMatcher.java.html#L233" class="el_method">getFileType(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="3" height="10" title="26" alt="26"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="60" height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h3">9</td><td class="ctr2" id="i3">9</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="FileTypeMatcher.java.html#L284" class="el_method">isSourceFile(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="1" height="10" title="12" alt="12"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">4</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="FileTypeMatcher.java.html#L270" class="el_method">isBinaryType(String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="1" height="10" title="10" alt="10"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="FileTypeMatcher.java.html#L300" class="el_method">getFileTypeFromExt(String)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="1" height="10" title="9" alt="9"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a4"><a href="FileTypeMatcher.java.html#L66" class="el_method">getInstance()</a></td><td class="bar" id="b7"/><td class="ctr2" id="c7">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h7">3</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="FileTypeMatcher.java.html#L258" class="el_method">isTextType(String)</a></td><td class="bar" id="b8"/><td class="ctr2" id="c8">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher.java.html
    new file mode 100644
    index 000000000..283b551a0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/FileTypeMatcher.java.html
    @@ -0,0 +1,307 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FileTypeMatcher.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">FileTypeMatcher.java</span></div><h1>FileTypeMatcher.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +import java.lang.StringBuffer;
    +import java.util.HashMap;
    +import java.util.regex.Pattern;
    +
    +/**
    + * A simple, file extension based, file type matcher class. It uses a set of
    + * statically loaded look-up tables and string comparisons to do its job.
    + */
    +public final class FileTypeMatcher {
    +
    +	private static FileTypeMatcher instance;
    +<span class="nc" id="L47">	private static HashMap&lt;String, FileType&gt; lookupTable = new HashMap&lt;String, FileType&gt;();</span>
    +
    +	private static Pattern doc;
    +	private static Pattern locale;
    +	
    +<span class="nc" id="L52">	private FileTypeMatcher() {</span>
    +<span class="nc" id="L53">		StringBuffer pattern = new StringBuffer();</span>
    +<span class="nc" id="L54">		pattern.append(&quot;.*\\.(&quot;);</span>
    +<span class="nc bnc" id="L55" title="All 2 branches missed.">		for(String doc : docMimes) {</span>
    +<span class="nc" id="L56">			pattern.append(doc).append(&quot;|&quot;);</span>
    +		}
    +<span class="nc" id="L58">		pattern.deleteCharAt(pattern.length() - 1);</span>
    +<span class="nc" id="L59">		pattern.append(&quot;)$&quot;);</span>
    +		
    +<span class="nc" id="L61">		doc = Pattern.compile(pattern.toString());</span>
    +<span class="nc" id="L62">		locale = Pattern.compile(locales);</span>
    +<span class="nc" id="L63">	}</span>
    +
    +	public static FileTypeMatcher getInstance() {
    +<span class="nc bnc" id="L66" title="All 2 branches missed.">		if (instance == null) {</span>
    +<span class="nc" id="L67">			instance = new FileTypeMatcher();</span>
    +		}
    +<span class="nc" id="L69">		return instance;</span>
    +	}
    +
    +	/**
    +	 * File types enumeration. These are the distinguished types of files that
    +	 * Alitheia works with. The list is clearly not exhaustive nor complete;
    +	 * some file types could easily be put in one or the other category (e.g.
    +	 * XML docbook) and some obvious file types are missing.
    +	 */
    +<span class="nc" id="L78">	public enum FileType {</span>
    +<span class="nc" id="L79">		/**</span>
    +		 * Source code files
    +		 */
    +<span class="nc" id="L82">		SRC,</span>
    +<span class="nc" id="L83">		/**</span>
    +		 * Binary files
    +		 */
    +<span class="nc" id="L86">		BIN,</span>
    +<span class="nc" id="L87">		/**</span>
    +		 * Documentation files
    +		 */
    +<span class="nc" id="L90">		DOC,</span>
    +<span class="nc" id="L91">		/**</span>
    +		 * XML file formats
    +		 */
    +<span class="nc" id="L94">		XML,</span>
    +<span class="nc" id="L95">		/**</span>
    +		 * Raw text files. Includes all non-binary files.
    +		 */
    +<span class="nc" id="L98">		TXT,</span>
    +<span class="nc" id="L99">		/**</span>
    +		 * Translation files
    +		 */
    +<span class="nc" id="L102">		TRANS</span>
    +	}
    +
    +<span class="nc" id="L105">	private static String[] srcMimes = { &quot;.C&quot;, &quot;.CBL&quot;, &quot;.COB&quot;, &quot;.F&quot;, &quot;.S&quot;,</span>
    +<span class="nc" id="L106">			&quot;.ad&quot;, &quot;.ada&quot;, &quot;.adb&quot;, &quot;.ads&quot;, &quot;.am&quot;, &quot;.asm&quot;, &quot;.asp&quot;, &quot;.aspx&quot;,</span>
    +<span class="nc" id="L107">			&quot;.atf&quot;, &quot;.autoforms&quot;, &quot;.awk&quot;, &quot;.bas&quot;, &quot;.bat&quot;, &quot;.c&quot;, &quot;.c++&quot;, &quot;.cbl&quot;,</span>
    +<span class="nc" id="L108">			&quot;.cc&quot;, &quot;.ccg&quot;, &quot;.cgi&quot;, &quot;.cls&quot;, &quot;.cob&quot;, &quot;.cpp&quot;, &quot;.cpy&quot;, &quot;.cs&quot;,</span>
    +<span class="nc" id="L109">			&quot;.csh&quot;, &quot;.css&quot;, &quot;.cxx&quot;, &quot;.d&quot;, &quot;.diff&quot;, &quot;.dlg&quot;, &quot;.dsp&quot;, &quot;.dtd&quot;,</span>
    +<span class="nc" id="L110">			&quot;.e&quot;, &quot;.ec&quot;, &quot;.ecp&quot;, &quot;.el&quot;, &quot;.exp&quot;, &quot;.f&quot;, &quot;.f77&quot;, &quot;.fd&quot;, &quot;.for&quot;,</span>
    +<span class="nc" id="L111">			&quot;.gnorba&quot;, &quot;.h&quot;, &quot;.hg&quot;, &quot;.hh&quot;, &quot;.hpp&quot;, &quot;.hs&quot;, &quot;.hxx&quot;,</span>
    +<span class="nc" id="L112">			&quot;.i&quot;, &quot;.i3&quot;, &quot;.idl&quot;, &quot;.ids&quot;, &quot;.inc&quot;, &quot;.itk&quot;, &quot;.java&quot;, &quot;.jl&quot;, &quot;.js&quot;,</span>
    +<span class="nc" id="L113">			&quot;.jsp&quot;, &quot;.l&quot;, &quot;.lex&quot;, &quot;.ll&quot;, &quot;.lsp&quot;, &quot;.m&quot;, &quot;.m3&quot;, &quot;.m4&quot;, &quot;.ml&quot;,</span>
    +<span class="nc" id="L114">			&quot;.ml3&quot;, &quot;.p&quot;, &quot;.pad&quot;, &quot;.pas&quot;, &quot;.patch&quot;, &quot;.pc&quot;, &quot;.pcc&quot;, &quot;.perl&quot;,</span>
    +<span class="nc" id="L115">			&quot;.php&quot;, &quot;.php3&quot;, &quot;.php4&quot;, &quot;.pl&quot;, &quot;.plot&quot;, &quot;.plugin&quot;, &quot;.pm&quot;, &quot;.pod&quot;,</span>
    +<span class="nc" id="L116">			&quot;.ppd&quot;, &quot;.pri&quot;, &quot;.pro&quot;, &quot;.py&quot;, &quot;.rb&quot;, &quot;.s&quot;, &quot;.schema&quot;, &quot;.scm&quot;,</span>
    +<span class="nc" id="L117">			&quot;.sed&quot;, &quot;.sh&quot;, &quot;.sql&quot;, &quot;.tcl&quot;, &quot;.tk&quot;, &quot;.trm&quot;, &quot;.upd&quot;, &quot;.vb&quot;,</span>
    +<span class="nc" id="L118">			&quot;.vbs&quot;, &quot;.vim&quot;, &quot;.xs&quot;, &quot;.xsl&quot;, &quot;.y&quot;, &quot;.yy&quot;, &quot;.scala&quot;};</span>
    +
    +<span class="nc" id="L120">	private static String[] docMimes = { &quot;readme.*&quot;, &quot;changelog.*&quot;, &quot;todo.*&quot;,</span>
    +<span class="nc" id="L121">			&quot;credits.*&quot;, &quot;authors.*&quot;, &quot;changes.*&quot;, &quot;news.*&quot;, &quot;install.*&quot;,</span>
    +<span class="nc" id="L122">			&quot;hacking.*&quot;, &quot;copyright.*&quot;, &quot;licen[sc]e.*&quot;, &quot;copying.*&quot;,</span>
    +<span class="nc" id="L123">			&quot;manifest&quot;, &quot;faq&quot;, &quot;building&quot;, &quot;howto&quot;, &quot;design&quot;, &quot;�les&quot;,</span>
    +<span class="nc" id="L124">			&quot;subdirs&quot;, &quot;maintainers&quot;, &quot;developers&quot;, &quot;contributors&quot;, &quot;thanks&quot;,</span>
    +<span class="nc" id="L125">			&quot;testing&quot;, &quot;build&quot;, &quot;comments?&quot;, &quot;bugs&quot;, &quot;buglist&quot;, &quot;problems&quot;,</span>
    +<span class="nc" id="L126">			&quot;debug&quot;, &quot;hacks&quot;, &quot;hacking&quot;, &quot;versions?&quot;, &quot;mappings&quot;, &quot;tips&quot;,</span>
    +<span class="nc" id="L127">			&quot;ideas?&quot;, &quot;spec&quot;, &quot;compiling&quot;, &quot;notes&quot;, &quot;missing&quot;, &quot;done&quot;, &quot;omf&quot;,</span>
    +<span class="nc" id="L128">			&quot;lsm&quot;, &quot;directory&quot;, &quot;dox&quot;, &quot;html&quot;, &quot;txt&quot;, &quot;lyx&quot;, &quot;tex&quot;,</span>
    +<span class="nc" id="L129">			&quot;tex&quot;, &quot;sgml&quot;, &quot;docbook&quot;, &quot;xhtml&quot;, &quot;phtml&quot;, &quot;shtml&quot;, &quot;htm&quot;,</span>
    +<span class="nc" id="L130">			&quot;rdf&quot;, &quot;phtm&quot;, &quot;ref&quot;, &quot;css&quot;, &quot;dsl&quot;, &quot;ent&quot;, &quot;xml&quot;, &quot;xsl&quot;,</span>
    +<span class="nc" id="L131">			&quot;.gnuplot&quot;, </span>
    +<span class="nc" id="L132">			&quot;entities&quot;, &quot;man&quot;, &quot;manpages&quot;, &quot;man\\.[0-9]+&quot;, &quot;docs$&quot; };</span>
    +
    +<span class="nc" id="L134">	private static String[] xmlFormats = { &quot;.xml&quot;, &quot;.svn&quot;, &quot;.argo&quot;, &quot;.graffle&quot;,</span>
    +<span class="nc" id="L135">			&quot;.vcproj&quot;, &quot;.csproj&quot;, &quot;.rdf&quot;, &quot;.wsdl&quot;, &quot;.pom&quot;, &quot;.omf&quot; };</span>
    +
    +<span class="nc" id="L137">	private static String[] binMimes = { &quot;.pdf&quot;, &quot;.png&quot;, &quot;.jpg&quot;, &quot;.tiff&quot;,</span>
    +<span class="nc" id="L138">			&quot;.dvi&quot;, &quot;.gz&quot;, &quot;.zip&quot;, &quot;.gif&quot;, &quot;.exe&quot;, &quot;.jar&quot;, &quot;.doc&quot;, &quot;.png&quot;,</span>
    +<span class="nc" id="L139">			&quot;.o&quot;, &quot;.class&quot;, &quot;.pyc&quot;, &quot;.bmp&quot;, &quot;.ico&quot;, &quot;.bz2&quot;, &quot;.jpeg&quot;, &quot;.war&quot;,</span>
    +<span class="nc" id="L140">			&quot;.tif&quot;, &quot;.ppt&quot;, &quot;.xls&quot;, &quot;.mp3&quot;, &quot;.wmf&quot;, &quot;.gif&quot;, &quot;.dll&quot;, &quot;.so&quot; };</span>
    +
    +<span class="nc" id="L142">	private static String[] transMimes = { &quot;.po&quot; };</span>
    +
    +	private static final String locales = &quot;ar_SA|zh_CN|zh_TW|nl_NL|en_AU|en_CA|&quot;
    +			+ &quot;en_GB|en_US|fr_CA|fr_FR|de_DE|iw_IL|hi_IN|it_IT|ja_JP|ko_KR|&quot;
    +			+ &quot;pt_BR|es_ES|sv_SE|th_TH|th_TH_TH|sq_AL|ar_DZ|ar_BH|ar_EG|&quot;
    +			+ &quot;ar_IQ|ar_JO|ar_KW|ar_LB|ar_LY|ar_MA|ar_OM|ar_QA|ar_SD|ar_SY|&quot;
    +			+ &quot;ar_TN|ar_AE|ar_YE|be_BY|bg_BG|ca_ES|zh_HK|hr_HR|cs_CZ|da_DK|&quot;
    +			+ &quot;nl_BE|en_IN|en_IE|en_NZ|en_ZA|et_EE|fi_FI|fr_BE|fr_LU|fr_CH|&quot;
    +			+ &quot;de_AT|de_LU|de_CH|el_GR|hu_HU|is_IS|it_CH|lv_LV|lt_LT|mk_MK|&quot;
    +			+ &quot;no_NO|no_NO_NY|pl_PL|pt_PT|ro_RO|ru_RU|sr_YU|sh_YU|sk_SK|sl_SI|&quot;
    +			+ &quot;es_AR|es_BO|es_CL|es_CO|es_CR|es_DO|es_EC|es_SV|es_GT|es_HN|&quot;
    +			+ &quot;es_MX|es_NI|es_PA|es_PY|es_PE|es_PR|es_UY|es_VE|tr_TR|uk_UA&quot;;
    +
    +	static {
    +<span class="nc" id="L156">		lookupTable = new HashMap&lt;String, FileType&gt;();</span>
    +
    +<span class="nc bnc" id="L158" title="All 2 branches missed.">		for (String s : srcMimes)</span>
    +<span class="nc" id="L159">			lookupTable.put(s, FileType.SRC);</span>
    +
    +<span class="nc bnc" id="L161" title="All 2 branches missed.">		for (String s : docMimes)</span>
    +<span class="nc" id="L162">			lookupTable.put(s, FileType.DOC);</span>
    +
    +<span class="nc bnc" id="L164" title="All 2 branches missed.">		for (String s : xmlFormats)</span>
    +<span class="nc" id="L165">			lookupTable.put(s, FileType.XML);</span>
    +
    +<span class="nc bnc" id="L167" title="All 2 branches missed.">		for (String s : binMimes)</span>
    +<span class="nc" id="L168">			lookupTable.put(s, FileType.BIN);</span>
    +
    +<span class="nc bnc" id="L170" title="All 2 branches missed.">		for (String s : transMimes)</span>
    +<span class="nc" id="L171">			lookupTable.put(s, FileType.TRANS);	</span>
    +<span class="nc" id="L172">	}</span>
    +
    +	/**
    +	 * Return the file extension of path, or null if no file extension can be
    +	 * found. This works on whole paths, not just filenames. The last component
    +	 * of path is assumed to be a filename component (e.g. /foo/bar/baz.cpp
    +	 * shouldn't be a directory, and will return &quot;cpp&quot; as extension).
    +	 * 
    +	 * @param path
    +	 *            File path to extract the extension for
    +	 * @return Extension (without the trailing .) or null if none
    +	 */
    +	public static String getFileExtension(String path) {
    +<span class="nc bnc" id="L185" title="All 2 branches missed.">		if (null == path) {</span>
    +<span class="nc" id="L186">			return null;</span>
    +		}
    +		// We use \Q and \E to quote the separator char, as it might
    +		// be a character that is interpreted by the RE engine. And
    +		// we can't just use \ to escape it, since it might be a
    +		// character where \x is interpreted as well.
    +<span class="nc" id="L192">		String pathSeparatorRE = &quot;\\Q&quot; + java.io.File.separatorChar + &quot;\\E&quot;;</span>
    +<span class="nc" id="L193">		String extensionSeparatorRE = &quot;\\.&quot;;</span>
    +		// Keep trailing components
    +<span class="nc" id="L195">		String[] components = path.split(pathSeparatorRE, -1);</span>
    +<span class="nc bnc" id="L196" title="All 2 branches missed.">		if (components.length == 0) {</span>
    +			// So the path consisted only of a separator?
    +<span class="nc" id="L198">			return null;</span>
    +		}
    +<span class="nc bnc" id="L200" title="All 2 branches missed.">		if (components[components.length - 1].length() &gt; 0) {</span>
    +<span class="nc" id="L201">			components = components[components.length - 1].split(</span>
    +<span class="nc" id="L202">					extensionSeparatorRE, -1);</span>
    +<span class="nc bnc" id="L203" title="All 2 branches missed.">			if (components.length == 0) {</span>
    +				// No components?
    +<span class="nc" id="L205">				return null;</span>
    +			}
    +<span class="nc bnc" id="L207" title="All 2 branches missed.">			if (components[components.length - 1].length() &gt; 0) {</span>
    +<span class="nc" id="L208">				String extension = &quot;.&quot; + components[components.length - 1];</span>
    +<span class="nc bnc" id="L209" title="All 2 branches missed.">				if (path.endsWith(extension)) {</span>
    +<span class="nc" id="L210">					return extension;</span>
    +				} else {
    +					// This shouldn't be possible
    +<span class="nc" id="L213">					return null;</span>
    +				}
    +			} else {
    +<span class="nc" id="L216">				return null;</span>
    +			}
    +		} else {
    +<span class="nc" id="L219">			return null;</span>
    +		}
    +	}
    +
    +	/**
    +	 * Get the (presumed) filetype of the path, based on file extensions and
    +	 * some heuristics. Operates on full pathnames (see getFileExtension()
    +	 * above).
    +	 * 
    +	 * @param path
    +	 *            Path to get file type from.
    +	 * @return FileType or TXT if none could be determined.
    +	 */
    +	public FileType getFileType(String path) {
    +<span class="nc" id="L233">		String ext = getFileExtension(path);</span>
    +<span class="nc" id="L234">		FileType ft = getFileTypeFromExt(ext);</span>
    +<span class="nc bnc" id="L235" title="All 2 branches missed.">		if (null != ft) {</span>
    +<span class="nc" id="L236">			return ft;</span>
    +		}
    +		
    +<span class="nc bnc" id="L239" title="All 2 branches missed.">		if (doc.matcher(path).find())</span>
    +<span class="nc" id="L240">			return FileType.DOC;</span>
    +		
    +<span class="nc bnc" id="L242" title="All 2 branches missed.">		if (locale.matcher(path).matches()) {</span>
    +<span class="nc" id="L243">			return FileType.TRANS;</span>
    +		}
    +
    +<span class="nc" id="L246">		return FileType.TXT;</span>
    +	}
    +
    +	/**
    +	 * Checks whether a file is of text type
    +	 * 
    +	 * @param path
    +	 *            The path to check
    +	 * @return True is the file is a text file as identified by the 
    +	 * extension
    +	 */
    +	public boolean isTextType(String path) {
    +<span class="nc bnc" id="L258" title="All 2 branches missed.">		return !isBinaryType(path);</span>
    +	}
    +
    +	/**
    +	 * Checks whether a file is of binary type
    +	 * 
    +	 * @param path
    +	 *            The path to check
    +	 * @return True is the file is a binary file as identified by the 
    +	 * extension
    +	 */
    +	public boolean isBinaryType(String path) {
    +<span class="nc bnc" id="L270" title="All 2 branches missed.">		if (getFileType(path).equals(FileType.BIN)) {</span>
    +<span class="nc" id="L271">			return true;</span>
    +		}
    +<span class="nc" id="L273">		return false;</span>
    +	}
    +	
    +	/**
    +     * Checks whether a file is of source code type
    +     * 
    +     * @param path The path to check
    +     * @return True is the file is a source code file as identified by the 
    +     * extension
    +     */
    +	public boolean isSourceFile(String path) {
    +<span class="nc" id="L284">	    FileType ft = getFileType(path);</span>
    +<span class="nc bnc" id="L285" title="All 2 branches missed.">	    if (ft.equals(FileType.SRC)) {</span>
    +<span class="nc" id="L286">	        return true;</span>
    +	    }
    +<span class="nc" id="L288">	    return false;</span>
    +	}
    +
    +	/**
    +	 * Given a filename extension ext, check the known lists of file extensions
    +	 * for an exact match.
    +	 * 
    +	 * @param ext
    +	 *            File extension to check for
    +	 * @return A FileType or null if no match is found
    +	 */
    +	public static FileType getFileTypeFromExt(String ext) {
    +<span class="nc" id="L300">		FileType ft = null;</span>
    +<span class="nc" id="L301">		ft = lookupTable.get(ext);</span>
    +<span class="nc" id="L302">		return ft;</span>
    +	}
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/InMemoryDirectory.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/InMemoryDirectory.html
    new file mode 100644
    index 000000000..791ead49f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/InMemoryDirectory.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InMemoryDirectory</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">InMemoryDirectory</span></div><h1>InMemoryDirectory</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">525 of 525</td><td class="ctr2">0%</td><td class="bar">56 of 56</td><td class="ctr2">0%</td><td class="ctr1">48</td><td class="ctr2">48</td><td class="ctr1">109</td><td class="ctr2">109</td><td class="ctr1">20</td><td class="ctr2">20</td></tr></tfoot><tbody><tr><td id="a19"><a href="InMemoryDirectory.java.html#L312" class="el_method">toString(int)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="88" alt="88"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="72" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">10</td><td class="ctr2" id="i2">10</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="InMemoryDirectory.java.html#L265" class="el_method">createSubDirectory(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="84" height="10" title="62" alt="62"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="InMemoryDirectory.java.html#L243" class="el_method">getSubdirectoryByName(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="75" height="10" title="55" alt="55"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h3">10</td><td class="ctr2" id="i3">10</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="InMemoryDirectory.java.html#L136" class="el_method">getFile(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="65" height="10" title="48" alt="48"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h4">10</td><td class="ctr2" id="i4">10</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="InMemoryDirectory.java.html#L222" class="el_method">deleteFile(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="58" height="10" title="43" alt="43"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h5">10</td><td class="ctr2" id="i5">10</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a17"><a href="InMemoryDirectory.java.html#L175" class="el_method">pathExists(String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="57" height="10" title="42" alt="42"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="72" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h1">11</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="InMemoryDirectory.java.html#L95" class="el_method">getPath()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="53" height="10" title="39" alt="39"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="InMemoryDirectory.java.html#L205" class="el_method">addFile(String)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="53" height="10" title="39" alt="39"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h6">9</td><td class="ctr2" id="i6">9</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="InMemoryDirectory.java.html#L292" class="el_method">getOrCreateSubdirectoryByName(String)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="38" height="10" title="28" alt="28"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="72" height="10" title="6" alt="6"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h8">6</td><td class="ctr2" id="i8">6</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a13"><a href="InMemoryDirectory.java.html#L62" class="el_method">InMemoryDirectory()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="24" height="10" title="18" alt="18"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h9">5</td><td class="ctr2" id="i9">5</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="InMemoryDirectory.java.html#L156" class="el_method">getFiles()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="23" height="10" title="17" alt="17"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h10">4</td><td class="ctr2" id="i10">4</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a3"><a href="InMemoryDirectory.java.html#L118" class="el_method">getCheckout()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="13" height="10" title="10" alt="10"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a14"><a href="InMemoryDirectory.java.html#L74" class="el_method">InMemoryDirectory(InMemoryCheckout)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="9" height="10" title="7" alt="7"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h11">3</td><td class="ctr2" id="i11">3</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a15"><a href="InMemoryDirectory.java.html#L79" class="el_method">InMemoryDirectory(InMemoryDirectory, String)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="9" height="10" title="7" alt="7"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h12">3</td><td class="ctr2" id="i12">3</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a16"><a href="InMemoryDirectory.java.html#L69" class="el_method">InMemoryDirectory(String)</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="8" height="10" title="6" alt="6"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h13">3</td><td class="ctr2" id="i13">3</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a18"><a href="InMemoryDirectory.java.html#L331" class="el_method">toString()</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a7"><a href="InMemoryDirectory.java.html#L88" class="el_method">getName()</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a9"><a href="InMemoryDirectory.java.html#L111" class="el_method">getParentDirectory()</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a11"><a href="InMemoryDirectory.java.html#L125" class="el_method">getSubDirectories()</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a5"><a href="InMemoryDirectory.java.html#L164" class="el_method">getFileNames()</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/InMemoryDirectory.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/InMemoryDirectory.java.html
    new file mode 100644
    index 000000000..a7b9bb594
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/InMemoryDirectory.java.html
    @@ -0,0 +1,336 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InMemoryDirectory.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">InMemoryDirectory.java</span></div><h1>InMemoryDirectory.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +import java.util.ArrayList;
    +import java.util.LinkedList;
    +import java.util.List;
    +
    +import eu.sqooss.service.db.Directory;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.util.FileUtils;
    +
    +/**
    + * An InMemoryDirectory object represents part of an in-memory
    + * checkout. InMemoryDirectory objects hang together in a tree
    + * for a directory hierarchy. Each directory may contain
    + * files; you can use getFile() to retrieve references to
    + * project files from the checkout.
    + */
    +public class InMemoryDirectory {
    +    
    +    private InMemoryCheckout checkout;
    +    private InMemoryDirectory parentDirectory;
    +   
    +    private String name;
    +    
    +    private List&lt;String&gt; files;
    +    private List&lt;InMemoryDirectory&gt; directories;
    +   
    +<span class="nc" id="L62">    public InMemoryDirectory() {</span>
    +<span class="nc" id="L63">        name = new String();</span>
    +<span class="nc" id="L64">        files = new LinkedList&lt;String&gt;();</span>
    +<span class="nc" id="L65">        directories = new LinkedList&lt;InMemoryDirectory&gt;();</span>
    +<span class="nc" id="L66">    }</span>
    +    
    +    public InMemoryDirectory(String name) {
    +<span class="nc" id="L69">        this();</span>
    +<span class="nc" id="L70">        this.name = name;</span>
    +<span class="nc" id="L71">    }</span>
    +    
    +    public InMemoryDirectory(InMemoryCheckout checkout) {
    +<span class="nc" id="L74">        this(&quot;&quot;);</span>
    +<span class="nc" id="L75">        this.checkout = checkout;</span>
    +<span class="nc" id="L76">    }</span>
    +    
    +    public InMemoryDirectory(InMemoryDirectory parent, String name) {
    +<span class="nc" id="L79">        this(name);</span>
    +<span class="nc" id="L80">        this.parentDirectory = parent;</span>
    +<span class="nc" id="L81">    }</span>
    +    
    +    /**
    +     * Returns the name of the directory.
    +     * Returns an empty string for the project's root directory.
    +     */
    +    public String getName() {
    +<span class="nc" id="L88">        return name;</span>
    +    }
    +    
    +    /**
    +     * Returns the complete path of this directory.
    +     */
    +    public String getPath() {
    +<span class="nc bnc" id="L95" title="All 2 branches missed.">    	if (parentDirectory==null) {</span>
    +<span class="nc" id="L96">    		return &quot;/&quot; + getName();</span>
    +    	} else {
    +<span class="nc" id="L98">    		String parentPath = parentDirectory.getPath();</span>
    +<span class="nc bnc" id="L99" title="All 2 branches missed.">    		if (!parentPath.endsWith(&quot;/&quot;)) {</span>
    +<span class="nc" id="L100">    			parentPath = parentPath + &quot;/&quot;;</span>
    +    		}
    +<span class="nc" id="L102">    		return parentPath + getName();</span>
    +    	}
    +    }
    +   
    +    /**
    +     * Returns this directory's parent directory.
    +     * Might be null, if this is the root directory.
    +     */
    +    public InMemoryDirectory getParentDirectory() {
    +<span class="nc" id="L111">        return parentDirectory;</span>
    +    }
    +    
    +    /**
    +     * Returns the checkout this directory belongs to.
    +     */
    +    public InMemoryCheckout getCheckout() {
    +<span class="nc bnc" id="L118" title="All 2 branches missed.">        return checkout == null ? parentDirectory.getCheckout() : checkout;</span>
    +    }
    +
    +    /**
    +     * Returns the list of subdirectories this directory has.
    +     */
    +    public List&lt;InMemoryDirectory&gt; getSubDirectories() {
    +<span class="nc" id="L125">        return directories;</span>
    +    }
    +
    +    /**
    +     * Returns one file living in this directory or below.
    +     * @param name The filename relative to this directory.
    +     * @return A reference to a ProjectFile
    +     */
    +    public ProjectFile getFile(String name) {
    +
    +        /*Recursively traverse the directories of the provided file path*/
    +<span class="nc bnc" id="L136" title="All 2 branches missed.">        if (name.indexOf('/') != -1 ) {</span>
    +<span class="nc" id="L137">            String pathName = name.substring(0, name.indexOf('/'));</span>
    +<span class="nc" id="L138">            String fileName = name.substring(name.indexOf('/') + 1);</span>
    +<span class="nc" id="L139">            InMemoryDirectory dir = getSubdirectoryByName(pathName);</span>
    +<span class="nc bnc" id="L140" title="All 2 branches missed.">            return dir == null ? null : dir.getFile(fileName);</span>
    +        }
    +
    +<span class="nc" id="L143">        return ProjectFile.findFile(</span>
    +<span class="nc" id="L144">                getCheckout().getProjectVersion().getProject().getId(),</span>
    +<span class="nc" id="L145">                FileUtils.basename(name), </span>
    +<span class="nc" id="L146">                FileUtils.dirname(name),</span>
    +<span class="nc" id="L147">                getCheckout().getProjectVersion().getRevisionId());</span>
    +
    +    }
    +    
    +    /**
    +     * Returns the list of files this directory contains.
    +     */
    +    public List&lt;ProjectFile&gt; getFiles() {
    +        @SuppressWarnings(&quot;unused&quot;)
    +<span class="nc" id="L156">        ArrayList&lt;ProjectFile&gt; result = new ArrayList&lt;ProjectFile&gt;(files.size());</span>
    +        
    +<span class="nc" id="L158">        return getCheckout().getProjectVersion().getFiles(</span>
    +<span class="nc" id="L159">                Directory.getDirectory(getPath(), false), </span>
    +<span class="nc" id="L160">                ProjectVersion.MASK_FILES);</span>
    +    }
    +
    +    public List&lt;String&gt; getFileNames() {
    +<span class="nc" id="L164">        return this.files;</span>
    +    }
    +    
    +    /**
    +     * Search if the provided path exists in this directory or below  
    +     * 
    +     * @return true, if the provided path can be reached from the current 
    +     * directory 
    +     */
    +    public boolean pathExists(String path) {
    +        //Check if the path points to a dir first
    +<span class="nc" id="L175">        InMemoryDirectory dir = getSubdirectoryByName(path);</span>
    +        
    +<span class="nc bnc" id="L177" title="All 2 branches missed.">        if (dir != null) {</span>
    +<span class="nc" id="L178">            return true;</span>
    +        }
    +        
    +        // Split directory part from (possible) file part and re-check
    +<span class="nc" id="L182">        String file = path.substring(path.lastIndexOf('/') + 1, path.length());</span>
    +<span class="nc" id="L183">        path = path.substring(0, path.lastIndexOf('/'));</span>
    +<span class="nc" id="L184">        dir = getSubdirectoryByName(path);</span>
    +
    +<span class="nc bnc" id="L186" title="All 2 branches missed.">        if (dir == null) {</span>
    +            // Dir not found
    +<span class="nc" id="L188">            return false;</span>
    +        }
    +
    +        //Dir found, search files for matching file name
    +<span class="nc bnc" id="L192" title="All 2 branches missed.">        if (dir.getFiles().contains(file)) {</span>
    +<span class="nc" id="L193">            return true;</span>
    +        }
    +        
    +<span class="nc" id="L196">        return false;</span>
    +    }
    +    
    +    /**
    +     * Adds a file.
    +     * 
    +     * @param path The filename relative to this directory.
    +     */
    +    public void addFile(String path) {
    +<span class="nc bnc" id="L205" title="All 2 branches missed.">        if (path.indexOf('/') == -1 ) {</span>
    +<span class="nc bnc" id="L206" title="All 2 branches missed.">        	if (!files.contains(path)) {</span>
    +<span class="nc" id="L207">        		files.add(path);</span>
    +        	}
    +<span class="nc" id="L209">        } else {</span>
    +<span class="nc" id="L210">            String pathName = path.substring(0, path.indexOf('/'));</span>
    +<span class="nc" id="L211">            String fileName = path.substring(path.indexOf('/') + 1);</span>
    +<span class="nc" id="L212">            InMemoryDirectory dir = getOrCreateSubdirectoryByName(pathName);</span>
    +<span class="nc" id="L213">            dir.addFile(fileName);</span>
    +        }
    +<span class="nc" id="L215">    }</span>
    +
    +    /**
    +     * Deletes a file.
    +     * @param path The filename relative to this directory.
    +     */
    +    public void deleteFile(String path) {
    +<span class="nc bnc" id="L222" title="All 2 branches missed.">    	if (path.indexOf('/') == -1) {</span>
    +    		// might be a file
    +<span class="nc" id="L224">    		files.remove(path);</span>
    +    		// but it might even be a directory...
    +<span class="nc" id="L226">    		directories.remove(getSubdirectoryByName(path));</span>
    +<span class="nc" id="L227">    	} else {</span>
    +<span class="nc" id="L228">    		String pathName = path.substring(0, path.indexOf('/'));</span>
    +<span class="nc" id="L229">    		String fileName = path.substring(path.indexOf('/') + 1);</span>
    +<span class="nc" id="L230">    		InMemoryDirectory dir = getSubdirectoryByName(pathName);</span>
    +<span class="nc bnc" id="L231" title="All 2 branches missed.">    		if (dir != null ) {</span>
    +<span class="nc" id="L232">    			dir.deleteFile(fileName);</span>
    +    		}
    +    	}
    +<span class="nc" id="L235">    }</span>
    +    
    +    /**
    +     * Gets a subdirectory.
    +     * @param path The name of the directory.
    +     * @return An InMemoryDirectory reference.
    +     */
    +    public InMemoryDirectory getSubdirectoryByName(String path) {
    +<span class="nc bnc" id="L243" title="All 4 branches missed.">    	if (path == null || path.equals(&quot;&quot;)) {</span>
    +<span class="nc" id="L244">    		return this;</span>
    +<span class="nc bnc" id="L245" title="All 2 branches missed.">    	} else if (path.indexOf('/') == -1 ) {</span>
    +<span class="nc bnc" id="L246" title="All 2 branches missed.">            for (InMemoryDirectory dir : directories) {</span>
    +<span class="nc bnc" id="L247" title="All 2 branches missed.">                if (dir.getName().equals(path)) {</span>
    +<span class="nc" id="L248">                    return dir;</span>
    +                }
    +            }
    +<span class="nc" id="L251">            return null;</span>
    +    	}
    +<span class="nc" id="L253">    	String pathName = path.substring(0, path.indexOf('/'));</span>
    +<span class="nc" id="L254">    	String fileName = path.substring(path.indexOf('/') + 1);</span>
    +
    +<span class="nc" id="L256">    	return getSubdirectoryByName(pathName).getSubdirectoryByName(fileName);</span>
    +    }
    + 
    +    /**
    +     * Creates a subdirectory
    +     * @param name The name of the subdirectory to create.
    +     * @return A reference to the new directory.
    +     */
    +    public InMemoryDirectory createSubDirectory(String name) {
    +<span class="nc bnc" id="L265" title="All 4 branches missed.">    	if (name == null || name.equals(&quot;&quot;)) {</span>
    +<span class="nc" id="L266">    		return this;</span>
    +<span class="nc bnc" id="L267" title="All 2 branches missed.">    	} else if (name.indexOf('/') == -1) {</span>
    +<span class="nc" id="L268">          	InMemoryDirectory dir = getSubdirectoryByName(name);</span>
    +<span class="nc bnc" id="L269" title="All 2 branches missed.">          	if (dir == null ) {</span>
    +<span class="nc" id="L270">          		dir = new InMemoryDirectory(this, name);</span>
    +          	}
    +<span class="nc bnc" id="L272" title="All 2 branches missed.">          	if (!directories.contains(dir)) {</span>
    +<span class="nc" id="L273">          		directories.add(dir);</span>
    +          	}
    +<span class="nc" id="L275">        	return getSubdirectoryByName(name);</span>
    +    	} else {
    +<span class="nc" id="L277">    		String pathName = name.substring(0, name.indexOf('/'));</span>
    +<span class="nc" id="L278">    		String fileName = name.substring(name.indexOf('/') + 1);</span>
    +<span class="nc" id="L279">    		InMemoryDirectory dir = getOrCreateSubdirectoryByName(pathName);</span>
    +<span class="nc" id="L280">    		return dir.createSubDirectory(fileName);</span>
    +    	}
    + 
    +    }
    +    
    +    /**
    +     * Gets a subdirectory. If the wanted one couldn't be found, it's created.
    +     * @param name The name of the directory.
    +     * @return An InMemoryDirectory reference.
    +     */
    +    protected InMemoryDirectory getOrCreateSubdirectoryByName(String name) {
    +    	// if it's empty, it's us!
    +<span class="nc bnc" id="L292" title="All 2 branches missed.">    	if (name.length() == 0) {</span>
    +<span class="nc" id="L293">    		return this;</span>
    +    	}
    +    	
    +<span class="nc bnc" id="L296" title="All 2 branches missed.">        for (InMemoryDirectory dir : directories) {</span>
    +<span class="nc bnc" id="L297" title="All 2 branches missed.">            if (dir.getName().equals(name) ) {</span>
    +<span class="nc" id="L298">                return dir;</span>
    +            }
    +        }
    +
    +        // not found? create it
    +<span class="nc" id="L303">        return createSubDirectory(name);</span>
    +    }
    +    
    +    /**
    +     * Nice formatting of this directory including subdirectories and files.
    +     * @param indentation The indentation of the root.
    +     * @return A String containing a nicely formatted directory tree.
    +     */
    +    protected String toString(int indentation) {
    +<span class="nc" id="L312">    	String result = &quot;&quot;;</span>
    +<span class="nc" id="L313">    	String indent = &quot;&quot;;</span>
    +<span class="nc bnc" id="L314" title="All 2 branches missed.">    	for (int i=0; i &lt; indentation; ++i)</span>
    +<span class="nc" id="L315">    		indent = indent + &quot; &quot;;</span>
    +    	
    +<span class="nc" id="L317">    	result = result + indent + getName() + &quot;\n&quot;;</span>
    +    	
    +<span class="nc bnc" id="L319" title="All 2 branches missed.">    	for (InMemoryDirectory d: directories) {</span>
    +<span class="nc" id="L320">    		result = result + d.toString(indentation + 1);</span>
    +    	}
    +<span class="nc bnc" id="L322" title="All 2 branches missed.">    	for (String file: files) {</span>
    +<span class="nc" id="L323">    		result = result + indent + &quot; &quot; + file + &quot;\n&quot;;</span>
    +    	}
    +    	
    +<span class="nc" id="L326">    	return result;</span>
    +    }
    +   
    +    /** {@inheritDoc} */
    +    public String toString() {
    +<span class="nc" id="L331">    	return toString(0);</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/MailingListEvent.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/MailingListEvent.html
    new file mode 100644
    index 000000000..128c4cd7a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/MailingListEvent.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MailingListEvent</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">MailingListEvent</span></div><h1>MailingListEvent</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="MailingListEvent.java.html#L43" class="el_method">MailingListEvent(long, MailMessage)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="MailingListEvent.java.html#L52" class="el_method">getAssociatedDAO()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="53" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="MailingListEvent.java.html#L63" class="el_method">getEventId()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="53" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="MailingListEvent.java.html#L59" class="el_method">getEventPriority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="26" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/MailingListEvent.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/MailingListEvent.java.html
    new file mode 100644
    index 000000000..e2bc0a8a7
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/MailingListEvent.java.html
    @@ -0,0 +1,68 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>MailingListEvent.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">MailingListEvent.java</span></div><h1>MailingListEvent.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +import eu.sqooss.service.db.MailMessage;
    +
    +/**
    + * Data transfer object for mailing list events
    + */
    +public class MailingListEvent extends ProjectEvent {
    +
    +<span class="nc" id="L43">    public MailingListEvent(long ts, MailMessage dao) {</span>
    +<span class="nc" id="L44">        this.timestamp = ts;</span>
    +<span class="nc" id="L45">        this.associatedDAO = dao;</span>
    +<span class="nc" id="L46">    }</span>
    +    
    +    /**
    +     * @return the associatedDAO
    +     */
    +    public MailMessage getAssociatedDAO() {
    +<span class="nc" id="L52">        return (MailMessage) associatedDAO;</span>
    +    }
    +
    +    /**
    +     * @return 1, the priority for mailing list events
    +     */
    +    public int getEventPriority() {
    +<span class="nc" id="L59">        return 1;</span>
    +    }
    +
    +    protected long getEventId() {
    +<span class="nc" id="L63">        return getAssociatedDAO().getId();</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/ProjectEvent.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/ProjectEvent.html
    new file mode 100644
    index 000000000..d311d1842
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/ProjectEvent.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectEvent</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">ProjectEvent</span></div><h1>ProjectEvent</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">57 of 57</td><td class="ctr2">0%</td><td class="bar">12 of 12</td><td class="ctr2">0%</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="ProjectEvent.java.html#L91" class="el_method">compareTo(ProjectEvent)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="48" alt="48"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="ProjectEvent.java.html#L43" class="el_method">ProjectEvent()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="7" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="ProjectEvent.java.html#L59" class="el_method">getAssociatedDAO()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="7" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="ProjectEvent.java.html#L67" class="el_method">getTimestamp()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="7" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/ProjectEvent.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/ProjectEvent.java.html
    new file mode 100644
    index 000000000..179856ebf
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/ProjectEvent.java.html
    @@ -0,0 +1,105 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>ProjectEvent.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">ProjectEvent.java</span></div><h1>ProjectEvent.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +import eu.sqooss.service.db.DAObject;
    +
    +/**
    + * A generic data transfer object holding references to 
    + * resources describing a project event.  
    + * 
    + */
    +<span class="nc" id="L43">public abstract class ProjectEvent implements Comparable&lt;ProjectEvent&gt; {</span>
    +    
    +    /**
    +     * Second-accurate timestamp
    +     */
    +    protected long timestamp;
    +    
    +    /**
    +     * Database record about the event.
    +     */
    +    protected DAObject associatedDAO;
    +        
    +    /**
    +     * @return the associated DAO
    +     */
    +    public DAObject getAssociatedDAO() {
    +<span class="nc" id="L59">        return associatedDAO;</span>
    +    }
    +    
    +    /**
    +     * This value is used as the primary sorting discriminant for events.
    +     * @return the timestamp in second-accuracy.
    +     */
    +    public long getTimestamp() {
    +<span class="nc" id="L67">        return timestamp;</span>
    +    }
    +    
    +    /**
    +     * This value is used to further sort events with identical timestamps.
    +     * @return an integer representing the &quot;priority&quot; of the event.
    +     */
    +    protected abstract int getEventPriority();
    +
    +    /**
    +     * This value is used to further sort elements with identical timestamps and priorities.
    +     * (e.g. two SCM commits happening in the same second)
    +     * @return an integer representing the event id.
    +     */
    +    protected abstract long getEventId();
    +
    +        
    +    /**
    +     * Compare events using the following discriminants in order :
    +     * timestamp -&gt; priority -&gt; event id
    +     * @return -1/0/1 if the event is more prioritary/equal/less prioritary than other
    +     */
    +    public int compareTo(ProjectEvent other)
    +    {
    +<span class="nc bnc" id="L91" title="All 2 branches missed.">        if ( getTimestamp() == other.getTimestamp() ) {</span>
    +<span class="nc bnc" id="L92" title="All 2 branches missed.">            if ( getEventPriority() == other.getEventPriority() ) {</span>
    +<span class="nc bnc" id="L93" title="All 2 branches missed.">                if ( getEventId() == other.getEventId() ) {</span>
    +<span class="nc" id="L94">                    return 0;</span>
    +                }
    +<span class="nc bnc" id="L96" title="All 2 branches missed.">                return getEventId() &gt; other.getEventId() ? 1 : -1;</span>
    +            }
    +<span class="nc bnc" id="L98" title="All 2 branches missed.">            return getEventPriority() &gt; other.getEventPriority() ? 1 : -1;</span>
    +        }
    +<span class="nc bnc" id="L100" title="All 2 branches missed.">        return getTimestamp() &gt; other.getTimestamp() ? 1 : -1;</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/RepositoryEvent.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/RepositoryEvent.html
    new file mode 100644
    index 000000000..c66e69194
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/RepositoryEvent.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RepositoryEvent</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">RepositoryEvent</span></div><h1>RepositoryEvent</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="RepositoryEvent.java.html#L43" class="el_method">RepositoryEvent(long, ProjectVersion)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="RepositoryEvent.java.html#L52" class="el_method">getAssociatedDAO()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="53" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="RepositoryEvent.java.html#L63" class="el_method">getEventId()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="53" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="RepositoryEvent.java.html#L59" class="el_method">getEventPriority()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="26" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/RepositoryEvent.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/RepositoryEvent.java.html
    new file mode 100644
    index 000000000..2424fe0b9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/RepositoryEvent.java.html
    @@ -0,0 +1,68 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RepositoryEvent.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">RepositoryEvent.java</span></div><h1>RepositoryEvent.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +import eu.sqooss.service.db.ProjectVersion;
    +
    +/**
    + * Data transfer object for mailing list events
    + */
    +public class RepositoryEvent extends ProjectEvent {
    +    
    +<span class="nc" id="L43">    public RepositoryEvent(long ts, ProjectVersion dao) {</span>
    +<span class="nc" id="L44">        this.timestamp = ts;</span>
    +<span class="nc" id="L45">        this.associatedDAO = dao;</span>
    +<span class="nc" id="L46">    }</span>
    +    
    +    /**
    +     * @return the associatedDAO
    +     */
    +    public ProjectVersion getAssociatedDAO() {
    +<span class="nc" id="L52">        return (ProjectVersion) associatedDAO;</span>
    +    }
    +
    +    /**
    +     * @return 0, the priority for repository events (highest)
    +     */
    +    public int getEventPriority() {
    +<span class="nc" id="L59">        return 0;</span>
    +    }
    +
    +    protected long getEventId() {
    +<span class="nc" id="L63">        return getAssociatedDAO().getId();</span>
    +    }
    +}
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/Timeline$ResourceType.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/Timeline$ResourceType.html
    new file mode 100644
    index 000000000..372d8cff2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/Timeline$ResourceType.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Timeline.ResourceType</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_class">Timeline.ResourceType</span></div><h1>Timeline.ResourceType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="Timeline.java.html#L65" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="Timeline.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="56" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="Timeline.java.html#L65" class="el_method">Timeline.ResourceType(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="Timeline.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/Timeline.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/Timeline.java.html
    new file mode 100644
    index 000000000..cc53e0cc6
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/Timeline.java.html
    @@ -0,0 +1,102 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Timeline.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.fds</a> &gt; <span class="el_source">Timeline.java</span></div><h1>Timeline.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.fds;
    +
    +import java.util.Calendar;
    +import java.util.EnumSet;
    +import java.util.SortedSet;
    +
    +/**
    + * A timeline  is a chronological view of the events that change a 
    + * project's state. 
    + * 
    + * A project's state at any given moment &lt;tt&gt;t&lt;/tt&gt; in
    + * time is defined by the set &lt;tt&gt;S(t)={s,e,b}(t)&lt;/tt&gt; where:
    + * 
    + * &lt;ul&gt;
    + *      &lt;li&gt;&lt;tt&gt;s(t)&lt;/tt&gt; = Latest commit to the repository prior to &lt;tt&gt;t&lt;/tt&gt;&lt;/li&gt;
    + *      &lt;li&gt;&lt;tt&gt;e(t)&lt;/tt&gt; = Latest commit to the mail archives prior to &lt;tt&gt;t&lt;/tt&gt;&lt;/li&gt;
    + *      &lt;li&gt;&lt;tt&gt;b(t)&lt;/tt&gt; = Latest entry (bug report, action on a bug, etc) to
    + *              the bug management database prior to &lt;tt&gt;t&lt;/tt&gt;&lt;/li&gt;
    + * &lt;/ul&gt;
    + *
    + * Events are sorted by their timestamp, with second accuracy. In the case 
    + * where 2 events occur at the same second, the class tries its best to 
    + * reconcile microsecond-accurate repository timestamps with 
    + * second-accurate email and bug database timestamps. 
    + */
    +public interface Timeline {
    +    
    +
    +    /** A timeline consists of events; each event has a type,
    +     *  corresponding to the resource that has changed.
    +     */
    +<span class="nc" id="L65">    public enum ResourceType {</span>
    +<span class="nc" id="L66">        SCM,  //&lt; Code change</span>
    +<span class="nc" id="L67">        MAIL, //&lt; Mail message arrived</span>
    +<span class="nc" id="L68">        BTS   //&lt; Bug change</span>
    +    }
    +    
    +    /**
    +     * Return a timeline of events for project, starting from and including 
    +     * events occurred at timestamp &lt;tt&gt;from&lt;/tt&gt; ending up and including
    +     * events occurred at timestamp &lt;tt&gt;to&lt;/tt&gt; for the specified {@link ResourceType}.
    +     *  
    +     * @param from Timeline start
    +     * @param to Timeline end
    +     * @param rt The resource type to include in the event timeline. 
    +     * @return A sorted set of {@link ProjectEvent} entries
    +     */
    +    SortedSet&lt;ProjectEvent&gt; getTimeLine(Calendar from, Calendar to, ResourceType rt);
    +
    +    /**
    +     * Return a timeline of events for project, starting from and including 
    +     * events occurred at timestamp &lt;tt&gt;from&lt;/tt&gt; ending up and including
    +     * events occurred at timestamp &lt;tt&gt;to&lt;/tt&gt; for the specified set of {@link ResourceType} events.
    +     * For example, specifying EnumSet.addAll(ResourceType.class) will return a timeline
    +     * containing events for all the resource types.
    +     *  
    +     * @param from Timeline start
    +     * @param to Timeline end
    +     * @param rt The set of {@link ResourceType} events to include in the event timeline. 
    +     * @return A sorted set of {@link ProjectEvent} entries
    +     */
    +    SortedSet&lt;ProjectEvent&gt; getTimeLine(Calendar from, Calendar to, EnumSet&lt;ResourceType&gt; rts);
    +    
    +    
    +}
    +
    +
    +//vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/index.html
    new file mode 100644
    index 000000000..9b8310b13
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.fds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.fds</span></div><h1>eu.sqooss.service.fds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2,023 of 2,023</td><td class="ctr2">0%</td><td class="bar">106 of 106</td><td class="ctr2">0%</td><td class="ctr1">110</td><td class="ctr2">110</td><td class="ctr1">264</td><td class="ctr2">264</td><td class="ctr1">57</td><td class="ctr2">57</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a3"><a href="FileTypeMatcher.html" class="el_class">FileTypeMatcher</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,211" alt="1,211"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="81" height="10" title="38" alt="38"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">28</td><td class="ctr2" id="g1">28</td><td class="ctr1" id="h1">99</td><td class="ctr2" id="i1">99</td><td class="ctr1" id="j1">9</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a5"><a href="InMemoryDirectory.html" class="el_class">InMemoryDirectory</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="52" height="10" title="525" alt="525"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="56" alt="56"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">48</td><td class="ctr2" id="g0">48</td><td class="ctr1" id="h0">109</td><td class="ctr2" id="i0">109</td><td class="ctr1" id="j0">20</td><td class="ctr2" id="k0">20</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a4"><a href="FileTypeMatcher$FileType.html" class="el_class">FileTypeMatcher.FileType</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="8" height="10" title="90" alt="90"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h2">14</td><td class="ctr2" id="i2">14</td><td class="ctr1" id="j2">4</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a9"><a href="Timeline$ResourceType.html" class="el_class">Timeline.ResourceType</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="5" height="10" title="60" alt="60"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h7">5</td><td class="ctr2" id="i7">5</td><td class="ctr1" id="j3">4</td><td class="ctr2" id="k3">4</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="ProjectEvent.html" class="el_class">ProjectEvent</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="5" height="10" title="57" alt="57"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="25" height="10" title="12" alt="12"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">10</td><td class="ctr2" id="g2">10</td><td class="ctr1" id="h3">10</td><td class="ctr2" id="i3">10</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k4">4</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="FDSException.html" class="el_class">FDSException</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h8">4</td><td class="ctr2" id="i8">4</td><td class="ctr1" id="j8">3</td><td class="ctr2" id="k8">3</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a8"><a href="RepositoryEvent.html" class="el_class">RepositoryEvent</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h4">7</td><td class="ctr2" id="i4">7</td><td class="ctr1" id="j5">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a6"><a href="MailingListEvent.html" class="el_class">MailingListEvent</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f6">4</td><td class="ctr2" id="g6">4</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j6">4</td><td class="ctr2" id="k6">4</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a0"><a href="BugDBEvent.html" class="el_class">BugDBEvent</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f7">4</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h6">7</td><td class="ctr2" id="i6">7</td><td class="ctr1" id="j7">4</td><td class="ctr2" id="k7">4</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a1"><a href="CheckoutException.html" class="el_class">CheckoutException</a></td><td class="bar" id="b9"/><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/index.source.html
    new file mode 100644
    index 000000000..8df09beb2
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.fds/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.fds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.fds</span></div><h1>eu.sqooss.service.fds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2,023 of 2,023</td><td class="ctr2">0%</td><td class="bar">106 of 106</td><td class="ctr2">0%</td><td class="ctr1">110</td><td class="ctr2">110</td><td class="ctr1">264</td><td class="ctr2">264</td><td class="ctr1">57</td><td class="ctr2">57</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a3"><a href="FileTypeMatcher.java.html" class="el_source">FileTypeMatcher.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="1,301" alt="1,301"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="81" height="10" title="38" alt="38"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">32</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h0">113</td><td class="ctr2" id="i0">113</td><td class="ctr1" id="j1">13</td><td class="ctr2" id="k1">13</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr><tr><td id="a4"><a href="InMemoryDirectory.java.html" class="el_source">InMemoryDirectory.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="48" height="10" title="525" alt="525"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="56" alt="56"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">48</td><td class="ctr2" id="g0">48</td><td class="ctr1" id="h1">109</td><td class="ctr2" id="i1">109</td><td class="ctr1" id="j0">20</td><td class="ctr2" id="k0">20</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a8"><a href="Timeline.java.html" class="el_source">Timeline.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="5" height="10" title="60" alt="60"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h6">5</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j2">4</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a6"><a href="ProjectEvent.java.html" class="el_source">ProjectEvent.java</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="5" height="10" title="57" alt="57"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="25" height="10" title="12" alt="12"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">10</td><td class="ctr2" id="g2">10</td><td class="ctr1" id="h2">10</td><td class="ctr2" id="i2">10</td><td class="ctr1" id="j3">4</td><td class="ctr2" id="k3">4</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a2"><a href="FDSException.java.html" class="el_source">FDSException.java</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h7">4</td><td class="ctr2" id="i7">4</td><td class="ctr1" id="j7">3</td><td class="ctr2" id="k7">3</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a5"><a href="MailingListEvent.java.html" class="el_source">MailingListEvent.java</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k4">4</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a7"><a href="RepositoryEvent.java.html" class="el_source">RepositoryEvent.java</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h4">7</td><td class="ctr2" id="i4">7</td><td class="ctr1" id="j5">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a0"><a href="BugDBEvent.java.html" class="el_source">BugDBEvent.java</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="1" height="10" title="19" alt="19"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f6">4</td><td class="ctr2" id="g6">4</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j6">4</td><td class="ctr2" id="k6">4</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a1"><a href="CheckoutException.java.html" class="el_source">CheckoutException.java</a></td><td class="bar" id="b8"/><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestService.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestService.html
    new file mode 100644
    index 000000000..5a467f0d9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestService.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RestService</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.rest</a> &gt; <span class="el_class">RestService</span></div><h1>RestService</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="RestService.java.html#L46" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestService.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestService.java.html
    new file mode 100644
    index 000000000..6e1e17812
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestService.java.html
    @@ -0,0 +1,64 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RestService.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.rest</a> &gt; <span class="el_source">RestService.java</span></div><h1>RestService.java</h1><pre class="source lang-java linenums">/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +package eu.sqooss.service.rest;
    +
    +import eu.sqooss.core.AlitheiaCoreService;
    +
    +/**
    + * Alitheia Core REST API service. Allows custom paths to be registered under 
    + * the /api namespace.  
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + *
    + */
    +public interface RestService extends AlitheiaCoreService {
    +	
    +	/**
    +	 * Service name inside OSGi namespace service registration.
    +	 */
    +<span class="nc" id="L46">	public static final String SERVICE_NAME = RestService.class.getName();</span>
    +
    +	/**
    +	 * Add a resource to the registry. A resource is a JAX-RS annotated POJO.
    +	 * The class-level path annotation must always be equal to &lt;code&gt;/api&lt;/code&gt;
    +	 * (i.e. &lt;code&gt;@Path(&quot;/api&quot;)&lt;/code&gt;), otherwise the resource will not be
    +	 * accessible.
    +	 * 
    +	 * @param resource The resource to add.
    +	 */
    +	public void addResource(Class&lt;?&gt; resource);
    +	
    +	/**
    +	 * Remove a resource from the resource registry.
    +	 * @param resource  The resource to remove.
    +	 */
    +	public void removeResource(Class&lt;?&gt; resource);	
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestServiceApp.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestServiceApp.html
    new file mode 100644
    index 000000000..1b71135d8
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestServiceApp.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RestServiceApp</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.rest</a> &gt; <span class="el_class">RestServiceApp</span></div><h1>RestServiceApp</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">8 of 8</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="RestServiceApp.java.html#L44" class="el_method">RestServiceApp()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="RestServiceApp.java.html#L50" class="el_method">getClasses()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="RestServiceApp.java.html#L55" class="el_method">getSingletons()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="2" alt="2"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestServiceApp.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestServiceApp.java.html
    new file mode 100644
    index 000000000..1204d4890
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/RestServiceApp.java.html
    @@ -0,0 +1,58 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>RestServiceApp.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.rest</a> &gt; <span class="el_source">RestServiceApp.java</span></div><h1>RestServiceApp.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.rest;
    +
    +import java.util.Set;
    +
    +import javax.ws.rs.core.Application;
    +
    +import eu.sqooss.impl.service.rest.RestServiceRegistry;
    +
    +public class RestServiceApp extends Application {
    +
    +<span class="nc" id="L44">	public RestServiceApp() {</span>
    +<span class="nc" id="L45">	}</span>
    +	
    +	@Override
    +	public Set&lt;Class&lt;?&gt;&gt; getClasses() {
    +		
    +<span class="nc" id="L50">		return RestServiceRegistry.getInstance().getResources();</span>
    +	}
    +	
    +	@Override
    +	public Set&lt;Object&gt; getSingletons() {
    +<span class="nc" id="L55">		return null;</span>
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/index.html
    new file mode 100644
    index 000000000..94a5f28c9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.rest</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.rest</span></div><h1>eu.sqooss.service.rest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">12 of 12</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="RestServiceApp.html" class="el_class">RestServiceApp</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="RestService.html" class="el_class">RestService</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/index.source.html
    new file mode 100644
    index 000000000..2abedd22e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.rest/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.rest</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.rest</span></div><h1>eu.sqooss.service.rest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">12 of 12</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="RestServiceApp.java.html" class="el_source">RestServiceApp.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="RestService.java.html" class="el_source">RestService.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job$State.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job$State.html
    new file mode 100644
    index 000000000..d40e19620
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job$State.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Job.State</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.scheduler</a> &gt; <span class="el_class">Job.State</span></div><h1>Job.State</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">21 of 90</td><td class="ctr2">77%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">8</td><td class="ctr1">2</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="Job.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="30" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="Job.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="Job.java.html#L63" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="64" alt="64"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="Job.java.html#L63" class="el_method">Job.State(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job.html
    new file mode 100644
    index 000000000..eaf95a920
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Job</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.scheduler</a> &gt; <span class="el_class">Job</span></div><h1>Job</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">736 of 839</td><td class="ctr2">12%</td><td class="bar">111 of 122</td><td class="ctr2">9%</td><td class="ctr1">81</td><td class="ctr2">91</td><td class="ctr1">164</td><td class="ctr2">197</td><td class="ctr1">20</td><td class="ctr2">30</td></tr></tfoot><tbody><tr><td id="a23"><a href="Job.java.html#L388" class="el_method">setState(Job.State)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="85" height="10" title="106" alt="106"/><img src="../../../.resources/greenbar.gif" width="34" height="10" title="42" alt="42"/></td><td class="ctr2" id="c7">28%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="90" height="10" title="18" alt="18"/><img src="../../../.resources/greenbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">25%</td><td class="ctr1" id="f0">12</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h2">16</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j20">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a22"><a href="Job.java.html#L495" class="el_method">resume()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="56" height="10" title="70" alt="70"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="12" alt="12"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f1">7</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h0">21</td><td class="ctr2" id="i1">21</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a29"><a href="Job.java.html#L481" class="el_method">yield(ResumePoint)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="51" height="10" title="64" alt="64"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h6">10</td><td class="ctr2" id="i6">10</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a28"><a href="Job.java.html#L312" class="el_method">waitForFinished()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="50" height="10" title="62" alt="62"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="40" height="10" title="8" alt="8"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f5">5</td><td class="ctr2" id="g5">5</td><td class="ctr1" id="h3">16</td><td class="ctr2" id="i3">16</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="Job.java.html#L135" class="el_method">addDependency(Job)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="49" height="10" title="61" alt="61"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="50" height="10" title="10" alt="10"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f3">6</td><td class="ctr2" id="g3">6</td><td class="ctr1" id="h4">12</td><td class="ctr2" id="i4">12</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a12"><a href="Job.java.html#L218" class="el_method">execute()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="45" height="10" title="56" alt="56"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="50" height="10" title="10" alt="10"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f4">6</td><td class="ctr2" id="g4">6</td><td class="ctr1" id="h1">18</td><td class="ctr2" id="i2">18</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a11"><a href="Job.java.html#L181" class="el_method">dependsOn(Job)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="44" height="10" title="55" alt="55"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="60" height="10" title="12" alt="12"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f2">7</td><td class="ctr2" id="g2">7</td><td class="ctr1" id="h7">9</td><td class="ctr2" id="i7">9</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a19"><a href="Job.java.html#L160" class="el_method">removeDependency(Job)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="43" height="10" title="54" alt="54"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="40" height="10" title="8" alt="8"/></td><td class="ctr2" id="e12">0%</td><td class="ctr1" id="f6">5</td><td class="ctr2" id="g6">5</td><td class="ctr1" id="h5">11</td><td class="ctr2" id="i5">11</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a10"><a href="Job.java.html#L292" class="el_method">dependencies()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="31" height="10" title="39" alt="39"/><img src="../../../.resources/greenbar.gif" width="4" height="10" title="5" alt="5"/></td><td class="ctr2" id="c9">11%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="25" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="5" height="10" title="1" alt="1"/></td><td class="ctr2" id="e4">17%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h8">6</td><td class="ctr2" id="i8">8</td><td class="ctr1" id="j21">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a2"><a href="Job.java.html#L196" class="el_method">addDependee(Job)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="20" height="10" title="25" alt="25"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e13">0%</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h9">5</td><td class="ctr2" id="i12">5</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a18"><a href="Job.java.html#L204" class="el_method">removeDependee(Job)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="17" height="10" title="21" alt="21"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d12"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e14">0%</td><td class="ctr1" id="f11">2</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h10">5</td><td class="ctr2" id="i13">5</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a13"><a href="Job.java.html#L572" class="el_method">fireStateChangedEvent()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="14" height="10" title="18" alt="18"/><img src="../../../.resources/greenbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">18%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="15" height="10" title="3" alt="3"/><img src="../../../.resources/greenbar.gif" width="5" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">25%</td><td class="ctr1" id="f12">2</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h15">3</td><td class="ctr2" id="i14">5</td><td class="ctr1" id="j22">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a21"><a href="Job.java.html#L460" class="el_method">restart()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="14" height="10" title="18" alt="18"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d13"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e15">0%</td><td class="ctr1" id="f13">2</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h11">5</td><td class="ctr2" id="i15">5</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a8"><a href="Job.java.html#L347" class="el_method">canExecute()</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="11" height="10" title="14" alt="14"/><img src="../../../.resources/greenbar.gif" width="9" height="10" title="12" alt="12"/></td><td class="ctr2" id="c6">46%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="25" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="5" height="10" title="1" alt="1"/></td><td class="ctr2" id="e5">17%</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">4</td><td class="ctr1" id="h16">3</td><td class="ctr2" id="i9">7</td><td class="ctr1" id="j23">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a5"><a href="Job.java.html#L269" class="el_method">callAboutToBeDequeued(Scheduler)</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="11" height="10" title="14" alt="14"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d14"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e16">0%</td><td class="ctr1" id="f14">2</td><td class="ctr2" id="g14">2</td><td class="ctr1" id="h12">5</td><td class="ctr2" id="i16">5</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a4"><a href="Job.java.html#L553" class="el_method">addJobStateListener(JobStateListener)</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="11" height="10" title="14" alt="14"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d15"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e17">0%</td><td class="ctr1" id="f15">2</td><td class="ctr2" id="g15">2</td><td class="ctr1" id="h13">4</td><td class="ctr2" id="i17">4</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a20"><a href="Job.java.html#L563" class="el_method">removeJobStateListener(JobStateListener)</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="8" height="10" title="10" alt="10"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d16"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e18">0%</td><td class="ctr1" id="f16">2</td><td class="ctr2" id="g16">2</td><td class="ctr1" id="h14">4</td><td class="ctr2" id="i18">4</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a7"><a href="Job.java.html#L449" class="el_method">callDependenciesChanged()</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="6" height="10" title="8" alt="8"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d17"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e19">0%</td><td class="ctr1" id="f17">2</td><td class="ctr2" id="g17">2</td><td class="ctr1" id="h17">3</td><td class="ctr2" id="i19">3</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a9"><a href="Job.java.html#L371" class="el_method">compareTo(Job)</a></td><td class="bar" id="b18"><img src="../../../.resources/redbar.gif" width="5" height="10" title="7" alt="7"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d18"><img src="../../../.resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e20">0%</td><td class="ctr1" id="f18">2</td><td class="ctr2" id="g18">2</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a6"><a href="Job.java.html#L255" class="el_method">callAboutToBeEnqueued(Scheduler)</a></td><td class="bar" id="b19"><img src="../../../.resources/redbar.gif" width="4" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="10" height="10" title="13" alt="13"/></td><td class="ctr2" id="c5">72%</td><td class="bar" id="d19"><img src="../../../.resources/redbar.gif" width="5" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="5" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">2</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i10">6</td><td class="ctr1" id="j24">0</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a24"><a href="Job.java.html#L105" class="el_method">setWorkerThread(WorkerThread)</a></td><td class="bar" id="b20"><img src="../../../.resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c25">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h18">2</td><td class="ctr2" id="i20">2</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a16"><a href="Job.java.html#L109" class="el_method">getWorkerThread()</a></td><td class="bar" id="b21"><img src="../../../.resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c26">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a15"><a href="Job.java.html#L123" class="el_method">getScheduler()</a></td><td class="bar" id="b22"><img src="../../../.resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c27">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h22">1</td><td class="ctr2" id="i23">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a14"><a href="Job.java.html#L363" class="el_method">getErrorException()</a></td><td class="bar" id="b23"><img src="../../../.resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c28">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h23">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a27"><a href="Job.java.html#L56" class="el_method">static {...}</a></td><td class="bar" id="b24"><img src="../../../.resources/greenbar.gif" width="5" height="10" title="7" alt="7"/></td><td class="ctr2" id="c4">88%</td><td class="bar" id="d20"><img src="../../../.resources/redbar.gif" width="5" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="5" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g20">2</td><td class="ctr1" id="h25">0</td><td class="ctr2" id="i25">1</td><td class="ctr1" id="j25">0</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a0"><a href="Job.java.html#L547" class="el_method">aboutToBeDequeued(Scheduler)</a></td><td class="bar" id="b25"/><td class="ctr2" id="c29">0%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">1</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i26">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a17"><a href="Job.java.html#L100" class="el_method">Job()</a></td><td class="bar" id="b26"><img src="../../../.resources/greenbar.gif" width="12" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">0</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">0</td><td class="ctr2" id="i11">6</td><td class="ctr1" id="j26">0</td><td class="ctr2" id="k26">1</td></tr><tr><td id="a25"><a href="Job.java.html#L116" class="el_method">state()</a></td><td class="bar" id="b27"><img src="../../../.resources/greenbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d27"/><td class="ctr2" id="e27">n/a</td><td class="ctr1" id="f27">0</td><td class="ctr2" id="g27">1</td><td class="ctr1" id="h27">0</td><td class="ctr2" id="i27">1</td><td class="ctr1" id="j27">0</td><td class="ctr2" id="k27">1</td></tr><tr><td id="a26"><a href="Job.java.html#L442" class="el_method">stateChanged(Job.State)</a></td><td class="bar" id="b28"/><td class="ctr2" id="c2">100%</td><td class="bar" id="d28"/><td class="ctr2" id="e28">n/a</td><td class="ctr1" id="f28">0</td><td class="ctr2" id="g28">1</td><td class="ctr1" id="h28">0</td><td class="ctr2" id="i28">1</td><td class="ctr1" id="j28">0</td><td class="ctr2" id="k28">1</td></tr><tr><td id="a1"><a href="Job.java.html#L538" class="el_method">aboutToBeEnqueued(Scheduler)</a></td><td class="bar" id="b29"/><td class="ctr2" id="c3">100%</td><td class="bar" id="d29"/><td class="ctr2" id="e29">n/a</td><td class="ctr1" id="f29">0</td><td class="ctr2" id="g29">1</td><td class="ctr1" id="h29">0</td><td class="ctr2" id="i29">1</td><td class="ctr1" id="j29">0</td><td class="ctr2" id="k29">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job.java.html
    new file mode 100644
    index 000000000..6f7442c56
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/Job.java.html
    @@ -0,0 +1,579 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Job.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.scheduler</a> &gt; <span class="el_source">Job.java</span></div><h1>Job.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.scheduler;
    +
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.LinkedList;
    +
    +import java.lang.Comparable;
    +import java.lang.InterruptedException;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.util.Pair;
    +
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +
    +/**
    + * Abstract base class for all jobs running by the scheduler.
    + *
    + * @author Christoph Schleifenbam
    + */
    +<span class="pc bpc" id="L56" title="1 of 2 branches missed.">public abstract class Job implements Comparable&lt;Job&gt; {</span>
    +
    +    /**
    +     * The state of the job.
    +     * @author christoph
    +     *
    +     */
    +<span class="fc" id="L63">    public enum State {</span>
    +<span class="fc" id="L64">        Created,</span>
    +<span class="fc" id="L65">        Queued,</span>
    +<span class="fc" id="L66">        Running,</span>
    +<span class="fc" id="L67">        Finished,</span>
    +<span class="fc" id="L68">        Error,</span>
    +<span class="fc" id="L69">        Yielded</span>
    +    }
    +
    +    /**
    +     * This list contains the dependencies between the jobs.
    +     * Each pair defines that the \a second one's execution depends on
    +     * completion of the \a first one.
    +     *
    +     * As soon as the \a first job is finished, the pair is removed from
    +     * the list.
    +     */
    +    protected List&lt;Pair&lt;Job,Job&gt;&gt; m_dependencies;
    +    
    +    /**
    +     * List of jobs which depend on this job
    +     */
    +    private List&lt;Job&gt; m_dependees;
    +
    +    /**
    +     * A list of objects that listen to this job's state changes  
    +     */
    +    private List&lt;JobStateListener&gt; listeners;
    +    
    +    private State m_state;
    +
    +    private Scheduler m_scheduler;
    +
    +    private Exception m_errorException;
    +    
    +    private WorkerThread m_worker;
    +    
    +<span class="fc" id="L100">    private int restarts = 0;</span>
    +    
    +    private ResumePoint resumePoint;
    +    
    +    public void setWorkerThread(WorkerThread worker) {
    +<span class="nc" id="L105">    	m_worker = worker;</span>
    +<span class="nc" id="L106">     }</span>
    +    
    +    public WorkerThread getWorkerThread() {
    +<span class="nc" id="L109">        return m_worker;</span>
    +     }
    +    
    +    /**
    +     * @return The current state of the job.
    +     */
    +    public final State state() {
    +<span class="fc" id="L116">        return m_state;</span>
    +    }
    +    
    +    /**
    +     * Returns the Scheduler this Job was enqueued to.
    +     */
    +    public Scheduler getScheduler() {
    +<span class="nc" id="L123">    	return m_scheduler;</span>
    +    }
    +    
    +    /**
    +     * Adds a dependency.
    +     * This job cannot be executed, as long \a other
    +     * is not finished.
    +     */
    +    public final synchronized void addDependency(Job other) throws SchedulerException {
    +        // Dependencies of jobs can ony be changed before the job is queued.
    +        // Otherwise, race conditions would occur in which it would be undefined
    +        // if the dependency is applied or not.
    +<span class="nc bnc" id="L135" title="All 4 branches missed.">        if ( (state() != State.Created) &amp;&amp; (state() != State.Yielded) ) {</span>
    +<span class="nc" id="L136">        	throw new SchedulerException(&quot;Job dependencies cannot be added after the job has been queued.&quot;);</span>
    +        }
    +
    +        // Don't allow circular dependencies
    +<span class="nc bnc" id="L140" title="All 4 branches missed.">        if( other.dependsOn(this) || (this==other) ) {</span>
    +<span class="nc" id="L141">            throw new SchedulerException(&quot;Job dependencies are not allowed to be cyclic.&quot;);</span>
    +        }
    +
    +<span class="nc bnc" id="L144" title="All 2 branches missed.">        if (m_dependencies == null)</span>
    +<span class="nc" id="L145">            m_dependencies = new LinkedList&lt;Pair&lt;Job,Job&gt;&gt;();</span>
    +        
    +<span class="nc" id="L147">        synchronized (m_dependencies) {</span>
    +<span class="nc" id="L148">            Pair&lt;Job,Job&gt; newDependency = new Pair&lt;Job,Job&gt;(other, this);</span>
    +<span class="nc" id="L149">            m_dependencies.add(newDependency);</span>
    +<span class="nc" id="L150">            other.addDependee(this);</span>
    +        }
    +<span class="nc" id="L152">        callDependenciesChanged();</span>
    +<span class="nc" id="L153">    }</span>
    +    
    +    /**
    +     * Removes a dependency.
    +     * \sa addDependency
    +     */
    +    public final void removeDependency(Job other) {
    +<span class="nc bnc" id="L160" title="All 2 branches missed.">        if (m_dependencies == null)</span>
    +<span class="nc" id="L161">            return;</span>
    +<span class="nc" id="L162">        synchronized(m_dependencies) {</span>
    +<span class="nc" id="L163">            List&lt;Pair&lt;Job,Job&gt;&gt; doomed = new LinkedList&lt;Pair&lt;Job,Job&gt;&gt;();</span>
    +<span class="nc bnc" id="L164" title="All 2 branches missed.">            for (Pair&lt;Job,Job&gt; p: m_dependencies ) {</span>
    +<span class="nc bnc" id="L165" title="All 4 branches missed.">                if ( (p.first == other) &amp;&amp; (p.second == this) ) {</span>
    +<span class="nc" id="L166">                    doomed.add(p);</span>
    +<span class="nc" id="L167">                    removeDependee(other);</span>
    +                }
    +            }
    +<span class="nc" id="L170">            m_dependencies.removeAll(doomed);</span>
    +        }
    +<span class="nc" id="L172">        callDependenciesChanged();</span>
    +<span class="nc" id="L173">    }</span>
    +
    +    /**
    +     * Checks recursive whether this job depends on job \a other.
    +     * @param other the job to check dependency of.
    +     * @return true, when the job depends on \a other, otherwise false.
    +     */
    +    public final boolean dependsOn(Job other) {
    +<span class="nc bnc" id="L181" title="All 2 branches missed.">        if (m_dependencies == null)</span>
    +<span class="nc" id="L182">            return false;</span>
    +<span class="nc" id="L183">        synchronized(m_dependencies) {</span>
    +<span class="nc bnc" id="L184" title="All 2 branches missed.">            for (Pair&lt;Job,Job&gt; p: m_dependencies ) {</span>
    +<span class="nc bnc" id="L185" title="All 4 branches missed.">                if ( (p.first == other) &amp;&amp; (p.second == this) ) {</span>
    +<span class="nc" id="L186">                    return true;</span>
    +<span class="nc bnc" id="L187" title="All 4 branches missed.">                } else if ( (p.second == this) &amp;&amp; p.first.dependsOn(other)) {</span>
    +<span class="nc" id="L188">                    return true;</span>
    +                }
    +            }
    +<span class="nc" id="L191">            return false;</span>
    +        }
    +    }
    +
    +    private final synchronized void addDependee(Job other) {
    +<span class="nc bnc" id="L196" title="All 2 branches missed.">        if (m_dependees == null)</span>
    +<span class="nc" id="L197">            m_dependees = new ArrayList&lt;Job&gt;();</span>
    +<span class="nc" id="L198">        synchronized (m_dependees) {</span>
    +<span class="nc" id="L199">            m_dependees.add(other);</span>
    +        }
    +<span class="nc" id="L201">    }</span>
    +    
    +    private final synchronized void removeDependee(Job other) {
    +<span class="nc bnc" id="L204" title="All 2 branches missed.">        if (m_dependees == null)</span>
    +<span class="nc" id="L205">            return;</span>
    +<span class="nc" id="L206">        synchronized (m_dependees) {</span>
    +<span class="nc" id="L207">            m_dependees.remove(other);</span>
    +        }
    +<span class="nc" id="L209">    }</span>
    +    
    +    /**
    +     * Executes the job. Makes sure that all dependencies are met. 
    +     * 
    +     * @return The time required to execute the Job in milliseconds.
    +     * @throws Exception
    +     */
    +    final public long execute() throws Exception {
    +<span class="nc" id="L218">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L219">        long timer = System.currentTimeMillis();</span>
    +        try {
    +<span class="nc" id="L221">            setState(State.Running);</span>
    +<span class="nc" id="L222">            restart();</span>
    +            
    +            /*Idiot/bad programmer proofing*/
    +<span class="nc bnc" id="L225" title="All 4 branches missed.">            assert (!dbs.isDBSessionActive());            </span>
    +<span class="nc bnc" id="L226" title="All 2 branches missed.">            if (dbs.isDBSessionActive()) {</span>
    +<span class="nc" id="L227">                dbs.rollbackDBSession();</span>
    +<span class="nc" id="L228">                setState(State.Error); //No uncommitted sessions are tolerated</span>
    +<span class="nc" id="L229">            } else {</span>
    +<span class="nc bnc" id="L230" title="All 2 branches missed.">                if (state() != State.Yielded)</span>
    +<span class="nc" id="L231">                    setState(State.Finished);</span>
    +            }   
    +<span class="nc" id="L233">        } catch(Exception e) {</span>
    +            
    +<span class="nc bnc" id="L235" title="All 2 branches missed.">            if (dbs.isDBSessionActive()) {</span>
    +<span class="nc" id="L236">                dbs.rollbackDBSession();</span>
    +            }
    +            
    +            // In case of an exception, state becomes Error
    +<span class="nc" id="L240">            m_errorException = e;</span>
    +<span class="nc" id="L241">            setState(State.Error);</span>
    +            // the Exception itself is forwarded
    +<span class="nc" id="L243">            throw e;</span>
    +        }
    +<span class="nc" id="L245">        return System.currentTimeMillis() - timer;</span>
    +    }
    +
    +    /**
    +     * Sets the job's state to Queued and informs the job about the new
    +     * scheduler.
    +     * This method should only be called by Scheduler.enqueue.
    +     * @throws SchedulerException If the job is already enqueued.
    +     */
    +    public final void callAboutToBeEnqueued(Scheduler s) throws SchedulerException {
    +<span class="pc bpc" id="L255" title="1 of 2 branches missed.">        if (m_scheduler != null) {</span>
    +<span class="nc" id="L256">            throw new SchedulerException(&quot;This job is already enqueued in a scheduler.&quot;);</span>
    +        }
    +<span class="fc" id="L258">        aboutToBeEnqueued(s);</span>
    +<span class="fc" id="L259">        m_state = State.Queued;</span>
    +<span class="fc" id="L260">        m_scheduler = s;</span>
    +<span class="fc" id="L261">    }</span>
    +
    +    /**
    +     * Sets the job's state back from Queued to Created and informs about being
    +     * dequeud.
    +     * This method should only be called by Scheduler.dequeue.
    +     */
    +    public final void callAboutToBeDequeued(Scheduler s) {
    +<span class="nc" id="L269">        aboutToBeDequeued(s);</span>
    +
    +<span class="nc bnc" id="L271" title="All 2 branches missed.">        if (m_state == State.Queued) {</span>
    +<span class="nc" id="L272">            m_state = State.Created;</span>
    +        }
    +
    +<span class="nc" id="L275">        m_scheduler = null;</span>
    +<span class="nc" id="L276">    }</span>
    +
    +
    +    /**
    +     * The priority of the job is the order of job within the scheduler's queue.
    +     * That leads to 0 being taking he highest precedence, then the higher numbers.
    +     * It is not adviced to change the job's priority after it has been enqueued. That
    +     * might lead to undefined behaviour.
    +     * @return The priority of the job.
    +     */
    +    abstract public long priority();
    +
    +    /**
    +     * @return All unfinished jobs this job depends on.
    +     */
    +    public final List&lt;Job&gt; dependencies() {
    +<span class="pc bpc" id="L292" title="1 of 2 branches missed.">        if (m_dependencies == null)</span>
    +<span class="fc" id="L293">            return Collections.EMPTY_LIST;</span>
    +        
    +<span class="nc" id="L295">        List&lt;Job&gt; result = new LinkedList&lt;Job&gt;();</span>
    +<span class="nc" id="L296">        synchronized (m_dependencies) {</span>
    +<span class="nc bnc" id="L297" title="All 2 branches missed.">            for (Pair&lt;Job,Job&gt; p: m_dependencies) {</span>
    +<span class="nc bnc" id="L298" title="All 2 branches missed.">                if (p.second == this) {</span>
    +<span class="nc" id="L299">                    result.add(p.first);</span>
    +                }
    +            }
    +        }
    +<span class="nc" id="L303">        return result;</span>
    +    }
    +
    +    /**
    +     * Waits for the job to finish.
    +     * Note that this method even returns when the job's state changes to Error.
    +     */
    +    public final void waitForFinished() {
    +    	try {
    +<span class="nc" id="L312">            synchronized (this) {</span>
    +                // if this method is running inside of a WorkerThread
    +                // we try to pass the job we're waiting for to the thread.
    +<span class="nc bnc" id="L315" title="All 2 branches missed.">                if (Thread.currentThread() instanceof WorkerThread) {</span>
    +<span class="nc" id="L316">                    WorkerThread t = (WorkerThread) Thread.currentThread();</span>
    +<span class="nc" id="L317">                    t.takeJob(this);</span>
    +<span class="nc" id="L318">                } else {</span>
    +<span class="nc" id="L319">                    throw new Exception();</span>
    +                }
    +            }
    +<span class="nc" id="L322">        } catch (Exception e) {</span>
    +            // if something went wrong with taking the job
    +            // ok - we might be stuck...
    +<span class="nc bnc" id="L325" title="All 2 branches missed.">            if (m_scheduler.getSchedulerStats().getIdleWorkerThreads() == 0) {</span>
    +<span class="nc" id="L326">                m_scheduler.startOneShotWorkerThread();</span>
    +            }
    +        }
    +<span class="nc" id="L329">        synchronized (this) {</span>
    +<span class="nc bnc" id="L330" title="All 2 branches missed.">            while (state() != State.Finished) {</span>
    +<span class="nc bnc" id="L331" title="All 2 branches missed.">                if (state() == State.Error) {</span>
    +<span class="nc" id="L332">                    return;</span>
    +                }
    +                try {
    +<span class="nc" id="L335">                    wait();</span>
    +<span class="nc" id="L336">                } catch (InterruptedException e) {</span>
    +                }
    +            }
    +        }
    +<span class="nc" id="L340">    }</span>
    +
    +    /**
    +     * Checks, whether all dependencies are met and the job can be executed.
    +     * @return true, when all dependencies are met.
    +     */
    +    public boolean canExecute() {
    +<span class="fc" id="L347">        final List&lt;Job&gt; deps = dependencies();</span>
    +<span class="fc" id="L348">        Iterator&lt;Job&gt; it = deps.iterator();</span>
    +<span class="pc bpc" id="L349" title="1 of 2 branches missed.">        while (it.hasNext()) {</span>
    +<span class="nc" id="L350">            Job j = it.next();</span>
    +<span class="nc bnc" id="L351" title="All 4 branches missed.">            if (j.state() != State.Finished &amp;&amp; j.state() != State.Error) {</span>
    +<span class="nc" id="L352">                return false;</span>
    +            }
    +        }
    +<span class="fc" id="L355">        return true;</span>
    +    }
    +    
    +    /**
    +     * Return the exception that caused this Job to quit
    +     * @return An exception object or null if the job has finished normally
    +     */
    +    public final Exception getErrorException() {
    +<span class="nc" id="L363">        return this.m_errorException;</span>
    +    }
    +
    +    /**
    +     * XXX bogus method, only used for putting it in into a Pair.
    +     */
    +    public int compareTo(Job other)
    +    {
    +<span class="nc bnc" id="L371" title="All 2 branches missed.">        return (this == other) ? 0 : 1;</span>
    +    }
    +
    +    /**
    +     * Protected default constructor.
    +     */
    +<span class="fc" id="L377">    protected Job() {</span>
    +<span class="fc" id="L378">        m_scheduler = null;</span>
    +<span class="fc" id="L379">        m_errorException = null;</span>
    +<span class="fc" id="L380">        setState( State.Created );</span>
    +<span class="fc" id="L381">    }</span>
    +
    +    /**
    +     * Sets the job's state.
    +     * @param s The new state.
    +     */
    +    protected final void setState(State s) {
    +<span class="pc bpc" id="L388" title="1 of 2 branches missed.">        if (m_state == s) {</span>
    +<span class="nc" id="L389">            return;</span>
    +        }
    +
    +<span class="fc" id="L392">        m_state = s;</span>
    +
    +<span class="pc bpc" id="L394" title="4 of 6 branches missed.">        if ((m_state == State.Finished || m_state == State.Error) &amp;&amp; m_dependencies != null) {</span>
    +            // remove the job from the dependency list
    +<span class="nc" id="L396">            List&lt;Job&gt; unblockedJobs = new LinkedList&lt;Job&gt;();</span>
    +<span class="nc" id="L397">            synchronized (m_dependencies) {</span>
    +<span class="nc" id="L398">                List&lt;Pair&lt;Job,Job&gt;&gt; doomed = new LinkedList&lt;Pair&lt;Job,Job&gt;&gt;();</span>
    +<span class="nc bnc" id="L399" title="All 2 branches missed.">                for (Pair&lt;Job,Job&gt; p: m_dependencies) {</span>
    +<span class="nc bnc" id="L400" title="All 2 branches missed.">                    if (p.first == this) {</span>
    +<span class="nc" id="L401">                        doomed.add(p);</span>
    +<span class="nc" id="L402">                        unblockedJobs.add(p.second);</span>
    +                    }
    +                }
    +<span class="nc" id="L405">                m_dependencies.removeAll(doomed);</span>
    +            }
    +            /* tell all jobs depending on the now finished on to forward that
    +             * to the scheduler
    +             */
    +<span class="nc bnc" id="L410" title="All 2 branches missed.">            for (Job j: unblockedJobs) {</span>
    +<span class="nc" id="L411">                j.callDependenciesChanged();</span>
    +            }
    +        }
    +        
    +<span class="pc bpc" id="L415" title="4 of 6 branches missed.">        if ((m_state == State.Finished || m_state == State.Error) &amp;&amp; m_dependees != null) {</span>
    +<span class="nc" id="L416">            synchronized (m_dependees) {</span>
    +<span class="nc bnc" id="L417" title="All 2 branches missed.">                for (Job p: m_dependees) {</span>
    +<span class="nc" id="L418">                    p.callDependenciesChanged();</span>
    +                }
    +<span class="nc" id="L420">                m_dependees.clear();</span>
    +            }
    +        }
    +
    +<span class="pc bpc" id="L424" title="1 of 2 branches missed.">        if (m_scheduler != null) {</span>
    +<span class="nc" id="L425">            m_scheduler.jobStateChanged(this, s);</span>
    +        }
    +        
    +<span class="fc" id="L428">        stateChanged(m_state);</span>
    +<span class="fc" id="L429">        fireStateChangedEvent();</span>
    +        
    +<span class="pc" id="L431">        synchronized(this) {</span>
    +<span class="fc" id="L432">        	notifyAll();</span>
    +        }
    +<span class="fc" id="L434">    }</span>
    +
    +    /**
    +     * Called, when the state of the job changed to \a state.
    +     * The default implementation does nothing.
    +     */
    +    protected void stateChanged(State state) {
    +        
    +<span class="fc" id="L442">    }</span>
    +
    +    /**
    +     * If the job is queued to a scheduler, this methods tells the scheduler,
    +     * that the job's dependencies have changed.
    +     */
    +    protected final void callDependenciesChanged() {
    +<span class="nc bnc" id="L449" title="All 2 branches missed.">        if (m_scheduler != null) {</span>
    +<span class="nc" id="L450">            m_scheduler.jobDependenciesChanged(this);</span>
    +        }
    +<span class="nc" id="L452">    }</span>
    +
    +    /**
    +     * Restart a failing job by keeping count of the number of restarts
    +     * @throws Exception to signify that the maximum number of restarts
    +     * was reached
    +     */
    +    protected void restart() throws Exception {
    +<span class="nc" id="L460">        restarts++;</span>
    +<span class="nc bnc" id="L461" title="All 2 branches missed.">        if (restarts &gt;= 5) {</span>
    +<span class="nc" id="L462">            throw new Exception(&quot;Too many restarts - failing job&quot;);</span>
    +        }
    +<span class="nc" id="L464">        run();</span>
    +<span class="nc" id="L465">    }</span>
    +    
    +    /**
    +     * Run the job.
    +     * 
    +     * @throws Exception
    +     *                 If thrown, the job ends up in Error state.
    +     */
    +    abstract protected void run() throws Exception;
    +
    +    /**
    +     * Stop execution of the job until 
    +     * @param p
    +     * @throws SchedulerException 
    +     */
    +    public void yield(ResumePoint p) throws SchedulerException {
    +<span class="nc" id="L481">        synchronized (this) {</span>
    +<span class="nc" id="L482">            System.err.println(Thread.currentThread().getId() + &quot;:&quot; + toString() + &quot;: State is :&quot; + m_state);</span>
    +<span class="nc bnc" id="L483" title="All 2 branches missed.">            if (m_state == State.Running) {</span>
    +<span class="nc" id="L484">                setState(State.Yielded);</span>
    +<span class="nc" id="L485">                this.resumePoint = p;</span>
    +<span class="nc" id="L486">                m_scheduler.yield(this, p);</span>
    +<span class="nc" id="L487">            } else {</span>
    +<span class="nc" id="L488">                throw new SchedulerException(&quot;Cannot yield non-running job: &quot; </span>
    +<span class="nc" id="L489">                        + this + &quot; (state was:&quot; + state() + &quot;)&quot;);</span>
    +            }
    +        }
    +<span class="nc" id="L492">    }</span>
    +    
    +    public long resume() throws Exception {
    +<span class="nc" id="L495">        long ts = System.currentTimeMillis();</span>
    +<span class="nc" id="L496">        DBService dbs = AlitheiaCore.getInstance().getDBService();</span>
    +
    +<span class="nc bnc" id="L498" title="All 2 branches missed.">        if (state() != State.Yielded)</span>
    +<span class="nc" id="L499">            throw new SchedulerException(&quot;Cannot resume a non-yielded job&quot;);</span>
    +        
    +<span class="nc bnc" id="L501" title="All 2 branches missed.">        if (resumePoint == null)</span>
    +<span class="nc" id="L502">            throw new SchedulerException(&quot;Resume point is null&quot;);</span>
    +        
    +        try {
    +<span class="nc" id="L505">            setState(State.Running);</span>
    +<span class="nc" id="L506">            resumePoint.resume();</span>
    +                       
    +<span class="nc bnc" id="L508" title="All 4 branches missed.">            assert (!dbs.isDBSessionActive());            </span>
    +<span class="nc bnc" id="L509" title="All 2 branches missed.">            if (dbs.isDBSessionActive()) {</span>
    +<span class="nc" id="L510">                dbs.rollbackDBSession();</span>
    +<span class="nc" id="L511">                setState(State.Error); //No uncommitted sessions are tolerated</span>
    +<span class="nc" id="L512">            } else {</span>
    +<span class="nc" id="L513">                setState(State.Finished);</span>
    +            }   
    +<span class="nc" id="L515">        } catch(Exception e) {</span>
    +            
    +<span class="nc bnc" id="L517" title="All 2 branches missed.">            if (dbs.isDBSessionActive()) {</span>
    +<span class="nc" id="L518">                dbs.rollbackDBSession();</span>
    +            }
    +            
    +            // In case of an exception, state becomes Error
    +<span class="nc" id="L522">            m_errorException = e;</span>
    +<span class="nc" id="L523">            setState(State.Error);</span>
    +            // the Exception itself is forwarded
    +<span class="nc" id="L525">            throw e;</span>
    +        }
    +        
    +<span class="nc" id="L528">        return System.currentTimeMillis() - ts;</span>
    +    }
    +    
    +    /**
    +     * This method is called during queueing, right before the job is added to
    +     * the work queue.
    +     * The job is not in state Queued at this time.
    +     * @param s The scheduler, the job has been enqueued to.
    +     */
    +    protected void aboutToBeEnqueued(Scheduler s) {
    +<span class="fc" id="L538">    }</span>
    +
    +    /**
    +     * This method is called right before the job is dequeued without being
    +     * executed.
    +     * The job is still in it's previoues state.
    +     * @parem s The scheduler, the job is dequeued from.
    +     */
    +    protected void aboutToBeDequeued(Scheduler s) {
    +<span class="nc" id="L547">    }</span>
    +    
    +    /**
    +     * Add a listener from the job's list of state listeners
    +     */
    +    public final synchronized void addJobStateListener(JobStateListener l) {
    +<span class="nc bnc" id="L553" title="All 2 branches missed.">        if (listeners == null)</span>
    +<span class="nc" id="L554">            listeners = new ArrayList&lt;JobStateListener&gt;();</span>
    +<span class="nc" id="L555">        listeners.add(l);</span>
    +<span class="nc" id="L556">    }</span>
    +    
    +    /**
    +     * Remove a listener from the job's list of state listeners
    +     * @param l The listener to remove'
    +     */
    +    public final synchronized void removeJobStateListener(JobStateListener l) {
    +<span class="nc bnc" id="L563" title="All 2 branches missed.">        if (listeners == null)</span>
    +<span class="nc" id="L564">            return;</span>
    +<span class="nc" id="L565">        listeners.remove(l);</span>
    +<span class="nc" id="L566">    }</span>
    +    
    +    /**
    +     * Called when the job's state has changed to notify clients about that.
    +     */
    +    private void fireStateChangedEvent() {
    +<span class="pc bpc" id="L572" title="1 of 2 branches missed.">        if (listeners == null)</span>
    +<span class="fc" id="L573">            return;</span>
    +<span class="nc bnc" id="L574" title="All 2 branches missed.">        for (JobStateListener l : listeners) {</span>
    +<span class="nc" id="L575">            l.jobStateChanged(this, m_state);</span>
    +        }
    +<span class="nc" id="L577">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerException.html
    new file mode 100644
    index 000000000..ac95d74a1
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.scheduler</a> &gt; <span class="el_class">SchedulerException</span></div><h1>SchedulerException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="SchedulerException.java.html#L44" class="el_method">SchedulerException(String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="SchedulerException.java.html#L48" class="el_method">getMessage()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerException.java.html
    new file mode 100644
    index 000000000..676f0251d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerException.java.html
    @@ -0,0 +1,52 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.scheduler</a> &gt; <span class="el_source">SchedulerException.java</span></div><h1>SchedulerException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.scheduler;
    +
    +/**
    + * Base class for scheduler exceptions. 
    + */
    +public class SchedulerException extends Exception {
    +
    +    private static final long serialVersionUID = 1L;
    +
    +    public SchedulerException(String message) {
    +<span class="nc" id="L44">        super(message);</span>
    +<span class="nc" id="L45">    }</span>
    +
    +    public String getMessage() {
    +<span class="nc" id="L48">        return super.getMessage();</span>
    +    }
    +}
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerStats.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerStats.html
    new file mode 100644
    index 000000000..909305e71
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerStats.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerStats</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.scheduler</a> &gt; <span class="el_class">SchedulerStats</span></div><h1>SchedulerStats</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">129 of 279</td><td class="ctr2">54%</td><td class="bar">5 of 10</td><td class="ctr2">50%</td><td class="ctr1">16</td><td class="ctr2">28</td><td class="ctr1">28</td><td class="ctr2">63</td><td class="ctr1">13</td><td class="ctr2">23</td></tr></tfoot><tbody><tr><td id="a10"><a href="SchedulerStats.java.html#L168" class="el_method">getRunJobs()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="113" height="10" title="37" alt="37"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="SchedulerStats.java.html#L94" class="el_method">addFailedJob(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="104" height="10" title="34" alt="34"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a20"><a href="SchedulerStats.java.html#L127" class="el_method">removeRunJob(Job)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="36" height="10" title="12" alt="12"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="SchedulerStats.java.html#L70" class="el_method">decTotalJobs()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="21" height="10" title="7" alt="7"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a16"><a href="SchedulerStats.java.html#L74" class="el_method">incFinishedJobs()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="21" height="10" title="7" alt="7"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a17"><a href="SchedulerStats.java.html#L86" class="el_method">incIdleWorkerThreads()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="21" height="10" title="7" alt="7"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="SchedulerStats.java.html#L90" class="el_method">decIdleWorkerThreads()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="21" height="10" title="7" alt="7"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a12"><a href="SchedulerStats.java.html#L132" class="el_method">getTotalJobs()</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a11"><a href="SchedulerStats.java.html#L144" class="el_method">getRunningJobs()</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a15"><a href="SchedulerStats.java.html#L148" class="el_method">getWorkerThreads()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a9"><a href="SchedulerStats.java.html#L152" class="el_method">getIdleWorkerThreads()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a7"><a href="SchedulerStats.java.html#L160" class="el_method">getFailedJobTypes()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a14"><a href="SchedulerStats.java.html#L164" class="el_method">getWaitingJobTypes()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a22"><a href="SchedulerStats.java.html#L43" class="el_method">SchedulerStats()</a></td><td class="bar" id="b13"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="39" alt="39"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a21"><a href="SchedulerStats.java.html#L110" class="el_method">removeWaitingJob(String)</a></td><td class="bar" id="b14"><img src="../../../.resources/greenbar.gif" width="107" height="10" title="35" alt="35"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="30" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="90" height="10" title="3" alt="3"/></td><td class="ctr2" id="e1">75%</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a2"><a href="SchedulerStats.java.html#L102" class="el_method">addWaitingJob(String)</a></td><td class="bar" id="b15"><img src="../../../.resources/greenbar.gif" width="104" height="10" title="34" alt="34"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"><img src="../../../.resources/greenbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a1"><a href="SchedulerStats.java.html#L122" class="el_method">addRunJob(Job)</a></td><td class="bar" id="b16"><img src="../../../.resources/greenbar.gif" width="36" height="10" title="12" alt="12"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a18"><a href="SchedulerStats.java.html#L66" class="el_method">incTotalJobs()</a></td><td class="bar" id="b17"><img src="../../../.resources/greenbar.gif" width="21" height="10" title="7" alt="7"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a19"><a href="SchedulerStats.java.html#L78" class="el_method">incWorkerThreads()</a></td><td class="bar" id="b18"><img src="../../../.resources/greenbar.gif" width="21" height="10" title="7" alt="7"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">0</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">0</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a5"><a href="SchedulerStats.java.html#L82" class="el_method">decWorkerThreads()</a></td><td class="bar" id="b19"><img src="../../../.resources/greenbar.gif" width="21" height="10" title="7" alt="7"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">0</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">0</td><td class="ctr2" id="i13">2</td><td class="ctr1" id="j19">0</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a13"><a href="SchedulerStats.java.html#L136" class="el_method">getWaitingJobs()</a></td><td class="bar" id="b20"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">0</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">0</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">0</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a8"><a href="SchedulerStats.java.html#L140" class="el_method">getFinishedJobs()</a></td><td class="bar" id="b21"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">0</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">0</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">0</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a6"><a href="SchedulerStats.java.html#L156" class="el_method">getFailedJobs()</a></td><td class="bar" id="b22"><img src="../../../.resources/greenbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">0</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">0</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">0</td><td class="ctr2" id="k22">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerStats.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerStats.java.html
    new file mode 100644
    index 000000000..ac4845165
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/SchedulerStats.java.html
    @@ -0,0 +1,177 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerStats.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.scheduler</a> &gt; <span class="el_source">SchedulerStats.java</span></div><h1>SchedulerStats.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.scheduler;
    +
    +import java.util.ArrayList;
    +import java.util.HashMap;
    +import java.util.List;
    +import java.util.Vector;
    +
    +import org.apache.commons.collections.list.SynchronizedList;
    +
    +<span class="fc" id="L43">public class SchedulerStats {</span>
    +    // the number of jobs currently in the scheduler
    +<span class="fc" id="L45">    private long totalJobs = 0;</span>
    +    // the number of jobs which were finished
    +<span class="fc" id="L47">    private long finishedJobs = 0;</span>
    +    // the number of jobs currently waiting
    +<span class="fc" id="L49">    private long waitingJobs = 0;</span>
    +    // the number of jobs currently running
    +<span class="fc" id="L51">    private long runningJobs = 0;</span>
    +    // the total number of threads available for scheduling
    +<span class="fc" id="L53">    private long workerThreads = 0;</span>
    +    // the number of threads being idle at the moment
    +<span class="fc" id="L55">    private long idleWorkerThreads = 0;</span>
    +    // the number of jobs which failed
    +<span class="fc" id="L57">    private long failedJobs = 0;</span>
    +    //Classname-&gt;Failed Jobs 
    +<span class="fc" id="L59">    private HashMap&lt;String, Integer&gt; failedJobTypes = new HashMap&lt;String, Integer&gt;();</span>
    +    //Classname-&gt;Num jobs waiting
    +<span class="fc" id="L61">    private HashMap&lt;String, Integer&gt; waitingJobTypes = new HashMap&lt;String, Integer&gt;();</span>
    +    //Running jobs
    +<span class="fc" id="L63">    private List&lt;Job&gt; runJobs = new Vector&lt;Job&gt;();</span>
    +    
    +    public synchronized void incTotalJobs() {
    +<span class="fc" id="L66">        totalJobs++;</span>
    +<span class="fc" id="L67">    }</span>
    +
    +    public synchronized void decTotalJobs() {
    +<span class="nc" id="L70">        totalJobs--;</span>
    +<span class="nc" id="L71">    }</span>
    +   
    +    public synchronized void incFinishedJobs() {
    +<span class="nc" id="L74">        finishedJobs++;</span>
    +<span class="nc" id="L75">    }</span>
    +    
    +    public synchronized void incWorkerThreads() {
    +<span class="fc" id="L78">        workerThreads++;</span>
    +<span class="fc" id="L79">    }</span>
    +    
    +    public synchronized void decWorkerThreads() {
    +<span class="fc" id="L82">        workerThreads--;</span>
    +<span class="fc" id="L83">    }</span>
    +    
    +    public synchronized void incIdleWorkerThreads() {
    +<span class="nc" id="L86">        idleWorkerThreads++;</span>
    +<span class="nc" id="L87">    }</span>
    +    
    +    public synchronized void decIdleWorkerThreads() {
    +<span class="nc" id="L90">        idleWorkerThreads--;</span>
    +<span class="nc" id="L91">    }</span>
    +    
    +    public synchronized void addFailedJob(String classname) {
    +<span class="nc" id="L94">        this.failedJobs++;</span>
    +<span class="nc bnc" id="L95" title="All 2 branches missed.">        if (failedJobTypes.containsKey(classname))</span>
    +<span class="nc" id="L96">            failedJobTypes.put(classname, (failedJobTypes.get(classname) + 1));</span>
    +        else
    +<span class="nc" id="L98">            failedJobTypes.put(classname, 1);</span>
    +<span class="nc" id="L99">    }</span>
    +
    +    public synchronized void addWaitingJob(String classname) {
    +<span class="fc" id="L102">        this.waitingJobs++;</span>
    +<span class="fc bfc" id="L103" title="All 2 branches covered.">        if (waitingJobTypes.containsKey(classname))</span>
    +<span class="fc" id="L104">            waitingJobTypes.put(classname, (waitingJobTypes.get(classname) + 1));</span>
    +        else
    +<span class="fc" id="L106">            waitingJobTypes.put(classname, 1);</span>
    +<span class="fc" id="L107">    }</span>
    +    
    +    public synchronized void removeWaitingJob(String classname) {
    +<span class="fc" id="L110">        this.waitingJobs --;</span>
    +<span class="pc bpc" id="L111" title="1 of 2 branches missed.">        if (waitingJobTypes.containsKey(classname)) {</span>
    +<span class="fc" id="L112">            int jobs = waitingJobTypes.get(classname) - 1;</span>
    +<span class="fc bfc" id="L113" title="All 2 branches covered.">            if (jobs == 0) {</span>
    +<span class="fc" id="L114">                waitingJobTypes.remove(classname);</span>
    +            }
    +            
    +<span class="fc" id="L117">            waitingJobTypes.put(classname, jobs);</span>
    +        }
    +<span class="fc" id="L119">    }</span>
    + 
    +    public synchronized void addRunJob(Job j) {
    +<span class="fc" id="L122">        this.runningJobs++;</span>
    +<span class="fc" id="L123">        this.runJobs.add(j);</span>
    +<span class="fc" id="L124">    }</span>
    +    
    +    public synchronized void removeRunJob(Job j) {
    +<span class="nc" id="L127">        this.runningJobs--;</span>
    +<span class="nc" id="L128">        this.runJobs.remove(j);</span>
    +<span class="nc" id="L129">    }</span>
    +    
    +    public long getTotalJobs() {
    +<span class="nc" id="L132">        return totalJobs;</span>
    +    }
    +
    +    public long getWaitingJobs() {
    +<span class="fc" id="L136">        return waitingJobs;</span>
    +    }
    +
    +    public long getFinishedJobs() {
    +<span class="fc" id="L140">        return finishedJobs;</span>
    +    }
    +
    +    public long getRunningJobs() {
    +<span class="nc" id="L144">        return runningJobs;</span>
    +    }
    +
    +    public long getWorkerThreads() {
    +<span class="nc" id="L148">        return workerThreads;</span>
    +    }
    +
    +    public long getIdleWorkerThreads() {
    +<span class="nc" id="L152">        return idleWorkerThreads;</span>
    +    }
    +
    +    public long getFailedJobs() {
    +<span class="fc" id="L156">        return failedJobs;</span>
    +    }
    +    
    +    public HashMap&lt;String, Integer&gt; getFailedJobTypes() {
    +<span class="nc" id="L160">        return failedJobTypes;</span>
    +    }
    +    
    +    public HashMap&lt;String, Integer&gt; getWaitingJobTypes() {
    +<span class="nc" id="L164">        return waitingJobTypes;</span>
    +    }
    +    
    +    public synchronized List&lt;String&gt; getRunJobs() {
    +<span class="nc" id="L168">        Job[] jobs = new Job[runJobs.size()];</span>
    +<span class="nc" id="L169">        runJobs.toArray(jobs);</span>
    +<span class="nc" id="L170">        List&lt;String&gt; jobDescr = new ArrayList&lt;String&gt;();</span>
    +<span class="nc bnc" id="L171" title="All 2 branches missed.">        for (Job j : jobs) {</span>
    +<span class="nc" id="L172">            jobDescr.add(j.toString());</span>
    +        }
    +<span class="nc" id="L174">        return jobDescr;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/index.html
    new file mode 100644
    index 000000000..4433b4ee3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.scheduler</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.scheduler</span></div><h1>eu.sqooss.service.scheduler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">893 of 1,215</td><td class="ctr2">27%</td><td class="bar">116 of 132</td><td class="ctr2">12%</td><td class="ctr1">101</td><td class="ctr2">125</td><td class="ctr1">196</td><td class="ctr2">271</td><td class="ctr1">37</td><td class="ctr2">59</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="Job.html" class="el_class">Job</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="105" height="10" title="736" alt="736"/><img src="../../../.resources/greenbar.gif" width="14" height="10" title="103" alt="103"/></td><td class="ctr2" id="c2">12%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="109" height="10" title="111" alt="111"/><img src="../../../.resources/greenbar.gif" width="10" height="10" title="11" alt="11"/></td><td class="ctr2" id="e1">9%</td><td class="ctr1" id="f0">81</td><td class="ctr2" id="g0">91</td><td class="ctr1" id="h0">164</td><td class="ctr2" id="i0">197</td><td class="ctr1" id="j0">20</td><td class="ctr2" id="k0">30</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a3"><a href="SchedulerStats.html" class="el_class">SchedulerStats</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="18" height="10" title="129" alt="129"/><img src="../../../.resources/greenbar.gif" width="21" height="10" title="150" alt="150"/></td><td class="ctr2" id="c1">54%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="4" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="4" height="10" title="5" alt="5"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">28</td><td class="ctr1" id="h1">28</td><td class="ctr2" id="i1">63</td><td class="ctr1" id="j1">13</td><td class="ctr2" id="k1">23</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="Job$State.html" class="el_class">Job.State</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="3" height="10" title="21" alt="21"/><img src="../../../.resources/greenbar.gif" width="9" height="10" title="69" alt="69"/></td><td class="ctr2" id="c0">77%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a2"><a href="SchedulerException.html" class="el_class">SchedulerException</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="1" height="10" title="7" alt="7"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">2</td><td class="ctr2" id="k3">2</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/index.source.html
    new file mode 100644
    index 000000000..3bb3d1094
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.scheduler/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.scheduler</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.scheduler</span></div><h1>eu.sqooss.service.scheduler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">893 of 1,215</td><td class="ctr2">27%</td><td class="bar">116 of 132</td><td class="ctr2">12%</td><td class="ctr1">101</td><td class="ctr2">125</td><td class="ctr1">196</td><td class="ctr2">271</td><td class="ctr1">37</td><td class="ctr2">59</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="Job.java.html" class="el_source">Job.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="97" height="10" title="757" alt="757"/><img src="../../../.resources/greenbar.gif" width="22" height="10" title="172" alt="172"/></td><td class="ctr2" id="c1">19%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="109" height="10" title="111" alt="111"/><img src="../../../.resources/greenbar.gif" width="10" height="10" title="11" alt="11"/></td><td class="ctr2" id="e1">9%</td><td class="ctr1" id="f0">83</td><td class="ctr2" id="g0">95</td><td class="ctr1" id="h0">165</td><td class="ctr2" id="i0">205</td><td class="ctr1" id="j0">22</td><td class="ctr2" id="k0">34</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">2</td></tr><tr><td id="a2"><a href="SchedulerStats.java.html" class="el_source">SchedulerStats.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="16" height="10" title="129" alt="129"/><img src="../../../.resources/greenbar.gif" width="19" height="10" title="150" alt="150"/></td><td class="ctr2" id="c0">54%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="4" height="10" title="5" alt="5"/><img src="../../../.resources/greenbar.gif" width="4" height="10" title="5" alt="5"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f1">16</td><td class="ctr2" id="g1">28</td><td class="ctr1" id="h1">28</td><td class="ctr2" id="i1">63</td><td class="ctr1" id="j1">13</td><td class="ctr2" id="k1">23</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="SchedulerException.java.html" class="el_source">SchedulerException.java</a></td><td class="bar" id="b2"/><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k2">2</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AccessorException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AccessorException.html
    new file mode 100644
    index 000000000..f4bbbe07c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AccessorException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AccessorException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">AccessorException</span></div><h1>AccessorException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">21 of 21</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="AccessorException.java.html#L52" class="el_method">getMessage()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="AccessorException.java.html#L47" class="el_method">AccessorException(Class, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AccessorException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AccessorException.java.html
    new file mode 100644
    index 000000000..937a2fb7d
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AccessorException.java.html
    @@ -0,0 +1,58 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AccessorException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">AccessorException.java</span></div><h1>AccessorException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +import eu.sqooss.service.tds.TDSException;
    +
    +/**
    + * This exception indicates that an error occurred during accessor
    + * initialization or other operation.
    + */
    +public final class AccessorException extends TDSException {
    +    private static final long serialVersionUID = 1L;
    +    private Class&lt;?&gt; accessorClass;
    +
    +    public AccessorException(Class&lt;?&gt; c, String message) {
    +<span class="nc" id="L47">        super(message);</span>
    +<span class="nc" id="L48">        accessorClass = c;</span>
    +<span class="nc" id="L49">    }</span>
    +
    +    public String getMessage() {
    +<span class="nc" id="L52">        return accessorClass.getName() + &quot;: &quot; + super.getMessage();</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AnnotatedLine.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AnnotatedLine.html
    new file mode 100644
    index 000000000..273cea640
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AnnotatedLine.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AnnotatedLine</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">AnnotatedLine</span></div><h1>AnnotatedLine</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3 of 3</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AnnotatedLine.java.html#L43" class="el_method">AnnotatedLine()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AnnotatedLine.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AnnotatedLine.java.html
    new file mode 100644
    index 000000000..c54b72ad7
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/AnnotatedLine.java.html
    @@ -0,0 +1,48 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AnnotatedLine.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">AnnotatedLine.java</span></div><h1>AnnotatedLine.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2009 - 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +/**
    + * A simple data transfer object that holds annotation information for a
    + * single file line.
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + *
    + */
    +<span class="nc" id="L43">public class AnnotatedLine {</span>
    +	public Revision rev;
    +	public String developer;
    +	public String line;
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BTSEntryAttachement.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BTSEntryAttachement.html
    new file mode 100644
    index 000000000..a24852a2e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BTSEntryAttachement.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry.BTSEntryAttachement</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">BTSEntry.BTSEntryAttachement</span></div><h1>BTSEntry.BTSEntryAttachement</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="BTSEntry.java.html#L241" class="el_method">BTSEntry.BTSEntryAttachement(BTSEntry)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BTSEntryComment.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BTSEntryComment.html
    new file mode 100644
    index 000000000..b41cb43f7
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BTSEntryComment.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry.BTSEntryComment</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">BTSEntry.BTSEntryComment</span></div><h1>BTSEntry.BTSEntryComment</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="BTSEntry.java.html#L229" class="el_method">BTSEntry.BTSEntryComment(BTSEntry)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugPriority.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugPriority.html
    new file mode 100644
    index 000000000..0e7a6af47
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugPriority.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry.BugPriority</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">BTSEntry.BugPriority</span></div><h1>BTSEntry.BugPriority</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">98 of 98</td><td class="ctr2">0%</td><td class="bar">10 of 10</td><td class="ctr2">0%</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">17</td><td class="ctr2">17</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a2"><a href="BTSEntry.java.html#L111" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="44" alt="44"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="BTSEntry.java.html#L124" class="el_method">fromString(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="76" height="10" title="28" alt="28"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="BTSEntry.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="43" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="BTSEntry.java.html#L111" class="el_method">BTSEntry.BugPriority(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="BTSEntry.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugResolution.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugResolution.html
    new file mode 100644
    index 000000000..b95b6a261
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugResolution.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry.BugResolution</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">BTSEntry.BugResolution</span></div><h1>BTSEntry.BugResolution</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">132 of 132</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">12</td><td class="ctr2">12</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a2"><a href="BTSEntry.java.html#L183" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="64" alt="64"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">13</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="BTSEntry.java.html#L203" class="el_method">fromString(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="78" height="10" title="42" alt="42"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">8</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h0">15</td><td class="ctr2" id="i0">15</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="BTSEntry.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="30" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="BTSEntry.java.html#L183" class="el_method">BTSEntry.BugResolution(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="BTSEntry.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugSeverity.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugSeverity.html
    new file mode 100644
    index 000000000..8272cf66f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugSeverity.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry.BugSeverity</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">BTSEntry.BugSeverity</span></div><h1>BTSEntry.BugSeverity</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">148 of 148</td><td class="ctr2">0%</td><td class="bar">16 of 16</td><td class="ctr2">0%</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">33</td><td class="ctr2">33</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a2"><a href="BTSEntry.java.html#L71" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="74" alt="74"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">15</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="BTSEntry.java.html#L91" class="el_method">fromString(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="77" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">17</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="BTSEntry.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="25" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="BTSEntry.java.html#L71" class="el_method">BTSEntry.BugSeverity(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="8" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="BTSEntry.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="8" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugStatus.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugStatus.html
    new file mode 100644
    index 000000000..b0cbba4b7
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry$BugStatus.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry.BugStatus</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">BTSEntry.BugStatus</span></div><h1>BTSEntry.BugStatus</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">148 of 148</td><td class="ctr2">0%</td><td class="bar">16 of 16</td><td class="ctr2">0%</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">33</td><td class="ctr2">33</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a2"><a href="BTSEntry.java.html#L139" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="74" alt="74"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">15</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="BTSEntry.java.html#L160" class="el_method">fromString(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="77" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">17</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="BTSEntry.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="25" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="BTSEntry.java.html#L139" class="el_method">BTSEntry.BugStatus(String, int)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="8" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="BTSEntry.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="8" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry.html
    new file mode 100644
    index 000000000..816b69efb
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">BTSEntry</span></div><h1>BTSEntry</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">13 of 13</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="BTSEntry.java.html#L66" class="el_method">BTSEntry()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="13" alt="13"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry.java.html
    new file mode 100644
    index 000000000..63f74b128
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/BTSEntry.java.html
    @@ -0,0 +1,249 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BTSEntry.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">BTSEntry.java</span></div><h1>BTSEntry.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +import java.util.ArrayList;
    +import java.util.Date;
    +import java.util.List;
    +
    +/**
    + * The bug interface represents a single bug from a bug tracker (whichever
    + * that may be) in the most abstract form possible. This class has all 
    + * fields public to avoid excessive use of getters/setters. The class is
    + * only intented to act as a Data Transfer Object.
    + */
    +public class BTSEntry {
    +    
    +    public String bugID;
    +    public Date creationTimestamp;
    +    public Date latestUpdateTimestamp;
    +    public String shortDescr;
    +    public BugSeverity severity;
    +    public BugPriority priority;
    +    public BugStatus state;
    +    public BugResolution resolution;
    +    
    +    public String product;
    +    public String component;
    +    
    +    public String reporter;
    +    public String assignee;
    +    
    +    public List&lt;BTSEntryComment&gt; commentslist;
    +    public List&lt;BTSEntryAttachement&gt; attachementlist;
    +    
    +<span class="nc" id="L66">    public BTSEntry() {</span>
    +<span class="nc" id="L67">        commentslist = new ArrayList&lt;BTSEntryComment&gt;();</span>
    +<span class="nc" id="L68">        attachementlist = new ArrayList&lt;BTSEntryAttachement&gt;();</span>
    +<span class="nc" id="L69">    }</span>
    +    
    +<span class="nc" id="L71">    public enum BugSeverity {</span>
    +<span class="nc" id="L72">        /** The bug must be fixed or else...*/</span>
    +<span class="nc" id="L73">        BLOCKER, </span>
    +<span class="nc" id="L74">        /** The bug is critical, affecting the quality of the system/data*/</span>
    +<span class="nc" id="L75">        CRITICAL, </span>
    +<span class="nc" id="L76">        /** The bug is significant and should be fixed asap.*/</span>
    +<span class="nc" id="L77">        MAJOR, </span>
    +<span class="nc" id="L78">        /** The bug is just another bug.*/</span>
    +<span class="nc" id="L79">        NORMAL, </span>
    +<span class="nc" id="L80">        /** The bug does not affect the typical operation of the software*/</span>
    +<span class="nc" id="L81">        MINOR, </span>
    +<span class="nc" id="L82">        /** A trivial to fix bug, a typo in some doc or similar.*/</span>
    +<span class="nc" id="L83">        TRIVIAL, </span>
    +<span class="nc" id="L84">        /** A user request to enhance the software rather than am actual bug.*/</span>
    +<span class="nc" id="L85">        ENHANCEMENT;</span>
    +        /**
    +         * Get a status state from a string.
    +         * @return The status state or null if could not be found
    +         */
    +        public static BugSeverity fromString(String s) {
    +<span class="nc bnc" id="L91" title="All 2 branches missed.">            if (s == null)</span>
    +<span class="nc" id="L92">                return null;</span>
    +<span class="nc bnc" id="L93" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;BLOCKER&quot;))</span>
    +<span class="nc" id="L94">                return BLOCKER;</span>
    +<span class="nc bnc" id="L95" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;CRITICAL&quot;))</span>
    +<span class="nc" id="L96">                return CRITICAL;</span>
    +<span class="nc bnc" id="L97" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;MAJOR&quot;))</span>
    +<span class="nc" id="L98">                return MAJOR;</span>
    +<span class="nc bnc" id="L99" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;NORMAL&quot;))</span>
    +<span class="nc" id="L100">                return NORMAL;</span>
    +<span class="nc bnc" id="L101" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;MINOR&quot;))</span>
    +<span class="nc" id="L102">                return MINOR;</span>
    +<span class="nc bnc" id="L103" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;TRIVIAL&quot;))</span>
    +<span class="nc" id="L104">                return TRIVIAL;</span>
    +<span class="nc bnc" id="L105" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;ENHANCEMENT&quot;))</span>
    +<span class="nc" id="L106">                return ENHANCEMENT;</span>
    +<span class="nc" id="L107">            return null;</span>
    +        }
    +    }
    +    
    +<span class="nc" id="L111">    public enum BugPriority {</span>
    +<span class="nc" id="L112">        /** Low resolution priority.*/</span>
    +<span class="nc" id="L113">        LOW, </span>
    +<span class="nc" id="L114">        /** Medium resolution priority. */</span>
    +<span class="nc" id="L115">        MEDIUM, NORMAL,</span>
    +<span class="nc" id="L116">        /** High resolution priority.*/</span>
    +<span class="nc" id="L117">        HIGH;</span>
    +        
    +        /**
    +         * Get a status state from a string.
    +         * @return The status state or null if could not be found
    +         */
    +        public static BugPriority fromString(String s) {
    +<span class="nc bnc" id="L124" title="All 2 branches missed.">            if (s == null)</span>
    +<span class="nc" id="L125">                return null;</span>
    +<span class="nc bnc" id="L126" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;LOW&quot;))</span>
    +<span class="nc" id="L127">                return LOW;</span>
    +<span class="nc bnc" id="L128" title="All 4 branches missed.">            if (s.equalsIgnoreCase(&quot;MEDIUM&quot;) || s.equals(&quot;NORMAL&quot;))</span>
    +<span class="nc" id="L129">                return MEDIUM;</span>
    +<span class="nc bnc" id="L130" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;HIGH&quot;))</span>
    +<span class="nc" id="L131">                return HIGH;</span>
    +<span class="nc" id="L132">            return null;</span>
    +        }
    +    }
    +    
    +    /**
    +     * Encapsulates all possible bug status states.
    +     */
    +<span class="nc" id="L139">    public enum BugStatus { </span>
    +<span class="nc" id="L140">        /** Not sure if is a bug, or in voting process */</span>
    +<span class="nc" id="L141">        UNCONFIRMED,</span>
    +<span class="nc" id="L142">        /** A new bug */</span>
    +<span class="nc" id="L143">        NEW,</span>
    +<span class="nc" id="L144">        /** The bug has been assigned to a developer */</span>
    +<span class="nc" id="L145">        ASSIGNED,</span>
    +<span class="nc" id="L146">        /** Bug was closed, but fix was not acceptable */</span>
    +<span class="nc" id="L147">        REOPENED,</span>
    +<span class="nc" id="L148">        /** The problem was fixed, pending verification */</span>
    +<span class="nc" id="L149">        RESOLVED,</span>
    +<span class="nc" id="L150">        /** The solution is accepted */</span>
    +<span class="nc" id="L151">        VERIFIED,</span>
    +<span class="nc" id="L152">        /** The bug is resolved */</span>
    +<span class="nc" id="L153">        CLOSED;</span>
    +        
    +        /**
    +         * Get a status state from a string.
    +         * @return The status state or null if could not be found
    +         */
    +        public static BugStatus fromString(String s) {
    +<span class="nc bnc" id="L160" title="All 2 branches missed.">            if (s == null)</span>
    +<span class="nc" id="L161">                return null;</span>
    +<span class="nc bnc" id="L162" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;UNCONFIRMED&quot;))</span>
    +<span class="nc" id="L163">                return UNCONFIRMED;</span>
    +<span class="nc bnc" id="L164" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;NEW&quot;))</span>
    +<span class="nc" id="L165">                return NEW;</span>
    +<span class="nc bnc" id="L166" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;ASSIGNED&quot;))</span>
    +<span class="nc" id="L167">                return ASSIGNED;</span>
    +<span class="nc bnc" id="L168" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;VERIFIED&quot;))</span>
    +<span class="nc" id="L169">                return VERIFIED;</span>
    +<span class="nc bnc" id="L170" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;CLOSED&quot;))</span>
    +<span class="nc" id="L171">                return CLOSED;</span>
    +<span class="nc bnc" id="L172" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;REOPENED&quot;))</span>
    +<span class="nc" id="L173">                return REOPENED;</span>
    +<span class="nc bnc" id="L174" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;RESOLVED&quot;))</span>
    +<span class="nc" id="L175">                return RESOLVED;</span>
    +<span class="nc" id="L176">            return null;</span>
    +        }
    +    }
    +    
    +    /**
    +     * Encapsulates all possible bug resolution states.
    +     */
    +<span class="nc" id="L183">    public enum BugResolution {</span>
    +<span class="nc" id="L184">        /** The bug is fixed */</span>
    +<span class="nc" id="L185">        FIXED, </span>
    +<span class="nc" id="L186">        /** The bug description is not correct or the bug */</span>
    +<span class="nc" id="L187">        INVALID,</span>
    +<span class="nc" id="L188">        /** The bug will not be fixed due to administrative decision*/</span>
    +<span class="nc" id="L189">        WONTFIX,</span>
    +<span class="nc" id="L190">        /** The bug is duplicate of another bug */</span>
    +<span class="nc" id="L191">        DUPLICATE,</span>
    +<span class="nc" id="L192">        /** The bug might be a bug but did not appear on the tester's </span>
    +         * workstation */
    +<span class="nc" id="L194">        WORKSFORME,</span>
    +<span class="nc" id="L195">        /** The bug has been moved to another bug description */</span>
    +<span class="nc" id="L196">        MOVED;</span>
    +        
    +        /**
    +         * Get a resolution state from a string.
    +         * @return The resolution state or null if could not be found
    +         */
    +        public static BugResolution fromString(String s) {
    +<span class="nc bnc" id="L203" title="All 2 branches missed.">            if (s == null)</span>
    +<span class="nc" id="L204">                return null;</span>
    +<span class="nc bnc" id="L205" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;FIXED&quot;))</span>
    +<span class="nc" id="L206">                return FIXED;</span>
    +<span class="nc bnc" id="L207" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;INVALID&quot;))</span>
    +<span class="nc" id="L208">                return INVALID;</span>
    +<span class="nc bnc" id="L209" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;WONTFIX&quot;))</span>
    +<span class="nc" id="L210">                return WONTFIX;</span>
    +<span class="nc bnc" id="L211" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;DUPLICATE&quot;))</span>
    +<span class="nc" id="L212">                return DUPLICATE;</span>
    +<span class="nc bnc" id="L213" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;WORKSFORME&quot;))</span>
    +<span class="nc" id="L214">                return WORKSFORME;</span>
    +<span class="nc bnc" id="L215" title="All 2 branches missed.">            if (s.equalsIgnoreCase(&quot;MOVED&quot;))</span>
    +<span class="nc" id="L216">                return MOVED;</span>
    +<span class="nc" id="L217">            return null;</span>
    +        }
    +    }
    +    
    +    /**
    +     * Bug revision comment.
    +     */
    +    public class BTSEntryComment {
    +        public String commentAuthor;
    +        public Date commentTS;
    +        public String comment;
    +        
    +<span class="nc" id="L229">        public BTSEntryComment() {   </span>
    +<span class="nc" id="L230">        }</span>
    +    }
    +    
    +    /**
    +     * Bug attachement
    +     */
    +    public class BTSEntryAttachement {
    +        public Date date;
    +        public String description;
    +        public String type;
    +        
    +<span class="nc" id="L241">        public BTSEntryAttachement() {</span>
    +<span class="nc" id="L242">        }</span>
    +    }
    +
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/CommitCopyEntry.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/CommitCopyEntry.html
    new file mode 100644
    index 000000000..e9fcfb1d8
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/CommitCopyEntry.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CommitCopyEntry</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">CommitCopyEntry</span></div><h1>CommitCopyEntry</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">37 of 37</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a0"><a href="CommitCopyEntry.java.html#L50" class="el_method">CommitCopyEntry(String, Revision, String, Revision)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="CommitCopyEntry.java.html#L100" class="el_method">setMove()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="CommitCopyEntry.java.html#L64" class="el_method">fromPath()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="20" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="CommitCopyEntry.java.html#L71" class="el_method">fromRev()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="20" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="CommitCopyEntry.java.html#L78" class="el_method">toPath()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="20" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="CommitCopyEntry.java.html#L85" class="el_method">toRev()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="20" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="CommitCopyEntry.java.html#L92" class="el_method">isMove()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="20" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/CommitCopyEntry.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/CommitCopyEntry.java.html
    new file mode 100644
    index 000000000..021a5e69c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/CommitCopyEntry.java.html
    @@ -0,0 +1,103 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>CommitCopyEntry.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">CommitCopyEntry.java</span></div><h1>CommitCopyEntry.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                 Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +/**
    + * A commit entry representing a copy or a move (rename) operation 
    + *
    + */
    +public class CommitCopyEntry {
    +    
    +    private String fromPath;
    +    private Revision fromRev;
    +    
    +    private String toPath;
    +    private Revision toRev;
    +    
    +    private boolean move;
    +
    +<span class="nc" id="L50">	public CommitCopyEntry(String fromP, Revision fromR, String toP, </span>
    +            Revision toR) {
    +<span class="nc" id="L52">        this.fromPath = fromP;</span>
    +<span class="nc" id="L53">        this.fromRev = fromR;</span>
    +        
    +<span class="nc" id="L55">        this.toPath = toP;</span>
    +<span class="nc" id="L56">        this.toRev = toR;</span>
    +<span class="nc" id="L57">        this.move = false;</span>
    +<span class="nc" id="L58">    }</span>
    +    
    +    /**
    +     * Get the path where the copied entity originally existed
    +     */
    +    public String fromPath() {
    +<span class="nc" id="L64">        return fromPath;</span>
    +    }
    +
    +    /**
    +     * Get the latest revision of to the original path
    +     */
    +    public Revision fromRev() {
    +<span class="nc" id="L71">        return fromRev;</span>
    +    }
    +    
    +    /**
    +     * Get the path to the new location of the copied entity
    +     */
    +    public String toPath() {
    +<span class="nc" id="L78">        return toPath;</span>
    +    }
    +    
    +    /**
    +     * Get the version of the copied entity after the copy operation
    +     */
    +    public Revision toRev() {
    +<span class="nc" id="L85">        return toRev;</span>
    +    }
    +    
    +    /**
    +     * Returns true if the represented operation moves (renames) a file.
    +     */
    +    public boolean isMove() {
    +<span class="nc" id="L92">		return move;</span>
    +	}
    +
    +    /**
    +     * If the action represents a move (rename) operation, call this method
    +     * to set it. 
    +     */
    +	public void setMove() {
    +<span class="nc" id="L100">		this.move = true;</span>
    +<span class="nc" id="L101">	}</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffChunk$DiffOp.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffChunk$DiffOp.html
    new file mode 100644
    index 000000000..828c0cad1
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffChunk$DiffOp.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiffChunk.DiffOp</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">DiffChunk.DiffOp</span></div><h1>DiffChunk.DiffOp</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">70 of 70</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="DiffChunk.java.html#L49" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="44" alt="44"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="DiffChunk.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="43" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="DiffChunk.java.html#L49" class="el_method">DiffChunk.DiffOp(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="DiffChunk.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffChunk.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffChunk.java.html
    new file mode 100644
    index 000000000..4c32afaf9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffChunk.java.html
    @@ -0,0 +1,91 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiffChunk.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">DiffChunk.java</span></div><h1>DiffChunk.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +/**
    + * A chunk in a diff file. It is generic enough to represent chunks in
    + * both unified and original formats.
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + */
    +public interface DiffChunk {
    +	
    +	/**
    +	 * All possible diff operations. Only applies in cases where the
    +	 * diff format provides this information. In all other cases, 
    +	 * the DiffOp is set to UNDEF. 
    +	 */
    +<span class="nc" id="L49">	public enum DiffOp {</span>
    +<span class="nc" id="L50">		ADD,</span>
    +<span class="nc" id="L51">		DELETE,</span>
    +<span class="nc" id="L52">		CHANGE,</span>
    +<span class="nc" id="L53">		UNDEF</span>
    +	}
    +	
    +	/**
    +	 * Get the actual diff text.
    +	 */
    +	String getChunk();
    +	
    +	/**
    +	 * Get the starting line on the source file
    +	 */
    +	int getSourceStartLine();
    +	
    +	/**
    +	 * Get the length of text in the source file
    +	 */
    +	int getSourceLenght();
    +	
    +	/**
    +	 * Get the starting line on the target file
    +	 */
    +	int getTargetStartLine();
    +	
    +	/**
    +	 * Get the length of text in the target file
    +	 */
    +	int getTargetLength();
    +	
    +	/**
    +	 *  Get the repository path this diff chunk applies to 
    +	 */
    +	String getPath();
    +	
    +	/**
    +	 * The operation this diff chunk represents. 
    +	 */
    +	DiffOp getDiffOp();
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffFactory.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffFactory.html
    new file mode 100644
    index 000000000..2d25e3133
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffFactory.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiffFactory</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">DiffFactory</span></div><h1>DiffFactory</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">26 of 26</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="DiffFactory.java.html#L68" class="el_method">doUnifiedDiff(Revision, Revision, String, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="DiffFactory.java.html#L48" class="el_method">getInstance()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="64" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="DiffFactory.java.html#L43" class="el_method">DiffFactory()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="24" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffFactory.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffFactory.java.html
    new file mode 100644
    index 000000000..010d68b6a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/DiffFactory.java.html
    @@ -0,0 +1,75 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>DiffFactory.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">DiffFactory.java</span></div><h1>DiffFactory.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system.
    + *
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +import eu.sqooss.impl.service.tds.diff.UnifiedDiffParser;
    +
    +/**
    + * Class that knows how to parse different diff formats.
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + *
    + */
    +<span class="nc" id="L43">public class DiffFactory {</span>
    +
    +    private static DiffFactory instance;
    +       
    +    public static DiffFactory getInstance() {
    +<span class="nc bnc" id="L48" title="All 2 branches missed.">        if (instance == null)</span>
    +<span class="nc" id="L49">            instance = new DiffFactory();</span>
    +        
    +<span class="nc" id="L51">        return instance;</span>
    +    }
    +    
    +    /**
    +     * 
    +     * 
    +     * @param start
    +     * @param end
    +     * @param basePath
    +     * @param diff
    +     * @return A {@link Diff} object if parsing the diff succeded or null if parsing failed.
    +     * 
    +     * @see {@link http://en.wikipedia.org/wiki/Diff#Unified_format}
    +     */
    +    public Diff doUnifiedDiff(Revision start, Revision end, 
    +            String basePath, String diff) {
    +        
    +<span class="nc" id="L68">        UnifiedDiffParser d = new UnifiedDiffParser(start, end, basePath, diff);</span>
    +<span class="nc bnc" id="L69" title="All 2 branches missed.">        if (d.parseDiff())</span>
    +<span class="nc" id="L70">            return d;</span>
    +        
    +<span class="nc" id="L72">        return null;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidAccessorException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidAccessorException.html
    new file mode 100644
    index 000000000..f025383d9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidAccessorException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvalidAccessorException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">InvalidAccessorException</span></div><h1>InvalidAccessorException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="InvalidAccessorException.java.html#L46" class="el_method">InvalidAccessorException(DataAccessor, URI)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="InvalidAccessorException.java.html#L52" class="el_method">getAccessor()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="InvalidAccessorException.java.html#L56" class="el_method">getAccessorURI()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="InvalidAccessorException.java.html#L60" class="el_method">getMessage()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidAccessorException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidAccessorException.java.html
    new file mode 100644
    index 000000000..655edd909
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidAccessorException.java.html
    @@ -0,0 +1,64 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvalidAccessorException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">InvalidAccessorException.java</span></div><h1>InvalidAccessorException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2008 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +import java.net.URI;
    +
    +public class InvalidAccessorException extends TDSException {
    +
    +	private static final long serialVersionUID = 1L;
    +	
    +	private DataAccessor da;
    +	private URI accessorURI;
    +	
    +	public InvalidAccessorException(DataAccessor d, URI accessorURI) {
    +<span class="nc" id="L46">		super(d.getName() + &quot; - Error accessing URI:&quot; + accessorURI.toString());</span>
    +<span class="nc" id="L47">		this.da = d;</span>
    +<span class="nc" id="L48">		this.accessorURI = accessorURI;</span>
    +<span class="nc" id="L49">	}</span>
    +	
    +	public DataAccessor getAccessor() {
    +<span class="nc" id="L52">		return da;</span>
    +	}
    +	
    +	public URI getAccessorURI () {
    +<span class="nc" id="L56">		return accessorURI;</span>
    +	}
    +	
    +	public String getMessage() {
    +<span class="nc" id="L60">        return super.getMessage();</span>
    +    }
    +	
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidProjectRevisionException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidProjectRevisionException.html
    new file mode 100644
    index 000000000..8174a8834
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidProjectRevisionException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvalidProjectRevisionException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">InvalidProjectRevisionException</span></div><h1>InvalidProjectRevisionException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">26 of 26</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="InvalidProjectRevisionException.java.html#L51" class="el_method">InvalidProjectRevisionException(String, Class)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="InvalidProjectRevisionException.java.html#L56" class="el_method">getMessage()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="88" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidProjectRevisionException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidProjectRevisionException.java.html
    new file mode 100644
    index 000000000..1ed4dc974
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidProjectRevisionException.java.html
    @@ -0,0 +1,62 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvalidProjectRevisionException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">InvalidProjectRevisionException.java</span></div><h1>InvalidProjectRevisionException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +/**
    + * This class flags invalid revisions which are passed to
    + * methods of the SCMAccessor. Invalid revisions may be
    + * of the wrong kind or indicate a revision that is not
    + * within the range of the accessor (or other data structures).
    + */
    +public class InvalidProjectRevisionException extends TDSException {
    +    private static final long serialVersionUID = 1L;
    +    private String revisionId;
    +
    +    /**
    +     * Constructor. Create an InvalidProjectRevisionException
    +     * for the indicated @p project. 
    +     */
    +    public InvalidProjectRevisionException(String revisionId, Class&lt;?&gt; klass) {
    +<span class="nc" id="L51">        super(klass.getSimpleName() + &quot;: Invalid project revision. &quot;);</span>
    +<span class="nc" id="L52">        this.revisionId = revisionId;</span>
    +<span class="nc" id="L53">    }</span>
    +
    +    public String getMessage() {
    +<span class="nc" id="L56">        return super.getMessage() + revisionId;</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidRepositoryException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidRepositoryException.html
    new file mode 100644
    index 000000000..3fcf9da3b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidRepositoryException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvalidRepositoryException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">InvalidRepositoryException</span></div><h1>InvalidRepositoryException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">25 of 25</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="InvalidRepositoryException.java.html#L54" class="el_method">getMessage()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="InvalidRepositoryException.java.html#L49" class="el_method">InvalidRepositoryException(String, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="46" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidRepositoryException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidRepositoryException.java.html
    new file mode 100644
    index 000000000..e76d8d970
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/InvalidRepositoryException.java.html
    @@ -0,0 +1,60 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>InvalidRepositoryException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">InvalidRepositoryException.java</span></div><h1>InvalidRepositoryException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +import eu.sqooss.service.tds.TDSException;
    +
    +/**
    + * This exception indicates that the repository is invalid for
    + * some project. This may indicate that the TDS does not know
    + * about the repository at all or that something has failed
    + * in accessing the repository. 
    + */
    +public class InvalidRepositoryException extends TDSException {
    +    private static final long serialVersionUID = 1L;
    +    private String projectName, projectURL;
    +
    +    public InvalidRepositoryException(String url, String message) {
    +<span class="nc" id="L49">        super(message);</span>
    +<span class="nc" id="L50">        projectURL = url;</span>
    +<span class="nc" id="L51">    }</span>
    +
    +    public String getMessage() {
    +<span class="nc" id="L54">        return super.getMessage() + &quot; &quot; + projectName + &quot; &quot; + projectURL;</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/PathChangeType.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/PathChangeType.html
    new file mode 100644
    index 000000000..e2dc22785
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/PathChangeType.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PathChangeType</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">PathChangeType</span></div><h1>PathChangeType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">90 of 90</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="PathChangeType.java.html#L40" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="64" alt="64"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="PathChangeType.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="30" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="PathChangeType.java.html#L40" class="el_method">PathChangeType(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="PathChangeType.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/PathChangeType.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/PathChangeType.java.html
    new file mode 100644
    index 000000000..f40d28880
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/PathChangeType.java.html
    @@ -0,0 +1,59 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>PathChangeType.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">PathChangeType.java</span></div><h1>PathChangeType.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +/**
    + * Describes the type of modification that has occured on a project
    + * file (path) within two different versions of the project
    + */
    +<span class="nc" id="L40">public enum PathChangeType {</span>
    +<span class="nc" id="L41">        /** The repository does not know what type of change occured */</span>
    +<span class="nc" id="L42">        UNKNOWN,</span>
    +        
    +<span class="nc" id="L44">        /** No change occured on this path*/</span>
    +<span class="nc" id="L45">        UNMODIFIED,</span>
    +        
    +<span class="nc" id="L47">        /** Path was added */</span>
    +<span class="nc" id="L48">        ADDED,</span>
    +        
    +<span class="nc" id="L50">        /** Path was modified */</span>
    +<span class="nc" id="L51">        MODIFIED,</span>
    +        
    +<span class="nc" id="L53">        /** Path was deleted, then a new version was added in the same revision*/</span>
    +<span class="nc" id="L54">        REPLACED,</span>
    +        
    +<span class="nc" id="L56">        /** Path was deleted */</span>
    +<span class="nc" id="L57">        DELETED</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNode.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNode.html
    new file mode 100644
    index 000000000..64bc25e21
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNode.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SCMNode</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">SCMNode</span></div><h1>SCMNode</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">473 of 473</td><td class="ctr2">0%</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="ctr1">44</td><td class="ctr2">44</td><td class="ctr1">97</td><td class="ctr2">97</td><td class="ctr1">14</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a13"><a href="SCMNode.java.html#L283" class="el_method">toString(int)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="102" alt="102"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="45" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h1">13</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="SCMNode.java.html#L151" class="el_method">getNodeByPath(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="111" height="10" title="95" alt="95"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">18</td><td class="ctr2" id="i0">18</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="SCMNode.java.html#L115" class="el_method">createDir(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="80" height="10" title="68" alt="68"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="30" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h2">13</td><td class="ctr2" id="i2">13</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="SCMNode.java.html#L90" class="el_method">appendChild(SCMNode)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="54" height="10" title="46" alt="46"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="90" height="10" title="12" alt="12"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f1">7</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h3">13</td><td class="ctr2" id="i3">13</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a9"><a href="SCMNode.java.html#L190" class="el_method">getSCMNodeList(SCMNode)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="48" height="10" title="41" alt="41"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="45" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h4">9</td><td class="ctr2" id="i4">9</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="SCMNode.java.html#L219" class="el_method">childExists(SCMNode)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="38" height="10" title="33" alt="33"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="60" height="10" title="8" alt="8"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f2">5</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h5">8</td><td class="ctr2" id="i5">8</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="SCMNode.java.html#L135" class="el_method">createFile(String)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="35" height="10" title="30" alt="30"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a11"><a href="SCMNode.java.html#L67" class="el_method">SCMNode(String, SCMNodeType, Revision)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="24" height="10" title="21" alt="21"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="15" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h6">7</td><td class="ctr2" id="i6">7</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a4"><a href="SCMNode.java.html#L267" class="el_method">equals(SCMNode)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="24" height="10" title="21" alt="21"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="45" height="10" title="6" alt="6"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h8">5</td><td class="ctr2" id="i8">5</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a12"><a href="SCMNode.java.html#L306" class="el_method">toString()</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a10"><a href="SCMNode.java.html#L240" class="el_method">getType()</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a7"><a href="SCMNode.java.html#L247" class="el_method">getPath()</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a8"><a href="SCMNode.java.html#L254" class="el_method">getRevision()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a5"><a href="SCMNode.java.html#L262" class="el_method">getChildren()</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNode.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNode.java.html
    new file mode 100644
    index 000000000..342a3b3d7
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNode.java.html
    @@ -0,0 +1,309 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SCMNode.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">SCMNode.java</span></div><h1>SCMNode.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +
    +/**
    + * A node in an SCM system. The node can either be a file or a 
    + * directory. It can hold references to other nodes enclosed 
    + * in the represented node.  
    + *
    + */
    +public class SCMNode {
    +    
    +    /**
    +     * The type of the node
    +     */
    +    private SCMNodeType type;
    +    
    +    /**
    +     * The path represented by the node
    +     */
    +    private String path;
    +    
    +    /**
    +     * The SCM revision this node 
    +     */
    +    private Revision revision;
    +    
    +    /**
    +     * The list of children of the node, if the node is a directory
    +     */
    +    private List&lt;SCMNode&gt; children;
    +    
    +<span class="nc" id="L67">    public SCMNode(String path, SCMNodeType type, Revision revision) {</span>
    +<span class="nc" id="L68">        this.path = path;</span>
    +<span class="nc" id="L69">        this.type = type;</span>
    +<span class="nc" id="L70">        this.revision = revision;</span>
    +        
    +<span class="nc bnc" id="L72" title="All 2 branches missed.">        if (type.equals(SCMNodeType.DIR)) {</span>
    +<span class="nc" id="L73">            children = new ArrayList&lt;SCMNode&gt;();</span>
    +        }
    +<span class="nc" id="L75">    }</span>
    +    
    +    /**
    +     * Add a node to the list of children of this node. If the node to 
    +     * be added belongs to a node that is deeper in the hierarchy, then
    +     * the path between the current node and the node to be added is
    +     * constructed by adding intermediate directory nodes. If the node
    +     * to be added belongs to a different part of the tree, then
    +     * it is not added to the children of  current node.
    +     * 
    +     * @param child The node to append to the current node
    +     */
    +    public void appendChild(SCMNode child) {
    +        
    +        /*Files do not have children*/
    +<span class="nc bnc" id="L90" title="All 2 branches missed.">        if (type.equals(SCMNodeType.FILE)) {</span>
    +<span class="nc" id="L91">            return;</span>
    +        }
    +        
    +        /* Return if the child exists or if we try to append the node on itself*/
    +<span class="nc bnc" id="L95" title="All 4 branches missed.">        if (childExists(child) || equals(child)) {</span>
    +<span class="nc" id="L96">            return;</span>
    +        }
    +        
    +        /* The child's path should point somewhere under our path */
    +<span class="nc bnc" id="L100" title="All 2 branches missed.">        if (!child.getPath().startsWith(path)) {</span>
    +<span class="nc" id="L101">            return;</span>
    +        }
    +        
    +<span class="nc bnc" id="L104" title="All 2 branches missed.">        if (child.type.equals(SCMNodeType.DIR)) {</span>
    +<span class="nc" id="L105">            createDir(child.path);</span>
    +<span class="nc bnc" id="L106" title="All 2 branches missed.">        } else if (child.type.equals(SCMNodeType.FILE)) {</span>
    +<span class="nc" id="L107">            createFile(child.path);</span>
    +<span class="nc" id="L108">        } else {</span>
    +<span class="nc" id="L109">            System.err.println(&quot;SCMNode: Uknown node type&quot;);</span>
    +        }
    +<span class="nc" id="L111">    }</span>
    +    
    +    protected void createDir(String path) {
    +        
    +<span class="nc" id="L115">        String parentPath = getPath();</span>
    +<span class="nc" id="L116">        String toAddPath = path.substring(getPath().length());</span>
    +<span class="nc" id="L117">        String[] pathElems = toAddPath.split(&quot;/&quot;);</span>
    +<span class="nc" id="L118">        String workingPath = parentPath;</span>
    +        
    +<span class="nc bnc" id="L120" title="All 2 branches missed.">        for (String dir : pathElems) {</span>
    +<span class="nc" id="L121">            workingPath += &quot;/&quot; + dir;</span>
    +<span class="nc" id="L122">            SCMNode d = getNodeByPath(workingPath);</span>
    +            
    +<span class="nc bnc" id="L124" title="All 2 branches missed.">            if (d == null) {</span>
    +<span class="nc" id="L125">                SCMNode n = new SCMNode(workingPath, SCMNodeType.DIR, revision);</span>
    +<span class="nc" id="L126">                d = getNodeByPath(parentPath);</span>
    +<span class="nc" id="L127">                d.children.add(n);</span>
    +            }
    +<span class="nc" id="L129">            parentPath = workingPath;</span>
    +        }
    +<span class="nc" id="L131">    }</span>
    +    
    +    protected void createFile(String path) {
    +        
    +<span class="nc" id="L135">        String dirPath = path.substring(0, path.lastIndexOf('/') + 1);</span>
    +<span class="nc" id="L136">        createDir(dirPath);</span>
    +<span class="nc" id="L137">        SCMNode parent = getNodeByPath(dirPath);</span>
    +<span class="nc" id="L138">        SCMNode file = new SCMNode(path, SCMNodeType.FILE, getRevision());</span>
    +<span class="nc" id="L139">        parent.children.add(file);</span>
    +<span class="nc" id="L140">    }</span>
    +    
    +    /**
    +     * Get a node by path name
    +     * 
    +     * @param path The path to search for
    +     * @return The node represented by the path if found; null otherwise or if
    +     * the provided path is null.
    +     */
    +    public SCMNode getNodeByPath(String path) {
    +        
    +<span class="nc bnc" id="L151" title="All 4 branches missed.">        if (path.equals(this.path) || path.equals(&quot;&quot;)) { </span>
    +<span class="nc" id="L152">            return this;</span>
    +        }
    +        
    +<span class="nc bnc" id="L155" title="All 4 branches missed.">        if (path == null || !path.startsWith(getPath())) {</span>
    +<span class="nc" id="L156">            return null;</span>
    +        }
    +        
    +<span class="nc" id="L159">        String[] pathElems = path.split(&quot;/&quot;);</span>
    +<span class="nc" id="L160">        String curPath = getPath();</span>
    +<span class="nc" id="L161">        SCMNode curNode = this;</span>
    +<span class="nc" id="L162">        boolean found = false;</span>
    +        
    +<span class="nc bnc" id="L164" title="All 2 branches missed.">        for (String d : pathElems) {</span>
    +<span class="nc bnc" id="L165" title="All 2 branches missed.">            for (SCMNode n : curNode.children) {</span>
    +<span class="nc bnc" id="L166" title="All 2 branches missed.">                if (n.getPath().equals(curPath + &quot;/&quot; + d)) {</span>
    +<span class="nc" id="L167">                    curPath += &quot;/&quot; + d;</span>
    +<span class="nc" id="L168">                    curNode = n;</span>
    +<span class="nc" id="L169">                    found = true;</span>
    +<span class="nc" id="L170">                    break;</span>
    +                }
    +            }
    +            
    +<span class="nc bnc" id="L174" title="All 2 branches missed.">            if (found == false) </span>
    +<span class="nc" id="L175">                return null;</span>
    +        }
    +        
    +<span class="nc" id="L178">        return curNode;</span>
    +    }
    +    
    +    /**
    +     * Flattens the directory hierarchy and returns all the nodes contained in 
    +     * this node and below as a list. The order of the nodes in the returned
    +     * list is unspecified.
    +     * 
    +     * @param node
    +     * @return A list of nodes, possibly empty if the provided node is null
    +     */
    +    public List&lt;SCMNode&gt; getSCMNodeList(SCMNode node) {
    +<span class="nc" id="L190">        List&lt;SCMNode&gt; nodeList = new ArrayList&lt;SCMNode&gt;();</span>
    +        
    +<span class="nc bnc" id="L192" title="All 2 branches missed.">        if (node == null) {</span>
    +<span class="nc" id="L193">            return nodeList;</span>
    +        }
    +        
    +<span class="nc bnc" id="L196" title="All 2 branches missed.">        for (SCMNode n : node.getChildren()) {</span>
    +<span class="nc" id="L197">            nodeList.add(n);</span>
    +            
    +<span class="nc bnc" id="L199" title="All 2 branches missed.">            if (n.getType().equals(SCMNodeType.DIR)) {</span>
    +<span class="nc" id="L200">                nodeList.addAll(getSCMNodeList(n));</span>
    +            }
    +        }
    +        
    +<span class="nc" id="L204">        nodeList.add(node);</span>
    +        
    +<span class="nc" id="L206">        return nodeList;</span>
    +    }
    +    
    +    /**
    +     * Check if the provided node belonds to  the children of this node 
    +     * recursively.
    +     * 
    +     * @param child The node to check for existence
    +     * 
    +     * @return True, if the node is found in the hierarchy of nodes below
    +     * this node; false otherwise.
    +     */
    +    public boolean childExists(SCMNode child) {
    +<span class="nc bnc" id="L219" title="All 2 branches missed.">       if (child == null) {</span>
    +<span class="nc" id="L220">           return false;</span>
    +       }
    +       
    +<span class="nc bnc" id="L223" title="All 2 branches missed.">       for (SCMNode node : children) {</span>
    +<span class="nc bnc" id="L224" title="All 2 branches missed.">           if (node.equals(child)) {</span>
    +<span class="nc" id="L225">               return true;</span>
    +           }
    +           
    +<span class="nc bnc" id="L228" title="All 2 branches missed.">           if (node.getType().equals(SCMNodeType.DIR)) {</span>
    +<span class="nc" id="L229">               node.childExists(child);</span>
    +           }
    +       }
    +        
    +<span class="nc" id="L233">       return false; </span>
    +    }
    +
    +    /**
    +     * @return the type of the node
    +     */
    +    public SCMNodeType getType() {
    +<span class="nc" id="L240">        return type;</span>
    +    }
    +
    +    /**
    +     * @return the path of the node
    +     */
    +    public String getPath() {
    +<span class="nc" id="L247">        return path;</span>
    +    }
    +
    +    /**
    +     * @return the revision
    +     */
    +    public Revision getRevision() {
    +<span class="nc" id="L254">        return revision;</span>
    +    }
    +
    +    /**
    +     * @return the children of this node, if the node
    +     * is a directory, else null;
    +     */
    +    public List&lt;SCMNode&gt; getChildren() {
    +<span class="nc" id="L262">        return children;</span>
    +    }
    +    
    +    /** {@inheritDoc} */
    +    public boolean equals(SCMNode node) {
    +<span class="nc bnc" id="L267" title="All 2 branches missed.">        if (this.path.equals(node.getPath()) &amp;&amp;</span>
    +<span class="nc bnc" id="L268" title="All 2 branches missed.">            this.revision == node.getRevision() &amp;&amp;</span>
    +<span class="nc bnc" id="L269" title="All 2 branches missed.">            this.type.equals(node.getType())) {</span>
    +<span class="nc" id="L270">            return true;</span>
    +        } else {
    +<span class="nc" id="L272">            return false;</span>
    +        }       
    +    }
    +    
    +    /**
    +     * Nice formatting of this directory including subdirectories and files.
    +     * Shameless copy from InMemoryDirectory.toString().
    +     * @param indentation The indentation of the root.
    +     * @return A String containing a nicely formatted directory tree.
    +     */
    +    protected String toString(int indentation) {
    +<span class="nc" id="L283">        String result = &quot;&quot;;</span>
    +<span class="nc" id="L284">        String indent = &quot;&quot;;</span>
    +<span class="nc bnc" id="L285" title="All 2 branches missed.">        for (int i=0; i &lt; indentation; ++i)</span>
    +<span class="nc" id="L286">                indent = indent + &quot; &quot;;</span>
    +        
    +<span class="nc" id="L288">        String name = path.substring(path.lastIndexOf(&quot;/&quot;), path.length());</span>
    +        
    +<span class="nc" id="L290">        result = result + indent + name + &quot;\n&quot;;</span>
    +        
    +<span class="nc bnc" id="L292" title="All 2 branches missed.">        for (SCMNode n: children) {</span>
    +<span class="nc bnc" id="L293" title="All 2 branches missed.">            if(n.type == SCMNodeType.DIR) {</span>
    +<span class="nc" id="L294">                result = result + n.toString(indentation + 1);</span>
    +<span class="nc" id="L295">            } else {</span>
    +<span class="nc" id="L296">                name = n.path.substring(n.path.lastIndexOf(&quot;/&quot;), n.path.length());</span>
    +<span class="nc" id="L297">                result = result + indent + &quot; &quot; + name + &quot;\n&quot;;</span>
    +            }
    +        }
    +        
    +<span class="nc" id="L301">        return result;</span>
    +    }
    +   
    +    /** {@inheritDoc} */
    +    public String toString() {
    +<span class="nc" id="L306">        return toString(0);</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNodeType.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNodeType.html
    new file mode 100644
    index 000000000..426b632f0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNodeType.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SCMNodeType</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">SCMNodeType</span></div><h1>SCMNodeType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="SCMNodeType.java.html#L39" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="SCMNodeType.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="56" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="SCMNodeType.java.html#L39" class="el_method">SCMNodeType(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="SCMNodeType.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNodeType.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNodeType.java.html
    new file mode 100644
    index 000000000..1c615f7cc
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/SCMNodeType.java.html
    @@ -0,0 +1,53 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SCMNodeType.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">SCMNodeType.java</span></div><h1>SCMNodeType.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +/**
    + * Encapsulates all possible node types in an SCM repository 
    + */
    +<span class="nc" id="L39">public enum SCMNodeType {</span>
    +
    +<span class="nc" id="L41">	/** A directory leaf entry */</span>
    +<span class="nc" id="L42">	DIR,</span>
    +	
    +<span class="nc" id="L44">	/** A file leaf entry */</span>
    +<span class="nc" id="L45">	FILE,</span>
    +	
    +<span class="nc" id="L47">	/** </span>
    +	 * Unknown entry type. The underlying SCM failed to identify the 
    +	 * node type 
    +	 */
    +<span class="nc" id="L51">	UNKNOWN</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/TDSException.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/TDSException.html
    new file mode 100644
    index 000000000..de35b2837
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/TDSException.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TDSException</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_class">TDSException</span></div><h1>TDSException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">19 of 19</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="TDSException.java.html#L50" class="el_method">getMessage()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="TDSException.java.html#L46" class="el_method">TDSException(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="40" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="TDSException.java.html#L43" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/TDSException.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/TDSException.java.html
    new file mode 100644
    index 000000000..a47093741
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/TDSException.java.html
    @@ -0,0 +1,56 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TDSException.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.tds</a> &gt; <span class="el_source">TDSException.java</span></div><h1>TDSException.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.tds;
    +
    +/**
    + * This is the base class of exceptions thrown by the TDS.
    + * It is mainly here to group together the exceptions
    + * thrown by the service.
    + */
    +public class TDSException extends Exception {
    +    private static final long serialVersionUID = 1L;
    +<span class="nc" id="L43">    private static String service = &quot;[TDS]&quot;;</span>
    +
    +    public TDSException(String message) {
    +<span class="nc" id="L46">        super(message);</span>
    +<span class="nc" id="L47">    }</span>
    +
    +    public String getMessage() {
    +<span class="nc" id="L50">        return service + &quot; &quot; + super.getMessage();</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/index.html
    new file mode 100644
    index 000000000..e3e32d31b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.tds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.tds</span></div><h1>eu.sqooss.service.tds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,431 of 1,431</td><td class="ctr2">0%</td><td class="bar">120 of 120</td><td class="ctr2">0%</td><td class="ctr1">133</td><td class="ctr2">133</td><td class="ctr1">288</td><td class="ctr2">288</td><td class="ctr1">73</td><td class="ctr2">73</td><td class="ctr1">19</td><td class="ctr2">19</td></tr></tfoot><tbody><tr><td id="a16"><a href="SCMNode.html" class="el_class">SCMNode</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="473" alt="473"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">44</td><td class="ctr2" id="g0">44</td><td class="ctr1" id="h0">97</td><td class="ctr2" id="i0">97</td><td class="ctr1" id="j0">14</td><td class="ctr2" id="k0">14</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a7"><a href="BTSEntry$BugSeverity.html" class="el_class">BTSEntry.BugSeverity</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="37" height="10" title="148" alt="148"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="32" height="10" title="16" alt="16"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">13</td><td class="ctr2" id="g1">13</td><td class="ctr1" id="h1">33</td><td class="ctr2" id="i1">33</td><td class="ctr1" id="j2">5</td><td class="ctr2" id="k2">5</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a8"><a href="BTSEntry$BugStatus.html" class="el_class">BTSEntry.BugStatus</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="37" height="10" title="148" alt="148"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="32" height="10" title="16" alt="16"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">13</td><td class="ctr2" id="g2">13</td><td class="ctr1" id="h2">33</td><td class="ctr2" id="i2">33</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k3">5</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a6"><a href="BTSEntry$BugResolution.html" class="el_class">BTSEntry.BugResolution</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="33" height="10" title="132" alt="132"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="28" height="10" title="14" alt="14"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">12</td><td class="ctr2" id="g3">12</td><td class="ctr1" id="h3">29</td><td class="ctr2" id="i3">29</td><td class="ctr1" id="j4">5</td><td class="ctr2" id="k4">5</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a5"><a href="BTSEntry$BugPriority.html" class="el_class">BTSEntry.BugPriority</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="24" height="10" title="98" alt="98"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="20" height="10" title="10" alt="10"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">10</td><td class="ctr2" id="g4">10</td><td class="ctr1" id="h4">17</td><td class="ctr2" id="i4">17</td><td class="ctr1" id="j5">5</td><td class="ctr2" id="k5">5</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a15"><a href="PathChangeType.html" class="el_class">PathChangeType</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="22" height="10" title="90" alt="90"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f7">4</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h5">14</td><td class="ctr2" id="i5">14</td><td class="ctr1" id="j6">4</td><td class="ctr2" id="k6">4</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a10"><a href="DiffChunk$DiffOp.html" class="el_class">DiffChunk.DiffOp</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="17" height="10" title="70" alt="70"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f8">4</td><td class="ctr2" id="g8">4</td><td class="ctr1" id="h10">6</td><td class="ctr2" id="i10">6</td><td class="ctr1" id="j7">4</td><td class="ctr2" id="k7">4</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a17"><a href="SCMNodeType.html" class="el_class">SCMNodeType</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="15" height="10" title="60" alt="60"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f9">4</td><td class="ctr2" id="g9">4</td><td class="ctr1" id="h7">8</td><td class="ctr2" id="i7">8</td><td class="ctr1" id="j8">4</td><td class="ctr2" id="k8">4</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a9"><a href="CommitCopyEntry.html" class="el_class">CommitCopyEntry</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="9" height="10" title="37" alt="37"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f5">7</td><td class="ctr2" id="g5">7</td><td class="ctr1" id="h6">14</td><td class="ctr2" id="i6">14</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a12"><a href="InvalidAccessorException.html" class="el_class">InvalidAccessorException</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="7" height="10" title="30" alt="30"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">4</td><td class="ctr2" id="g10">4</td><td class="ctr1" id="h9">7</td><td class="ctr2" id="i9">7</td><td class="ctr1" id="j9">4</td><td class="ctr2" id="k9">4</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a13"><a href="InvalidProjectRevisionException.html" class="el_class">InvalidProjectRevisionException</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="6" height="10" title="26" alt="26"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f12">2</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h11">4</td><td class="ctr2" id="i11">4</td><td class="ctr1" id="j12">2</td><td class="ctr2" id="k12">2</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a11"><a href="DiffFactory.html" class="el_class">DiffFactory</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="6" height="10" title="26" alt="26"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f6">5</td><td class="ctr2" id="g6">5</td><td class="ctr1" id="h8">8</td><td class="ctr2" id="i8">8</td><td class="ctr1" id="j10">3</td><td class="ctr2" id="k10">3</td><td class="ctr1" id="l11">1</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a14"><a href="InvalidRepositoryException.html" class="el_class">InvalidRepositoryException</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="6" height="10" title="25" alt="25"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f13">2</td><td class="ctr2" id="g13">2</td><td class="ctr1" id="h12">4</td><td class="ctr2" id="i12">4</td><td class="ctr1" id="j13">2</td><td class="ctr2" id="k13">2</td><td class="ctr1" id="l12">1</td><td class="ctr2" id="m12">1</td></tr><tr><td id="a0"><a href="AccessorException.html" class="el_class">AccessorException</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="5" height="10" title="21" alt="21"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f14">2</td><td class="ctr2" id="g14">2</td><td class="ctr1" id="h13">4</td><td class="ctr2" id="i13">4</td><td class="ctr1" id="j14">2</td><td class="ctr2" id="k14">2</td><td class="ctr1" id="l13">1</td><td class="ctr2" id="m13">1</td></tr><tr><td id="a18"><a href="TDSException.html" class="el_class">TDSException</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="4" height="10" title="19" alt="19"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f11">3</td><td class="ctr2" id="g11">3</td><td class="ctr1" id="h14">4</td><td class="ctr2" id="i14">4</td><td class="ctr1" id="j11">3</td><td class="ctr2" id="k11">3</td><td class="ctr1" id="l14">1</td><td class="ctr2" id="m14">1</td></tr><tr><td id="a2"><a href="BTSEntry.html" class="el_class">BTSEntry</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="3" height="10" title="13" alt="13"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">4</td><td class="ctr2" id="i15">4</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td><td class="ctr1" id="l15">1</td><td class="ctr2" id="m15">1</td></tr><tr><td id="a4"><a href="BTSEntry$BTSEntryComment.html" class="el_class">BTSEntry.BTSEntryComment</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="1" height="10" title="6" alt="6"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">2</td><td class="ctr2" id="i16">2</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td><td class="ctr1" id="l16">1</td><td class="ctr2" id="m16">1</td></tr><tr><td id="a3"><a href="BTSEntry$BTSEntryAttachement.html" class="el_class">BTSEntry.BTSEntryAttachement</a></td><td class="bar" id="b17"><img src="../../../.resources/redbar.gif" width="1" height="10" title="6" alt="6"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">2</td><td class="ctr2" id="i17">2</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td><td class="ctr1" id="l17">1</td><td class="ctr2" id="m17">1</td></tr><tr><td id="a1"><a href="AnnotatedLine.html" class="el_class">AnnotatedLine</a></td><td class="bar" id="b18"/><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td><td class="ctr1" id="l18">1</td><td class="ctr2" id="m18">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/index.source.html
    new file mode 100644
    index 000000000..f813fefe1
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.tds/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.tds</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.tds</span></div><h1>eu.sqooss.service.tds</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,431 of 1,431</td><td class="ctr2">0%</td><td class="bar">120 of 120</td><td class="ctr2">0%</td><td class="ctr1">133</td><td class="ctr2">133</td><td class="ctr1">288</td><td class="ctr2">288</td><td class="ctr1">73</td><td class="ctr2">73</td><td class="ctr1">19</td><td class="ctr2">19</td></tr></tfoot><tbody><tr><td id="a2"><a href="BTSEntry.java.html" class="el_source">BTSEntry.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="551" alt="551"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="112" height="10" title="56" alt="56"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">51</td><td class="ctr2" id="g0">51</td><td class="ctr1" id="h0">117</td><td class="ctr2" id="i0">117</td><td class="ctr1" id="j0">23</td><td class="ctr2" id="k0">23</td><td class="ctr1" id="l0">7</td><td class="ctr2" id="m0">7</td></tr><tr><td id="a10"><a href="SCMNode.java.html" class="el_source">SCMNode.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="103" height="10" title="473" alt="473"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">44</td><td class="ctr2" id="g1">44</td><td class="ctr1" id="h1">97</td><td class="ctr2" id="i1">97</td><td class="ctr1" id="j1">14</td><td class="ctr2" id="k1">14</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a9"><a href="PathChangeType.java.html" class="el_source">PathChangeType.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="19" height="10" title="90" alt="90"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h2">14</td><td class="ctr2" id="i2">14</td><td class="ctr1" id="j3">4</td><td class="ctr2" id="k3">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a4"><a href="DiffChunk.java.html" class="el_source">DiffChunk.java</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="15" height="10" title="70" alt="70"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k4">4</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a11"><a href="SCMNodeType.java.html" class="el_source">SCMNodeType.java</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="13" height="10" title="60" alt="60"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f6">4</td><td class="ctr2" id="g6">4</td><td class="ctr1" id="h4">8</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j5">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a3"><a href="CommitCopyEntry.java.html" class="el_source">CommitCopyEntry.java</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="8" height="10" title="37" alt="37"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f2">7</td><td class="ctr2" id="g2">7</td><td class="ctr1" id="h3">14</td><td class="ctr2" id="i3">14</td><td class="ctr1" id="j2">7</td><td class="ctr2" id="k2">7</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a6"><a href="InvalidAccessorException.java.html" class="el_source">InvalidAccessorException.java</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="6" height="10" title="30" alt="30"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">4</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h6">7</td><td class="ctr2" id="i6">7</td><td class="ctr1" id="j6">4</td><td class="ctr2" id="k6">4</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a7"><a href="InvalidProjectRevisionException.java.html" class="el_source">InvalidProjectRevisionException.java</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="5" height="10" title="26" alt="26"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h8">4</td><td class="ctr2" id="i8">4</td><td class="ctr1" id="j9">2</td><td class="ctr2" id="k9">2</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a5"><a href="DiffFactory.java.html" class="el_source">DiffFactory.java</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="5" height="10" title="26" alt="26"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g3">5</td><td class="ctr1" id="h5">8</td><td class="ctr2" id="i5">8</td><td class="ctr1" id="j7">3</td><td class="ctr2" id="k7">3</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a8"><a href="InvalidRepositoryException.java.html" class="el_source">InvalidRepositoryException.java</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="5" height="10" title="25" alt="25"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h9">4</td><td class="ctr2" id="i9">4</td><td class="ctr1" id="j10">2</td><td class="ctr2" id="k10">2</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a0"><a href="AccessorException.java.html" class="el_source">AccessorException.java</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="4" height="10" title="21" alt="21"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f11">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h10">4</td><td class="ctr2" id="i10">4</td><td class="ctr1" id="j11">2</td><td class="ctr2" id="k11">2</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a12"><a href="TDSException.java.html" class="el_source">TDSException.java</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="4" height="10" title="19" alt="19"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h11">4</td><td class="ctr2" id="i11">4</td><td class="ctr1" id="j8">3</td><td class="ctr2" id="k8">3</td><td class="ctr1" id="l11">1</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a1"><a href="AnnotatedLine.java.html" class="el_source">AnnotatedLine.java</a></td><td class="bar" id="b12"/><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td><td class="ctr1" id="l12">1</td><td class="ctr2" id="m12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterBaseJob.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterBaseJob.html
    new file mode 100644
    index 000000000..09af6c65f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterBaseJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterBaseJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.updater</a> &gt; <span class="el_class">UpdaterBaseJob</span></div><h1>UpdaterBaseJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">78 of 78</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a5"><a href="UpdaterBaseJob.java.html#L73" class="el_method">warn(String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="UpdaterBaseJob.java.html#L78" class="el_method">err(String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="UpdaterBaseJob.java.html#L83" class="el_method">info(String)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="UpdaterBaseJob.java.html#L88" class="el_method">debug(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="UpdaterBaseJob.java.html#L58" class="el_method">setUpdateParams(StoredProject, Logger)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="82" height="10" title="11" alt="11"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="UpdaterBaseJob.java.html#L50" class="el_method">UpdaterBaseJob()</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="22" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterBaseJob.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterBaseJob.java.html
    new file mode 100644
    index 000000000..f44a98904
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterBaseJob.java.html
    @@ -0,0 +1,91 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterBaseJob.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.updater</a> &gt; <span class="el_source">UpdaterBaseJob.java</span></div><h1>UpdaterBaseJob.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2009 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.updater;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.impl.service.updater.UpdaterServiceImpl;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.scheduler.Job;
    +
    +/**
    + * A base class for all updater jobs. Just a placeholder for some variables
    + * and a few log methods.
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + *
    + */
    +<span class="nc" id="L50">public abstract class UpdaterBaseJob extends Job {</span>
    +
    +    protected Logger logger;
    +    protected DBService dbs;
    +    protected StoredProject project;
    +    protected UpdaterServiceImpl updater;
    +    
    +    public void setUpdateParams(StoredProject sp, Logger l) {
    +<span class="nc" id="L58">        this.project = sp;</span>
    +<span class="nc" id="L59">        this.logger = l;</span>
    +<span class="nc" id="L60">        dbs = AlitheiaCore.getInstance().getDBService();</span>
    +<span class="nc" id="L61">    }</span>
    +    
    +    @Override
    +    public abstract long priority();
    +
    +    @Override
    +    protected abstract void run() throws Exception; 
    +    
    +    public abstract Job getJob();
    +    
    +    /** Convenience method to write warning messages per project */
    +    protected void warn(String message) {
    +<span class="nc" id="L73">        logger.warn(project.getName() + &quot;:&quot; + message);</span>
    +<span class="nc" id="L74">    }</span>
    +    
    +    /** Convenience method to write error messages per project */
    +    protected void err(String message) {
    +<span class="nc" id="L78">        logger.error(project.getName() + &quot;:&quot; + message);</span>
    +<span class="nc" id="L79">    }</span>
    +    
    +    /** Convenience method to write info messages per project */
    +    protected void info(String message) {
    +<span class="nc" id="L83">        logger.info(project.getName() + &quot;:&quot; + message);</span>
    +<span class="nc" id="L84">    }</span>
    +    
    +    /** Convenience method to write debug messages per project */
    +    protected void debug(String message) {
    +<span class="nc" id="L88">        logger.debug(project.getName() + &quot;:&quot; + message);</span>
    +<span class="nc" id="L89">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterService$UpdaterStage.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterService$UpdaterStage.html
    new file mode 100644
    index 000000000..bd9404beb
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterService$UpdaterStage.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterService.UpdaterStage</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.updater</a> &gt; <span class="el_class">UpdaterService.UpdaterStage</span></div><h1>UpdaterService.UpdaterStage</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">70 of 70</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="UpdaterService.java.html#L69" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="44" alt="44"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="UpdaterService.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="43" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="UpdaterService.java.html#L69" class="el_method">UpdaterService.UpdaterStage(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="UpdaterService.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="13" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterService.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterService.java.html
    new file mode 100644
    index 000000000..3fe8faf09
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/UpdaterService.java.html
    @@ -0,0 +1,148 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>UpdaterService.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.updater</a> &gt; <span class="el_source">UpdaterService.java</span></div><h1>UpdaterService.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS consortium
    + * as part of the IST FP6 SQO-OSS project, number 033331.
    + * 
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,
    + * Athens, Greece.
    + * 
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are met:
    + * 
    + * * Redistributions of source code must retain the above copyright notice, this
    + * list of conditions and the following disclaimer.
    + * 
    + * * Redistributions in binary form must reproduce the above copyright notice,
    + * this list of conditions and the following disclaimer in the documentation
    + * and/or other materials provided with the distribution.
    + * 
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
    + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    + * POSSIBILITY OF SUCH DAMAGE.
    + */
    +package eu.sqooss.service.updater;
    +
    +import java.util.List;
    +import java.util.Set;
    +
    +import eu.sqooss.core.AlitheiaCoreService;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.tds.TDSService;
    +
    +/**
    + * The updater service is the gateway in Alitheia core to tell the system that
    + * the raw data available to the system has changed; usually this means new
    + * source code revisions, new email messages. Updating the metadata is a
    + * multi-stage process. Each stage can contain several updaters, each one of
    + * which can have dependencies to other updaters within the same stage. The
    + * update process goes through the stages in the following order:
    + * 
    + * &lt;ol&gt;
    + *  &lt;li&gt;{@link UpdaterStage.IMPORT} &lt;/li&gt;
    + *  &lt;li&gt;{@link UpdaterStage.PARSE} &lt;/li&gt;
    + *  &lt;li&gt;{@link UpdaterStage.INFERENCE} &lt;/li&gt;
    + * &lt;/ol&gt;
    + * 
    + * At each stage, the updater uses the dependency information provided by the
    + * updaters to order the update operations correctly.
    + * 
    + * The updater service acts as a registry of available updaters and knows what
    + * updater to call based on the underlying metadata. The service is registration
    + * based, so interested plug-ins must register {@link MetadataUpdater}
    + * implementations for a set of protocols that the updater is capable of
    + * processing. The protocol descriptions must match those exported to the
    + * {@link TDSService}.
    + * 
    + */
    +public interface UpdaterService extends AlitheiaCoreService {
    +
    +    /**
    +     * The Updater stages supported by Alitheia Core.
    +     */
    +<span class="nc" id="L69">    public enum UpdaterStage {</span>
    +<span class="nc" id="L70">        /**</span>
    +         * Default updater stage for all updaters. Means that the updater can
    +         * run at any time during the update process.
    +         */
    +<span class="nc" id="L74">        DEFAULT,</span>
    +
    +<span class="nc" id="L76">        /** Raw data to metadata (DB) stage */</span>
    +<span class="nc" id="L77">        IMPORT,</span>
    +
    +<span class="nc" id="L79">        /** Source code parsing stage */</span>
    +<span class="nc" id="L80">        PARSE,</span>
    +
    +<span class="nc" id="L82">        /** Metadata relationship inference stage */</span>
    +<span class="nc" id="L83">        INFERENCE;</span>
    +    }
    +
    +    /**
    +     * Register a new metadata updater. If a plug-in supports more that one
    +     * updaters, then this method should be called for each one of the updaters
    +     * implemented.
    +     */
    +    void registerUpdaterService(Class&lt;? extends MetadataUpdater&gt; clazz);
    +
    +    /**
    +     * Unregister an updater class.
    +     * 
    +     * @param clazz The updater to unregister
    +     */
    +    void unregisterUpdaterService(Class&lt;? extends MetadataUpdater&gt; clazz);
    +
    +    /**
    +     * Run all updaters that can process data from the provided StoredProject.
    +     * 
    +     * @param project
    +     *            The project name that has been updated
    +     * 
    +     * @return true if the update jobs were scheduled successfully, false
    +     *         otherwise     */
    +    boolean update(StoredProject project);
    +
    +    /**
    +     * Inform the updater service that project data has changed. The given
    +     * project is queried for the new data; which new data is queried is
    +     * controlled by the target parameter.
    +     * 
    +     * @return true if the update jobs were scheduled successfully, false
    +     *         otherwise
    +     */
    +    boolean update(StoredProject project, UpdaterStage stage);
    +
    +    /**
    +     * Run a specific updater (and its dependencies within the same
    +     * {@link UpdaterStage}, if applicable)
    +     * 
    +     * @return true if the update jobs were scheduled successfully, false
    +     *         otherwise
    +     */
    +    boolean update(StoredProject sp, Updater u);
    +
    +    /**
    +     * Run a specific updater by its mnemonic (and its dependencies within the
    +     * same {@link UpdaterStage}, if applicable)
    +     * 
    +     * @return true if the update jobs were scheduled successfully, false
    +     *         otherwise
    +     */
    +    boolean update(StoredProject sp, String updater);
    +
    +    /**
    +     * Get a list of all updaters that can be applied to the specified project.
    +     */
    +    Set&lt;Updater&gt; getUpdaters(StoredProject sp);
    +
    +    /**
    +     * Get a list of all updaters that can be applied to the specified project.
    +     */
    +    Set&lt;Updater&gt; getUpdaters(StoredProject sp, UpdaterStage st);
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/index.html
    new file mode 100644
    index 000000000..2db58e84b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.updater</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.updater</span></div><h1>eu.sqooss.service.updater</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">148 of 148</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">23</td><td class="ctr2">23</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="UpdaterBaseJob.html" class="el_class">UpdaterBaseJob</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="78" alt="78"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k0">6</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="UpdaterService$UpdaterStage.html" class="el_class">UpdaterService.UpdaterStage</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="107" height="10" title="70" alt="70"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">10</td><td class="ctr2" id="i1">10</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/index.source.html
    new file mode 100644
    index 000000000..f226ab1df
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.updater/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.updater</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.updater</span></div><h1>eu.sqooss.service.updater</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">148 of 148</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">23</td><td class="ctr2">23</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="UpdaterBaseJob.java.html" class="el_source">UpdaterBaseJob.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="78" alt="78"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k0">6</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="UpdaterService.java.html" class="el_source">UpdaterService.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="107" height="10" title="70" alt="70"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">10</td><td class="ctr2" id="i1">10</td><td class="ctr1" id="j1">4</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BidiMap.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BidiMap.html
    new file mode 100644
    index 000000000..6b4308a40
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BidiMap.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BidiMap</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">BidiMap</span></div><h1>BidiMap</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">61 of 61</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="BidiMap.java.html#L36" class="el_method">putAll(Map)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="BidiMap.java.html#L29" class="el_method">put(Object, Object)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="65" height="10" title="13" alt="13"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="BidiMap.java.html#L44" class="el_method">remove(Object)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="55" height="10" title="11" alt="11"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="BidiMap.java.html#L19" class="el_method">BidiMap()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="40" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="BidiMap.java.html#L24" class="el_method">getKey(Object)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="25" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BidiMap.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BidiMap.java.html
    new file mode 100644
    index 000000000..67678674c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BidiMap.java.html
    @@ -0,0 +1,49 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BidiMap.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_source">BidiMap.java</span></div><h1>BidiMap.java</h1><pre class="source lang-java linenums">package eu.sqooss.service.util;
    +
    +import java.util.HashMap;
    +import java.util.Map;
    +
    +/**
    + * Quick and dirty implementation of a bidirectional map.  
    + * 
    + * @author Georgios Gousios &lt;gousiosg@gmail.com&gt;
    + *
    + * @param &lt;K&gt;
    + * @param &lt;V&gt;
    + */
    +public class BidiMap&lt;K, V&gt; extends HashMap&lt;K, V&gt; {
    +
    +    Map&lt;V, K&gt; inverse;
    +    
    +    public BidiMap() {
    +<span class="nc" id="L19">        super();</span>
    +<span class="nc" id="L20">        inverse = new HashMap&lt;V, K&gt;();</span>
    +<span class="nc" id="L21">    }</span>
    +    
    +    public K getKey(V value) {
    +<span class="nc" id="L24">        return inverse.get(value);</span>
    +    }
    +        
    +    @Override
    +    public V put(K key, V value) {
    +<span class="nc" id="L29">        V prev = super.put(key, value);</span>
    +<span class="nc" id="L30">        inverse.put(value, key);</span>
    +<span class="nc" id="L31">        return prev;</span>
    +    };
    +    
    +    @Override
    +    public void putAll(Map&lt;? extends K, ? extends V&gt; m) {
    +<span class="nc" id="L36">        super.putAll(m);</span>
    +<span class="nc bnc" id="L37" title="All 2 branches missed.">        for (K key : m.keySet()) {</span>
    +<span class="nc" id="L38">            inverse.put(super.get(key), key);</span>
    +        }
    +<span class="nc" id="L40">    }</span>
    +    
    +    @Override
    +    public V remove(Object key) {
    +<span class="nc" id="L44">        V value = super.remove(key);</span>
    +<span class="nc" id="L45">        inverse.remove(value);</span>
    +<span class="nc" id="L46">        return value;</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BundleActivatorBase.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BundleActivatorBase.html
    new file mode 100644
    index 000000000..f291f1daa
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BundleActivatorBase.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BundleActivatorBase</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">BundleActivatorBase</span></div><h1>BundleActivatorBase</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">225 of 225</td><td class="ctr2">0%</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="ctr1">32</td><td class="ctr2">32</td><td class="ctr1">69</td><td class="ctr2">69</td><td class="ctr1">17</td><td class="ctr2">17</td></tr></tfoot><tbody><tr><td id="a9"><a href="BundleActivatorBase.java.html#L130" class="el_method">serviceChanged(ServiceEvent)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="42" alt="42"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="BundleActivatorBase.java.html#L103" class="el_method">getLogger()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="28" alt="28"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h2">6</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="BundleActivatorBase.java.html#L81" class="el_method">addListener()</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="71" height="10" title="25" alt="25"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a14"><a href="BundleActivatorBase.java.html#L116" class="el_method">ungetLogger()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="62" height="10" title="22" alt="22"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h3">6</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="BundleActivatorBase.java.html#L50" class="el_method">BundleActivatorBase()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="51" height="10" title="18" alt="18"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h4">6</td><td class="ctr2" id="i4">6</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a11"><a href="BundleActivatorBase.java.html#L62" class="el_method">start(BundleContext, String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="31" height="10" title="11" alt="11"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h5">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="BundleActivatorBase.java.html#L209" class="el_method">getName()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="25" height="10" title="9" alt="9"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="BundleActivatorBase.java.html#L147" class="el_method">debug(String)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">3</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="BundleActivatorBase.java.html#L156" class="el_method">info(String)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h8">3</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a15"><a href="BundleActivatorBase.java.html#L165" class="el_method">warn(String)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h9">3</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a4"><a href="BundleActivatorBase.java.html#L174" class="el_method">error(String)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h10">3</td><td class="ctr2" id="i10">3</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a2"><a href="BundleActivatorBase.java.html#L180" class="el_method">config(String)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f9">2</td><td class="ctr2" id="g9">2</td><td class="ctr1" id="h11">3</td><td class="ctr2" id="i11">3</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a16"><a href="BundleActivatorBase.java.html#L189" class="el_method">warning(String)</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d10"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f10">2</td><td class="ctr2" id="g10">2</td><td class="ctr1" id="h12">3</td><td class="ctr2" id="i12">3</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a10"><a href="BundleActivatorBase.java.html#L198" class="el_method">severe(String)</a></td><td class="bar" id="b13"><img src="../../../.resources/redbar.gif" width="22" height="10" title="8" alt="8"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d11"><img src="../../../.resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f11">2</td><td class="ctr2" id="g11">2</td><td class="ctr1" id="h13">3</td><td class="ctr2" id="i13">3</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a13"><a href="BundleActivatorBase.java.html#L72" class="el_method">stop()</a></td><td class="bar" id="b14"><img src="../../../.resources/redbar.gif" width="14" height="10" title="5" alt="5"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">3</td><td class="ctr2" id="i14">3</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a8"><a href="BundleActivatorBase.java.html#L96" class="el_method">removeListener()</a></td><td class="bar" id="b15"><img src="../../../.resources/redbar.gif" width="14" height="10" title="5" alt="5"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">2</td><td class="ctr2" id="i15">2</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a12"><a href="BundleActivatorBase.java.html#L56" class="el_method">static {...}</a></td><td class="bar" id="b16"><img src="../../../.resources/redbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BundleActivatorBase.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BundleActivatorBase.java.html
    new file mode 100644
    index 000000000..f490a7749
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/BundleActivatorBase.java.html
    @@ -0,0 +1,218 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>BundleActivatorBase.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_source">BundleActivatorBase.java</span></div><h1>BundleActivatorBase.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.util;
    +
    +import org.osgi.framework.BundleContext;
    +import org.osgi.framework.Constants;
    +import org.osgi.framework.InvalidSyntaxException;
    +import org.osgi.framework.ServiceEvent;
    +import org.osgi.framework.ServiceListener;
    +import org.osgi.framework.ServiceReference;
    +
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.logging.LogManager;
    +
    +/**
    + * This class provides the base functionality for the activation of an
    + * Alitheia Core plugin
    + */
    +<span class="nc" id="L50">public abstract class BundleActivatorBase implements Logger, ServiceListener {</span>
    +<span class="nc" id="L51">    private ServiceReference logManagerService = null;</span>
    +<span class="nc" id="L52">    private BundleContext bc = null;</span>
    +<span class="nc" id="L53">    private LogManager logManager = null;</span>
    +<span class="nc" id="L54">    private Logger logger = null;</span>
    +<span class="nc" id="L55">    private String loggerName = null;</span>
    +<span class="nc" id="L56">    private static String loggerClass = LogManager.class.getName();</span>
    +   
    +    /**
    +     * Starts the execution of the Alitheia Core plugin
    +     */
    +    protected void start(final BundleContext bc, String loggerName) {
    +<span class="nc" id="L62">        this.bc = bc;</span>
    +<span class="nc" id="L63">        this.loggerName = loggerName;</span>
    +<span class="nc" id="L64">        getLogger();</span>
    +<span class="nc" id="L65">        addListener();</span>
    +<span class="nc" id="L66">    }</span>
    +
    +    /**
    +     * Stops the execution of the Alitheia Core plugin
    +     */
    +    protected void stop() {
    +<span class="nc" id="L72">        removeListener();</span>
    +<span class="nc" id="L73">        ungetLogger();</span>
    +<span class="nc" id="L74">    }</span>
    +
    +    /**
    +     * Attaches a listener for loggin events from the Alitheia Core
    +     * plugin
    +     */
    +    private void addListener() {
    +<span class="nc bnc" id="L81" title="All 2 branches missed.">        if (logManagerService != null) {</span>
    +<span class="nc" id="L82">            String loggerFilter = &quot;(&quot; + Constants.OBJECTCLASS</span>
    +<span class="nc" id="L83">                + &quot;=&quot; + loggerClass +&quot;)&quot;;</span>
    +            try {
    +<span class="nc" id="L85">                bc.addServiceListener(this, loggerFilter);</span>
    +<span class="nc" id="L86">            } catch (InvalidSyntaxException e) {</span>
    +<span class="nc" id="L87">                warning(e.getMessage());</span>
    +            }
    +        }
    +<span class="nc" id="L90">    }</span>
    +
    +    /**
    +     * Removes the listener for logging events
    +     */
    +    private void removeListener() {
    +<span class="nc" id="L96">        bc.removeServiceListener(this);</span>
    +<span class="nc" id="L97">    }</span>
    +
    +    /**
    +     * Retrieve the logging service for this Alitheia Core plugin
    +     */
    +    private void getLogger() {
    +<span class="nc bnc" id="L103" title="All 2 branches missed.">        if (logManagerService == null) {</span>
    +<span class="nc" id="L104">            logManagerService = bc.getServiceReference(loggerClass);</span>
    +        }
    +<span class="nc bnc" id="L106" title="All 2 branches missed.">        if (logManagerService != null) {</span>
    +<span class="nc" id="L107">            logManager = (LogManager)bc.getService(logManagerService);</span>
    +<span class="nc" id="L108">            logger = logManager.createLogger(loggerName);</span>
    +        }
    +<span class="nc" id="L110">    }</span>
    +
    +    /**
    +     * Remove the logging service for this Alitheia Core plugin
    +     */
    +    private void ungetLogger() {
    +<span class="nc bnc" id="L116" title="All 2 branches missed.">        if (logManagerService != null) {</span>
    +<span class="nc" id="L117">            logManager.releaseLogger(logger.getName());</span>
    +<span class="nc" id="L118">            logger = null;</span>
    +<span class="nc" id="L119">            bc.ungetService(logManagerService);</span>
    +<span class="nc" id="L120">            logManager = null;</span>
    +            // The service *reference* stays around, since it's OK
    +            // to keep service references even when the bundle they
    +            // refer to is not available.
    +            // logManagerService = null;
    +        }
    +<span class="nc" id="L126">    }</span>
    +
    +    // Interface ServiceListener.
    +    public void serviceChanged(ServiceEvent event) {
    +<span class="nc" id="L130">        int eventType = event.getType();</span>
    +<span class="nc bnc" id="L131" title="All 2 branches missed.">        if ((ServiceEvent.REGISTERED == eventType) ||</span>
    +<span class="nc bnc" id="L132" title="All 2 branches missed.">            (ServiceEvent.MODIFIED == eventType)) {</span>
    +<span class="nc" id="L133">            System.out.println(&quot;Logger for &quot; + loggerName + &quot; updated.&quot;);</span>
    +<span class="nc" id="L134">            getLogger();</span>
    +<span class="nc bnc" id="L135" title="All 2 branches missed.">        } else if (ServiceEvent.UNREGISTERING == eventType) {</span>
    +<span class="nc" id="L136">            System.out.println(&quot;Logger for &quot; + loggerName + &quot; unregistered.&quot;);</span>
    +<span class="nc" id="L137">            ungetLogger();</span>
    +        }
    +<span class="nc" id="L139">    }</span>
    +
    +
    +    // Interface Logger. All calls forwarded to the actual logger object.
    +    /**
    +     * Logs a &quot;debug&quot; message
    +     */
    +    public void debug(String m) {
    +<span class="nc bnc" id="L147" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L148">            logger.debug(m);</span>
    +        }
    +<span class="nc" id="L150">    }</span>
    +
    +    /**
    +     * Logs trivial information
    +     */
    +    public void info(String m) {
    +<span class="nc bnc" id="L156" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L157">            logger.info(m);</span>
    +        }
    +<span class="nc" id="L159">    }</span>
    +
    +    /**
    +     * Logs a warning message
    +     */
    +    public void warn(String m) {
    +<span class="nc bnc" id="L165" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L166">            logger.warn(m);</span>
    +        }
    +<span class="nc" id="L168">    }</span>
    +
    +    /**
    +     * Logs an error message
    +     */
    +    public void error(String m) {
    +<span class="nc bnc" id="L174" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L175">            logger.error(m);</span>
    +        }
    +<span class="nc" id="L177">    }</span>
    +
    +    public void config(String m) {
    +<span class="nc bnc" id="L180" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L181">            logger.debug(m);</span>
    +        }
    +<span class="nc" id="L183">    }</span>
    +
    +    /**
    +     * Logs a warning message
    +     */
    +    public void warning(String m) {
    +<span class="nc bnc" id="L189" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L190">            logger.warn(m);</span>
    +        }
    +<span class="nc" id="L192">    }</span>
    +
    +    /**
    +     * Logs a severe warning message
    +     */
    +    public void severe(String m) {
    +<span class="nc bnc" id="L198" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L199">            logger.error(m);</span>
    +        }
    +<span class="nc" id="L201">    }</span>
    +
    +    /**
    +     * Retrieve the name of the logging service
    +     *
    +     * @return the name of the logger
    +     */
    +    public String getName() {
    +<span class="nc bnc" id="L209" title="All 2 branches missed.">        if (logger != null) {</span>
    +<span class="nc" id="L210">            return logger.getName();</span>
    +        }
    +<span class="nc" id="L212">        return null;</span>
    +    }
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils$1.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils$1.html
    new file mode 100644
    index 000000000..f6a584542
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils$1.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FileUtils.new Comparator() {...}</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">FileUtils.new Comparator() {...}</span></div><h1>FileUtils.new Comparator() {...}</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">9 of 9</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="FileUtils.java.html#L262" class="el_method">compare(File, File)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="FileUtils.java.html#L1" class="el_method">{...}</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils$FindOpt.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils$FindOpt.html
    new file mode 100644
    index 000000000..f8c948249
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils$FindOpt.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FileUtils.FindOpt</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">FileUtils.FindOpt</span></div><h1>FileUtils.FindOpt</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">60 of 60</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="FileUtils.java.html#L268" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="FileUtils.java.html#L1" class="el_method">values()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="56" height="10" title="16" alt="16"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="FileUtils.java.html#L268" class="el_method">FileUtils.FindOpt(String, int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="FileUtils.java.html#L1" class="el_method">valueOf(String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils.html
    new file mode 100644
    index 000000000..51f27b7dc
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FileUtils</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">FileUtils</span></div><h1>FileUtils</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">472 of 472</td><td class="ctr2">0%</td><td class="bar">92 of 92</td><td class="ctr2">0%</td><td class="ctr1">59</td><td class="ctr2">59</td><td class="ctr1">107</td><td class="ctr2">107</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a6"><a href="FileUtils.java.html#L53" class="el_method">fileContents(File)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="87" alt="87"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">11</td><td class="ctr2" id="g0">11</td><td class="ctr1" id="h0">21</td><td class="ctr2" id="i0">21</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a8"><a href="FileUtils.java.html#L241" class="el_method">find(File, FileUtils.FindOpt)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="108" height="10" title="79" alt="79"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="108" height="10" title="18" alt="18"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">10</td><td class="ctr2" id="g1">10</td><td class="ctr1" id="h2">13</td><td class="ctr2" id="i2">13</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a9"><a href="FileUtils.java.html#L215" class="el_method">findBreadthFirst(File, Pattern)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="78" height="10" title="57" alt="57"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="48" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f4">5</td><td class="ctr2" id="g4">5</td><td class="ctr1" id="h3">12</td><td class="ctr2" id="i3">12</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="FileUtils.java.html#L273" class="el_method">copyFile(File, File)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="77" height="10" title="56" alt="56"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="72" height="10" title="12" alt="12"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">7</td><td class="ctr2" id="g2">7</td><td class="ctr1" id="h1">16</td><td class="ctr2" id="i1">16</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a12"><a href="FileUtils.java.html#L195" class="el_method">findGrep(File, Pattern)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="64" height="10" title="47" alt="47"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="36" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h4">10</td><td class="ctr2" id="i4">10</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="FileUtils.java.html#L152" class="el_method">appendPath(String, String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="60" height="10" title="44" alt="44"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="72" height="10" title="12" alt="12"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">7</td><td class="ctr2" id="g3">7</td><td class="ctr1" id="h5">10</td><td class="ctr2" id="i5">10</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="FileUtils.java.html#L175" class="el_method">deleteRecursive(File)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="48" height="10" title="35" alt="35"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">3</td><td class="ctr2" id="g6">3</td><td class="ctr1" id="h6">9</td><td class="ctr2" id="i6">9</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a5"><a href="FileUtils.java.html#L134" class="el_method">extension(String)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="28" height="10" title="21" alt="21"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g7">3</td><td class="ctr1" id="h7">5</td><td class="ctr2" id="i7">5</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="FileUtils.java.html#L104" class="el_method">basename(String)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="24" height="10" title="18" alt="18"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h8">4</td><td class="ctr2" id="i8">4</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a4"><a href="FileUtils.java.html#L118" class="el_method">dirname(String)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="23" height="10" title="17" alt="17"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"><img src="../../../.resources/redbar.gif" width="24" height="10" title="4" alt="4"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f9">3</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h9">4</td><td class="ctr2" id="i9">4</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a10"><a href="FileUtils.java.html#L233" class="el_method">findDirs(File)</a></td><td class="bar" id="b10"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a11"><a href="FileUtils.java.html#L237" class="el_method">findFiles(File)</a></td><td class="bar" id="b11"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a7"><a href="FileUtils.java.html#L44" class="el_method">FileUtils()</a></td><td class="bar" id="b12"><img src="../../../.resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils.java.html
    new file mode 100644
    index 000000000..6447df27f
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/FileUtils.java.html
    @@ -0,0 +1,301 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FileUtils.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_source">FileUtils.java</span></div><h1>FileUtils.java</h1><pre class="source lang-java linenums"><span class="nc" id="L1">/*</span>
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.util;
    +
    +import java.io.*;
    +import java.util.*;
    +import java.util.regex.Matcher;
    +import java.util.regex.Pattern;
    +
    +/**
    + * This is a static utility class for various file manipulations.
    + */
    +<span class="nc" id="L44">public class FileUtils {</span>
    +    /**
    +     * Read the contents of a file and return them as a byte array.
    +     *
    +     * @param f File to read.
    +     * @return File contents as a byte array or null on error (such
    +     *      as empty file, no such file, or IO error).
    +     */
    +    public static byte[] fileContents(File f) {
    +<span class="nc bnc" id="L53" title="All 2 branches missed.">        if (f==null) {</span>
    +            // Bad parameters
    +<span class="nc" id="L55">            return null;</span>
    +        }
    +
    +<span class="nc bnc" id="L58" title="All 6 branches missed.">        if (!(f.exists() &amp;&amp; f.isFile() &amp;&amp; f.canRead())) {</span>
    +            // Can only handle existing files
    +<span class="nc" id="L60">            return null;</span>
    +        }
    +
    +<span class="nc" id="L63">        int ilength = 0;</span>
    +        // Block for hiding the long variable length.
    +        try {
    +<span class="nc" id="L66">            long length = f.length();</span>
    +<span class="nc bnc" id="L67" title="All 2 branches missed.">            if (length &gt; Integer.MAX_VALUE) {</span>
    +                // Refuse to return more than a few GB of data
    +<span class="nc" id="L69">                return null;</span>
    +            }
    +<span class="nc" id="L71">            ilength = (int)length;</span>
    +<span class="nc" id="L72">        } finally {</span>
    +<span class="nc bnc" id="L73" title="All 6 branches missed.">            if (ilength &lt; 1) {</span>
    +<span class="nc" id="L74">                return null;</span>
    +            }
    +<span class="nc" id="L76">        }</span>
    +
    +        try {
    +<span class="nc" id="L79">            java.io.InputStream i = new java.io.FileInputStream(f);</span>
    +<span class="nc" id="L80">            ByteArrayOutputStream o = new ByteArrayOutputStream(ilength);</span>
    +
    +            // Read in chunks at a time.
    +            // TODO: optimize this away and create one byte array of the
    +            // right length already.
    +<span class="nc bnc" id="L85" title="All 2 branches missed.">            byte[] chunk = new byte[(ilength &gt; 16384) ? 16384 : ilength];</span>
    +            int r;
    +<span class="nc bnc" id="L87" title="All 2 branches missed.">            while ( (r=i.read(chunk,0,chunk.length)) &gt;= 0) {</span>
    +<span class="nc" id="L88">                o.write(chunk,0,r);</span>
    +            }
    +
    +<span class="nc" id="L91">            return o.toByteArray();</span>
    +<span class="nc" id="L92">        } catch (java.io.IOException e) {</span>
    +            // Just give up.
    +<span class="nc" id="L94">            return null;</span>
    +        }
    +    }
    +    
    +    /**
    +     * Return the filename portion of a path. 
    +     * @param path The path to examine
    +     * @return The filename or empty string if the path is empty or null
    +     */
    +    public static String basename (String path) {
    +<span class="nc" id="L104">        String filename = path.substring(path.lastIndexOf('/') + 1);</span>
    +        
    +<span class="nc bnc" id="L106" title="All 4 branches missed.">        if (filename == null || filename.equalsIgnoreCase(&quot;&quot;)) {</span>
    +<span class="nc" id="L107">            filename = &quot;&quot;;</span>
    +        }
    +<span class="nc" id="L109">        return filename;</span>
    +    }
    +    
    +    /**
    +     * Return the directory portion of a path. 
    +     * @param path The path to examine
    +     * @return The directory or an empty string if the path is empty or null
    +     */
    +    public static String dirname(String path) {
    +<span class="nc" id="L118">        String dirPath = path.substring(0, path.lastIndexOf('/'));</span>
    +<span class="nc bnc" id="L119" title="All 4 branches missed.">        if (dirPath == null || dirPath.equalsIgnoreCase(&quot;&quot;)) {</span>
    +<span class="nc" id="L120">            dirPath = &quot;/&quot;; </span>
    +        }
    +<span class="nc" id="L122">        return dirPath;</span>
    +    }
    +    
    +    /**
    +     * Return the extension part from a filename.
    +     * @param path The path to return the extension for
    +     * @return The extension (without the preceding .) or an empty string if
    +     * no extention can be found 
    +     */
    +    public static String extension(String path) {
    +        String extension;
    +        
    +<span class="nc" id="L134">        String name = basename (path);</span>
    +        
    +<span class="nc" id="L136">        extension = name.substring(name.lastIndexOf('.') + 1);</span>
    +<span class="nc bnc" id="L137" title="All 4 branches missed.">        if (extension == null || extension.equalsIgnoreCase(&quot;&quot;))</span>
    +<span class="nc" id="L138">            extension = &quot;&quot;;</span>
    +        
    +<span class="nc" id="L140">        return extension;</span>
    +    }
    +    
    +    /**
    +     * Append two repository paths making sure that there are the path 
    +     * seperators are OK at the merge point. 
    +     * 
    +     * @param path The original path
    +     * @param toAppend The path to append to the original path
    +     * @return A String with the two paths appended
    +     */
    +    public static String appendPath(String path, String toAppend) {
    +<span class="nc bnc" id="L152" title="All 2 branches missed.">    	if (path == null)</span>
    +<span class="nc" id="L153">    		return toAppend;</span>
    +<span class="nc bnc" id="L154" title="All 2 branches missed.">    	if (toAppend == null)</span>
    +<span class="nc" id="L155">    		return path;</span>
    +    	
    +    	String newPath;
    +    	
    +<span class="nc bnc" id="L159" title="All 4 branches missed.">    	if (path.endsWith(&quot;/&quot;) &amp;&amp; toAppend.startsWith(&quot;/&quot;))</span>
    +<span class="nc" id="L160">    		newPath = path.concat(toAppend.substring(1));</span>
    +<span class="nc bnc" id="L161" title="All 4 branches missed.">    	else if (!path.endsWith(&quot;/&quot;) &amp;&amp; !toAppend.startsWith(&quot;/&quot;))</span>
    +<span class="nc" id="L162">    		newPath = path.concat(&quot;/&quot;).concat(toAppend);</span>
    +    	else 
    +<span class="nc" id="L164">    		newPath = path.concat(toAppend);</span>
    +    	
    +<span class="nc" id="L166">    	return newPath;</span>
    +    }
    +
    +    /**
    +     * Delete a directory and its contents recursively
    +     *
    +     * @param path The file path to include
    +     */
    +    public static void deleteRecursive(File path) {
    +<span class="nc" id="L175">        File[] c = path.listFiles();</span>
    +<span class="nc bnc" id="L176" title="All 2 branches missed.">        for (File file : c) {</span>
    +<span class="nc bnc" id="L177" title="All 2 branches missed.">            if (file.isDirectory()) {</span>
    +<span class="nc" id="L178">                deleteRecursive(file);</span>
    +<span class="nc" id="L179">                file.delete();</span>
    +<span class="nc" id="L180">            } else {</span>
    +<span class="nc" id="L181">                file.delete();</span>
    +            }
    +        }
    +
    +<span class="nc" id="L185">        path.delete();</span>
    +<span class="nc" id="L186">    }</span>
    +
    +    /**
    +     * Search recursively for a filename pattern in the provided path
    +     *
    +     * @return A list of files whose full path matches with the
    +     * provided pattern
    +     */
    +    public static List&lt;File&gt; findGrep(File path, Pattern p) {
    +<span class="nc" id="L195">        List&lt;File&gt; result = new ArrayList&lt;File&gt;();</span>
    +
    +<span class="nc" id="L197">        File[] c = path.listFiles();</span>
    +<span class="nc bnc" id="L198" title="All 2 branches missed.">        for (File file : c) {</span>
    +<span class="nc bnc" id="L199" title="All 2 branches missed.">            if (file.isDirectory()) {</span>
    +<span class="nc" id="L200">                result.addAll(findGrep(file, p));</span>
    +<span class="nc" id="L201">            } else {</span>
    +<span class="nc" id="L202">                Matcher m = p.matcher(file.getAbsolutePath());</span>
    +<span class="nc bnc" id="L203" title="All 2 branches missed.">                if (m.find())</span>
    +<span class="nc" id="L204">                    result.add(file);</span>
    +            }
    +        }
    +<span class="nc" id="L207">        return result;</span>
    +    }
    +
    +    /**
    +     * Find the first file that matches with the provided pattern
    +     * using breadth first traversal.
    +     */
    +    public static File findBreadthFirst(File path, Pattern p) {
    +<span class="nc" id="L215">        File[] c = path.listFiles();</span>
    +<span class="nc" id="L216">        List&lt;File&gt; dirs = new ArrayList&lt;File&gt;();</span>
    +<span class="nc bnc" id="L217" title="All 2 branches missed.">        for (File file : c) {</span>
    +<span class="nc bnc" id="L218" title="All 2 branches missed.">            if (file.isDirectory()) {</span>
    +<span class="nc" id="L219">                dirs.add(file);</span>
    +<span class="nc" id="L220">            } else {</span>
    +<span class="nc" id="L221">                Matcher m = p.matcher(file.getAbsolutePath());</span>
    +<span class="nc bnc" id="L222" title="All 2 branches missed.">                if (m.find())</span>
    +<span class="nc" id="L223">                    return file;</span>
    +
    +            }
    +        }
    +<span class="nc bnc" id="L227" title="All 2 branches missed.">        for (File dir: dirs)</span>
    +<span class="nc" id="L228">            return findBreadthFirst(dir, p);</span>
    +<span class="nc" id="L229">        return null;</span>
    +    }
    +
    +    public static List&lt;File&gt; findDirs(File path) {
    +<span class="nc" id="L233">        return find(path, FindOpt.DIRS);</span>
    +    }
    +
    +    public static List&lt;File&gt; findFiles(File path) {
    +<span class="nc" id="L237">        return find(path, FindOpt.FILES);</span>
    +    }
    +
    +    public static List&lt;File&gt; find(File path, FindOpt what) {
    +<span class="nc" id="L241">        Set&lt;File&gt; toReturn = new HashSet&lt;File&gt;();</span>
    +
    +<span class="nc bnc" id="L243" title="All 4 branches missed.">        boolean dirs = (what == FindOpt.DIRS || what == FindOpt.ALL);</span>
    +<span class="nc bnc" id="L244" title="All 4 branches missed.">        boolean files = (what == FindOpt.FILES || what == FindOpt.ALL);</span>
    +
    +<span class="nc" id="L246">        File[] c = path.listFiles();</span>
    +<span class="nc bnc" id="L247" title="All 2 branches missed.">        for (File file : c) {</span>
    +<span class="nc bnc" id="L248" title="All 4 branches missed.">            if (file.isFile() &amp;&amp; files)</span>
    +<span class="nc" id="L249">                toReturn.add(file);</span>
    +
    +<span class="nc bnc" id="L251" title="All 4 branches missed.">            if (file.isDirectory() &amp;&amp; dirs) {</span>
    +<span class="nc" id="L252">                toReturn.add(file);</span>
    +<span class="nc" id="L253">                toReturn.addAll(find(file, what));</span>
    +            }
    +        }
    +
    +<span class="nc" id="L257">        List&lt;File&gt; result = new ArrayList&lt;File&gt;(toReturn);</span>
    +
    +<span class="nc" id="L259">        Collections.sort(result, new Comparator&lt;File&gt;() {</span>
    +            @Override
    +            public int compare(File a, File b) {
    +<span class="nc" id="L262">                return (a.getAbsolutePath().compareTo(b.getAbsolutePath()));</span>
    +            }
    +        });
    +<span class="nc" id="L265">        return result;</span>
    +    }
    +
    +<span class="nc" id="L268">    public enum FindOpt {</span>
    +<span class="nc" id="L269">        FILES, DIRS, ALL</span>
    +    }
    +
    +    public static void copyFile(File source, File dest) throws IOException {
    +<span class="nc bnc" id="L273" title="All 2 branches missed.">        if (!dest.exists()) {</span>
    +<span class="nc" id="L274">            dest.createNewFile();</span>
    +        }
    +<span class="nc" id="L276">        InputStream in = null;</span>
    +<span class="nc" id="L277">        OutputStream out = null;</span>
    +        try {
    +<span class="nc" id="L279">            in = new FileInputStream(source);</span>
    +<span class="nc" id="L280">            out = new FileOutputStream(dest);</span>
    +
    +            // Transfer bytes from in to out
    +<span class="nc" id="L283">            byte[] buf = new byte[1024];</span>
    +            int len;
    +<span class="nc bnc" id="L285" title="All 2 branches missed.">            while ((len = in.read(buf)) &gt; 0) {</span>
    +<span class="nc" id="L286">                out.write(buf, 0, len);</span>
    +            }
    +<span class="nc" id="L288">        } finally {</span>
    +<span class="nc bnc" id="L289" title="All 4 branches missed.">            if (in != null) {</span>
    +<span class="nc" id="L290">                in.close();</span>
    +            }
    +<span class="nc bnc" id="L292" title="All 4 branches missed.">            if (out != null) {</span>
    +<span class="nc" id="L293">                out.close();</span>
    +            }
    +<span class="nc" id="L295">        }</span>
    +<span class="nc" id="L296">    }</span>
    +
    +}
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS$Vertex.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS$Vertex.html
    new file mode 100644
    index 000000000..8472e4be5
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS$Vertex.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>GraphTS.Vertex</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">GraphTS.Vertex</span></div><h1>GraphTS.Vertex</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">9 of 9</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="GraphTS.java.html#L168" class="el_method">GraphTS.Vertex(GraphTS, Object)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS.html
    new file mode 100644
    index 000000000..a9bd2070e
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>GraphTS</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">GraphTS</span></div><h1>GraphTS</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">329 of 329</td><td class="ctr2">0%</td><td class="bar">32 of 32</td><td class="ctr2">0%</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">57</td><td class="ctr2">57</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a2"><a href="GraphTS.java.html#L127" class="el_method">deleteVertex(int)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="65" alt="65"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="GraphTS.java.html#L154" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="110" height="10" title="60" alt="60"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h4">7</td><td class="ctr2" id="i4">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="GraphTS.java.html#L49" class="el_method">GraphTS(int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="101" height="10" title="55" alt="55"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">3</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h0">11</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="GraphTS.java.html#L111" class="el_method">noSuccessors()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="62" height="10" title="34" alt="34"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h2">9</td><td class="ctr2" id="i2">9</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a8"><a href="GraphTS.java.html#L86" class="el_method">topo()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="60" height="10" title="33" alt="33"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">3</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h3">9</td><td class="ctr2" id="i3">9</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="GraphTS.java.html#L143" class="el_method">moveRowUp(int, int)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="40" height="10" title="22" alt="22"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="GraphTS.java.html#L148" class="el_method">moveColLeft(int, int)</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="40" height="10" title="22" alt="22"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"><img src="../../../.resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h6">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="GraphTS.java.html#L73" class="el_method">addVertex(Object)</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="33" height="10" title="18" alt="18"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a0"><a href="GraphTS.java.html#L78" class="el_method">addEdge(int, int)</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="22" height="10" title="12" alt="12"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="GraphTS.java.html#L82" class="el_method">displayVertex(int)</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="14" height="10" title="8" alt="8"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS.java.html
    new file mode 100644
    index 000000000..3b29c8f66
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/GraphTS.java.html
    @@ -0,0 +1,175 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>GraphTS.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_source">GraphTS.java</span></div><h1>GraphTS.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.util;
    +
    +import java.lang.reflect.Array;
    +import java.util.ArrayList;
    +import java.util.List;
    +
    +/**
    + * Topological sorting for Alitheia Core plugin invocations. Based on code
    + * distributed in the public domain by http://www.algorithm-code.com
    + * 
    + * @author Georgios Gousios &lt;gousiosg@aueb.gr&gt;
    + * 
    + */
    +public class GraphTS&lt;T&gt; {
    +
    +<span class="nc" id="L49">    private int MAX_VERTS = 20;</span>
    +
    +	private Vertex vertexList[]; // list of vertices
    +
    +	private int matrix[][]; // adjacency matrix
    +
    +	private int numVerts; // current number of vertices
    +
    +	private ArrayList&lt;T&gt; sortedArray;
    +
    +<span class="nc" id="L59">	public GraphTS(int numvertices) {</span>
    +<span class="nc" id="L60">	    MAX_VERTS = numvertices;</span>
    +<span class="nc" id="L61">	    vertexList = (Vertex[]) Array.newInstance(Vertex.class, MAX_VERTS);</span>
    +<span class="nc" id="L62">		matrix = new int[MAX_VERTS][MAX_VERTS];</span>
    +<span class="nc" id="L63">		numVerts = 0;</span>
    +<span class="nc" id="L64">		sortedArray = new ArrayList&lt;T&gt;(numvertices);</span>
    +<span class="nc bnc" id="L65" title="All 2 branches missed.">		for (int i = 0; i &lt; MAX_VERTS; i++) {</span>
    +<span class="nc bnc" id="L66" title="All 2 branches missed.">			for (int k = 0; k &lt; MAX_VERTS; k++)</span>
    +<span class="nc" id="L67">				matrix[i][k] = 0;</span>
    +			//sortedArray.add((T)null);
    +		}
    +<span class="nc" id="L70">	}</span>
    +
    +	public int addVertex(T lab) {
    +<span class="nc" id="L73">		vertexList[numVerts++] = new Vertex(lab);</span>
    +<span class="nc" id="L74">		return numVerts;</span>
    +	}
    +
    +	public void addEdge(int start, int end) {
    +<span class="nc" id="L78">		matrix[start - 1][end - 1] = 1;</span>
    +<span class="nc" id="L79">	}</span>
    +
    +	public void displayVertex(int v) {
    +<span class="nc" id="L82">		System.out.print(vertexList[v].label);</span>
    +<span class="nc" id="L83">	}</span>
    +
    +	public List&lt;T&gt; topo() { // toplogical sort 
    +<span class="nc" id="L86">		int orig_nVerts = numVerts;</span>
    +
    +<span class="nc bnc" id="L88" title="All 2 branches missed.">		while (numVerts &gt; 0) // while vertices remain,</span>
    +		{
    +			// get a vertex with no successors, or -1
    +<span class="nc" id="L91">			int currentVertex = noSuccessors();</span>
    +<span class="nc bnc" id="L92" title="All 2 branches missed.">			if (currentVertex == -1) // must be a cycle</span>
    +			{
    +<span class="nc" id="L94">				System.out.println(&quot;ERROR: Graph has cycles&quot;);</span>
    +<span class="nc" id="L95">				return null;</span>
    +			}
    +			// insert vertex label in sorted array (start at end)
    +<span class="nc" id="L98">			sortedArray.add(vertexList[currentVertex].label);</span>
    +
    +<span class="nc" id="L100">			deleteVertex(currentVertex); // delete vertex</span>
    +		}
    +
    +<span class="nc" id="L103">		return sortedArray;</span>
    +	}
    +
    +	public int noSuccessors() // returns vert with no successors (or -1 if no
    +	// such verts)
    +	{
    +		boolean isEdge; // edge from row to column in adjMat
    +
    +<span class="nc bnc" id="L111" title="All 2 branches missed.">		for (int row = 0; row &lt; numVerts; row++) {</span>
    +<span class="nc" id="L112">			isEdge = false; // check edges</span>
    +<span class="nc bnc" id="L113" title="All 2 branches missed.">			for (int col = 0; col &lt; numVerts; col++) {</span>
    +<span class="nc bnc" id="L114" title="All 2 branches missed.">				if (matrix[row][col] &gt; 0) // if edge to another,</span>
    +				{
    +<span class="nc" id="L116">					isEdge = true;</span>
    +<span class="nc" id="L117">					break; // this vertex has a successor try another</span>
    +				}
    +			}
    +<span class="nc bnc" id="L120" title="All 2 branches missed.">			if (!isEdge) // if no edges, has no successors</span>
    +<span class="nc" id="L121">				return row;</span>
    +		}
    +<span class="nc" id="L123">		return -1; // no</span>
    +	}
    +
    +	public void deleteVertex(int delVert) {
    +<span class="nc bnc" id="L127" title="All 2 branches missed.">		if (delVert != numVerts - 1) // if not last vertex, delete from</span>
    +		// vertexList
    +		{
    +<span class="nc bnc" id="L130" title="All 2 branches missed.">			for (int j = delVert; j &lt; numVerts - 1; j++)</span>
    +<span class="nc" id="L131">				vertexList[j] = vertexList[j + 1];</span>
    +
    +<span class="nc bnc" id="L133" title="All 2 branches missed.">			for (int row = delVert; row &lt; numVerts - 1; row++)</span>
    +<span class="nc" id="L134">				moveRowUp(row, numVerts);</span>
    +
    +<span class="nc bnc" id="L136" title="All 2 branches missed.">			for (int col = delVert; col &lt; numVerts - 1; col++)</span>
    +<span class="nc" id="L137">				moveColLeft(col, numVerts - 1);</span>
    +		}
    +<span class="nc" id="L139">		numVerts--; // one less vertex</span>
    +<span class="nc" id="L140">	}</span>
    +
    +	private void moveRowUp(int row, int length) {
    +<span class="nc bnc" id="L143" title="All 2 branches missed.">		for (int col = 0; col &lt; length; col++)</span>
    +<span class="nc" id="L144">			matrix[row][col] = matrix[row + 1][col];</span>
    +<span class="nc" id="L145">	}</span>
    +
    +	private void moveColLeft(int col, int length) {
    +<span class="nc bnc" id="L148" title="All 2 branches missed.">		for (int row = 0; row &lt; length; row++)</span>
    +<span class="nc" id="L149">			matrix[row][col] = matrix[row][col + 1];</span>
    +<span class="nc" id="L150">	}</span>
    +	
    +	@Override
    +	public String toString() {
    +<span class="nc" id="L154">	    String result = &quot;&quot;;</span>
    +<span class="nc bnc" id="L155" title="All 2 branches missed.">	    for(int i = 0; i &lt; numVerts; i++){</span>
    +<span class="nc" id="L156">	        result = result + vertexList[i].label + &quot;[&quot;;</span>
    +<span class="nc bnc" id="L157" title="All 2 branches missed.">	        for (int j = 0; j &lt; numVerts; j++)</span>
    +<span class="nc" id="L158">	            result = result + matrix[i][j] + &quot;,&quot;;</span>
    +<span class="nc" id="L159">	        result += &quot;]\n&quot;;</span>
    +	    }
    +<span class="nc" id="L161">	    return result;</span>
    +	            
    +	}
    +
    +	class Vertex {
    +	    public T label;
    +
    +<span class="nc" id="L168">	    public Vertex(T lab) {</span>
    +<span class="nc" id="L169">	        label = lab;</span>
    +<span class="nc" id="L170">	    }</span>
    +	}
    +}
    +
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/Pair.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/Pair.html
    new file mode 100644
    index 000000000..c91a8b2f8
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/Pair.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Pair</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">Pair</span></div><h1>Pair</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">161 of 161</td><td class="ctr2">0%</td><td class="bar">26 of 26</td><td class="ctr2">0%</td><td class="ctr1">19</td><td class="ctr2">19</td><td class="ctr1">37</td><td class="ctr2">37</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a5"><a href="Pair.java.html#L92" class="el_method">toString()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="47" alt="47"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="Pair.java.html#L112" class="el_method">equals(Object)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="89" height="10" title="35" alt="35"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="Pair.java.html#L82" class="el_method">compareTo(Pair)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="79" height="10" title="31" alt="31"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="96" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="Pair.java.html#L126" class="el_method">hashCode()</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="76" height="10" title="30" alt="30"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">3</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="Pair.java.html#L59" class="el_method">Pair()</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="22" height="10" title="9" alt="9"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">4</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="Pair.java.html#L69" class="el_method">Pair(Object, Object)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="22" height="10" title="9" alt="9"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">4</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/Pair.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/Pair.java.html
    new file mode 100644
    index 000000000..c9b92805b
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/Pair.java.html
    @@ -0,0 +1,136 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>Pair.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_source">Pair.java</span></div><h1>Pair.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.util;
    +
    +import java.lang.Comparable;
    +
    +/**
    + * This class is a container for an object pair.
    + *
    + * @author Christoph Schleifenbaum
    + */
    +public class Pair&lt;T1,T2&gt; implements Comparable&lt;Pair&lt;T1,T2&gt;&gt; {
    +
    +    /**
    +     * First value.
    +     */
    +    public T1 first;
    +
    +    /**
    +     * Second value.
    +     */
    +    public T2 second;
    +
    +    /**
    +     * Default contructor.
    +     * Fills both values with null.
    +     */
    +<span class="nc" id="L59">    public Pair() {</span>
    +<span class="nc" id="L60">        this.first = null;</span>
    +<span class="nc" id="L61">        this.second = null;</span>
    +<span class="nc" id="L62">    }</span>
    +
    +    /**
    +     * Constructor.
    +     * @param first The value used for first.
    +     * @param second The value used for second.
    +     */
    +<span class="nc" id="L69">    public Pair(T1 first, T2 second) {</span>
    +<span class="nc" id="L70">        this.first = first;</span>
    +<span class="nc" id="L71">        this.second = second;</span>
    +<span class="nc" id="L72">    }</span>
    +
    +    /**
    +     * Compares this object with the specified object for order.
    +     * @param other the Object to be compared.
    +     * @return negative integer, zero, or a positive integer as this object is 
    +     * less than, equal to, or greater than the specified object.
    +     */
    +    @SuppressWarnings(&quot;unchecked&quot;)
    +    public int compareTo(Pair&lt;T1,T2&gt; other) {
    +<span class="nc bnc" id="L82" title="All 6 branches missed.">        if (this == other || !(first instanceof Comparable&lt;?&gt;) || !(second instanceof Comparable&lt;?&gt;)) {</span>
    +<span class="nc" id="L83">            return 0;</span>
    +        }
    +
    +<span class="nc" id="L86">        int firstComp = ((Comparable&lt;T1&gt;)first).compareTo( other.first );</span>
    +        
    +<span class="nc bnc" id="L88" title="All 2 branches missed.">        return (firstComp != 0) ? firstComp : ((Comparable&lt;T2&gt;)second).compareTo(other.second);</span>
    +    }
    +
    +    public String toString() {
    +<span class="nc" id="L92">        StringBuilder b = new StringBuilder();</span>
    +<span class="nc" id="L93">        b.append(&quot;(&quot;);</span>
    +<span class="nc bnc" id="L94" title="All 2 branches missed.">        if (first != null) {</span>
    +<span class="nc" id="L95">            b.append(first.toString());</span>
    +<span class="nc" id="L96">        } else {</span>
    +<span class="nc" id="L97">            b.append(&quot;null&quot;);</span>
    +        }
    +<span class="nc" id="L99">        b.append(&quot;,&quot;);</span>
    +<span class="nc bnc" id="L100" title="All 2 branches missed.">        if (second != null) {</span>
    +<span class="nc" id="L101">            b.append(second.toString());</span>
    +<span class="nc" id="L102">        } else {</span>
    +<span class="nc" id="L103">            b.append(&quot;null&quot;);</span>
    +        }
    +<span class="nc" id="L105">        b.append(&quot;)&quot;);</span>
    +
    +<span class="nc" id="L107">        return b.toString();</span>
    +    }
    +    
    +    @Override
    +    public boolean equals(Object obj) {
    +<span class="nc bnc" id="L112" title="All 2 branches missed.">        if (obj == null)</span>
    +<span class="nc" id="L113">            return false;</span>
    +<span class="nc bnc" id="L114" title="All 2 branches missed.">        if (obj == this)</span>
    +<span class="nc" id="L115">            return true;</span>
    +<span class="nc bnc" id="L116" title="All 2 branches missed.">        if (obj.getClass() != getClass())</span>
    +<span class="nc" id="L117">            return false;</span>
    +
    +<span class="nc" id="L119">        Pair p = (Pair)obj;</span>
    +        
    +<span class="nc bnc" id="L121" title="All 4 branches missed.">        return first.equals(p.first) &amp;&amp; second.equals(p.second);</span>
    +    }
    +    
    +    @Override
    +    public int hashCode() {
    +<span class="nc" id="L126">        int result = 1;</span>
    +<span class="nc bnc" id="L127" title="All 2 branches missed.">        result = 31 * result + ((first == null) ? 0 : first.hashCode());</span>
    +<span class="nc bnc" id="L128" title="All 2 branches missed.">        result = 31 * result + ((second == null) ? 0 : second.hashCode());</span>
    +<span class="nc" id="L129">        return result;        </span>
    +    }
    +}
    +
    +
    +// vi: ai nosi sw=4 ts=4 expandtab
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/StringUtils.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/StringUtils.html
    new file mode 100644
    index 000000000..c4535f556
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/StringUtils.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>StringUtils</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">StringUtils</span></div><h1>StringUtils</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">200 of 200</td><td class="ctr2">0%</td><td class="bar">42 of 42</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">45</td><td class="ctr2">45</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a3"><a href="StringUtils.java.html#L80" class="el_method">join(List, String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="55" alt="55"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="100" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h0">12</td><td class="ctr2" id="i0">12</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="StringUtils.java.html#L51" class="el_method">join(String[], String)</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="111" height="10" title="51" alt="51"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="100" height="10" title="10" alt="10"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">6</td><td class="ctr2" id="g2">6</td><td class="ctr1" id="h1">11</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="StringUtils.java.html#L112" class="el_method">bitfieldToString(String[], int)</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="104" height="10" title="48" alt="48"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h2">11</td><td class="ctr2" id="i2">11</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="StringUtils.java.html#L152" class="el_method">indexOf(String[], String)</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="52" height="10" title="24" alt="24"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="80" height="10" title="8" alt="8"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g3">5</td><td class="ctr1" id="h3">6</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="StringUtils.java.html#L136" class="el_method">makeXHTMLSafe(String)</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="24" height="10" title="11" alt="11"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="StringUtils.java.html#L171" class="el_method">contains(String[], String)</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="17" height="10" title="8" alt="8"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="StringUtils.java.html#L38" class="el_method">StringUtils()</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/StringUtils.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/StringUtils.java.html
    new file mode 100644
    index 000000000..a0a7be7bf
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/StringUtils.java.html
    @@ -0,0 +1,175 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>StringUtils.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_source">StringUtils.java</span></div><h1>StringUtils.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.service.util;
    +
    +import java.util.List;
    +
    +<span class="nc" id="L38">public class StringUtils {</span>
    +    /**
    +    * Concatenate the strings in @p names, placing @p sep
    +    * between each (except at the end) and return the resulting
    +    * string.
    +    *
    +    * @see QStringList::join
    +    *
    +    * Test cases:
    +    *   - null separator, empty separator, one-character and longer string separator
    +    *   - null names, 0-length names, 1 name, n names
    +    */
    +    public static String join(String[] names, String sep) {
    +<span class="nc bnc" id="L51" title="All 2 branches missed.">        if ( names == null ) {</span>
    +<span class="nc" id="L52">            return null;</span>
    +        }
    +<span class="nc" id="L54">        int l = names.length;</span>
    +
    +<span class="nc bnc" id="L56" title="All 2 branches missed.">        if (l&lt;1) {</span>
    +<span class="nc" id="L57">            return &quot;&quot;;</span>
    +        }
    +
    +        // This is just a (bad) guess at the capacity required
    +<span class="nc" id="L61">        StringBuilder b = new StringBuilder( l * sep.length() + l + 1 );</span>
    +<span class="nc bnc" id="L62" title="All 2 branches missed.">        for ( int i=0; i&lt;l; i++ ) {</span>
    +<span class="nc" id="L63">            b.append(names[i]);</span>
    +<span class="nc bnc" id="L64" title="All 4 branches missed.">            if ( (i &lt; (l-1)) &amp;&amp; (sep != null) ) {</span>
    +<span class="nc" id="L65">                b.append(sep);</span>
    +            }
    +        }
    +<span class="nc" id="L68">        return b.toString();</span>
    +    }
    +
    +    /**
    +     * Overload of join() for use with List.
    +     *
    +     * @param names List of strings to join together
    +     * @param sep   Separator between strings (may be null)
    +     * @return null if names is null; strings in names joined with
    +     *          sep in between otherwise.
    +     */
    +    public static String join(List&lt;String&gt; names, String sep) {
    +<span class="nc bnc" id="L80" title="All 2 branches missed.">        if ( names == null ) {</span>
    +<span class="nc" id="L81">            return null;</span>
    +        }
    +<span class="nc" id="L83">        int l = names.size();</span>
    +<span class="nc bnc" id="L84" title="All 2 branches missed.">        if (l&lt;1) {</span>
    +<span class="nc" id="L85">            return &quot;&quot;;</span>
    +        }
    +
    +        // This is just a (bad) guess at the capacity required
    +<span class="nc" id="L89">        StringBuilder b = new StringBuilder( l * sep.length() + l + 1);</span>
    +<span class="nc" id="L90">        int i = 0;</span>
    +<span class="nc bnc" id="L91" title="All 2 branches missed.">        for ( String s : names ) {</span>
    +<span class="nc" id="L92">            b.append(s);</span>
    +<span class="nc bnc" id="L93" title="All 4 branches missed.">            if ( (i &lt; (l-1)) &amp;&amp; (sep != null) ) {</span>
    +<span class="nc" id="L94">                b.append(sep);</span>
    +            }
    +        }
    +<span class="nc" id="L97">        return b.toString();</span>
    +    }
    +
    +    /**
    +    * Given a bitfield value @p value, and an array that names
    +    * each bit position, return a comma-separated string that
    +    * names each bit position that is set in @p value.
    +    *
    +    * Test cases:
    +    *   - value 0, a few random ones, -1 (0xffffffffffffffff), MAXINT.
    +    *   - null names, 0-length names, names contains nulls,
    +    *   - names contains empty strings, names too short for value,
    +    *   - names too long.
    +    */
    +    public static String bitfieldToString(String[] statenames, int value) {
    +<span class="nc bnc" id="L112" title="All 6 branches missed.">        if ( (value == 0) || (statenames == null) || (statenames.length == 0) ) {</span>
    +<span class="nc" id="L113">            return &quot;&quot;;</span>
    +        }
    +<span class="nc" id="L115">        StringBuilder b = new StringBuilder();</span>
    +<span class="nc bnc" id="L116" title="All 2 branches missed.">        for ( int statebit = 0; statebit &lt; statenames.length; statebit++ ) {</span>
    +<span class="nc" id="L117">            int statebitvalue = 1 &lt;&lt; statebit ;</span>
    +<span class="nc bnc" id="L118" title="All 2 branches missed.">            if ( (value &amp; statebitvalue) != 0 ) {</span>
    +                // ASSERT: statebit &lt; statenames.length
    +                // TODO: handle null strings
    +<span class="nc" id="L121">                b.append(statenames[statebit]);</span>
    +                // TODO: make this bit-twiddling, may fail with negative value
    +<span class="nc" id="L123">                value -= statebitvalue;</span>
    +<span class="nc bnc" id="L124" title="All 2 branches missed.">                if ( value != 0 ) {</span>
    +<span class="nc" id="L125">                    b.append(&quot;, &quot;);</span>
    +                }
    +            }
    +        }
    +<span class="nc" id="L129">        return b.toString();</span>
    +    }
    +
    +    /**
    +     * Given a String, this function returns an XHTML-safe version of the same
    +     */
    +    public static String makeXHTMLSafe(String line){
    +<span class="nc" id="L136">        return line.replace(&quot;&amp;&quot;, &quot;&amp;amp;&quot;)</span>
    +<span class="nc" id="L137">            .replace(&quot;&lt;&quot;, &quot;&amp;lt;&quot;)</span>
    +<span class="nc" id="L138">            .replace(&quot;&gt;&quot;, &quot;&amp;gt;&quot;);</span>
    +    }
    +
    +    /**
    +     * Find the given needle string in an array (haystack) of strings.
    +     * Returns the index of the needle in the haystack, or -1 if not found.
    +     *
    +     * @param haystack Array of strings to search.
    +     * @param needle String to search for.
    +     * @return -1 if the needle is not found or the needle or haystack
    +     *      is invalid. Otherwise the index (&gt;=0) of the needle in the
    +     *      haystack.
    +     */
    +    public static int indexOf(String[] haystack, String needle) {
    +<span class="nc bnc" id="L152" title="All 4 branches missed.">        if ( (haystack == null) || (needle == null) ) {</span>
    +<span class="nc" id="L153">            return -1;</span>
    +        }
    +<span class="nc bnc" id="L155" title="All 2 branches missed.">        for (int i = 0; i&lt;haystack.length; i++) {</span>
    +<span class="nc bnc" id="L156" title="All 2 branches missed.">            if (haystack[i].equals(needle)) {</span>
    +<span class="nc" id="L157">                return i;</span>
    +            }
    +        }
    +<span class="nc" id="L160">        return -1;</span>
    +    }
    +
    +    /**
    +     * State whether the given needle string is to be found in the haystack.
    +     *
    +     * @param haystack Array of strings to search through.
    +     * @param needle String to search for.
    +     * @return true iff the needle occurs in the haystack.
    +     */
    +    public static boolean contains(String[] haystack, String needle) {
    +<span class="nc bnc" id="L171" title="All 2 branches missed.">        return indexOf(haystack,needle) &gt;= 0;</span>
    +    }
    +}
    +
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/URIUtills.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/URIUtills.html
    new file mode 100644
    index 000000000..1586f4d0c
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/URIUtills.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>URIUtills</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_class">URIUtills</span></div><h1>URIUtills</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">17 of 17</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="URIUtills.java.html#L9" class="el_method">toURI(String)</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="URIUtills.java.html#L5" class="el_method">URIUtills()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="25" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/URIUtills.java.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/URIUtills.java.html
    new file mode 100644
    index 000000000..eec80cd4a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/URIUtills.java.html
    @@ -0,0 +1,16 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>URIUtills.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.service.util</a> &gt; <span class="el_source">URIUtills.java</span></div><h1>URIUtills.java</h1><pre class="source lang-java linenums">package eu.sqooss.service.util;
    +
    +import java.net.URI;
    +
    +<span class="nc" id="L5">public class URIUtills {</span>
    +
    +	public static URI toURI(String url) {
    +		try {
    +<span class="nc" id="L9">			url = url.replace(&quot;\\&quot;, &quot;/&quot;).replace(&quot; &quot;, &quot;%20&quot;);</span>
    +<span class="nc" id="L10">			return URI.create(url);</span>
    +<span class="nc" id="L11">		} catch (IllegalArgumentException iae) {</span>
    +<span class="nc" id="L12">			return null;</span>
    +		}
    +	}
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/index.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/index.html
    new file mode 100644
    index 000000000..fd393ac26
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.util</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.util</span></div><h1>eu.sqooss.service.util</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,543 of 1,543</td><td class="ctr2">0%</td><td class="bar">224 of 224</td><td class="ctr2">0%</td><td class="ctr1">179</td><td class="ctr2">179</td><td class="ctr1">341</td><td class="ctr2">341</td><td class="ctr1">67</td><td class="ctr2">67</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a2"><a href="FileUtils.html" class="el_class">FileUtils</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="472" alt="472"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="92" alt="92"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">59</td><td class="ctr2" id="g0">59</td><td class="ctr1" id="h0">107</td><td class="ctr2" id="i0">107</td><td class="ctr1" id="j1">13</td><td class="ctr2" id="k1">13</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a5"><a href="GraphTS.html" class="el_class">GraphTS</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="83" height="10" title="329" alt="329"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="41" height="10" title="32" alt="32"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f3">26</td><td class="ctr2" id="g3">26</td><td class="ctr1" id="h2">57</td><td class="ctr2" id="i2">57</td><td class="ctr1" id="j2">10</td><td class="ctr2" id="k2">10</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="BundleActivatorBase.html" class="el_class">BundleActivatorBase</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="57" height="10" title="225" alt="225"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="39" height="10" title="30" alt="30"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">32</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h1">69</td><td class="ctr2" id="i1">69</td><td class="ctr1" id="j0">17</td><td class="ctr2" id="k0">17</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a8"><a href="StringUtils.html" class="el_class">StringUtils</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="50" height="10" title="200" alt="200"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="54" height="10" title="42" alt="42"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">28</td><td class="ctr2" id="g2">28</td><td class="ctr1" id="h3">45</td><td class="ctr2" id="i3">45</td><td class="ctr1" id="j3">7</td><td class="ctr2" id="k3">7</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="Pair.html" class="el_class">Pair</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="40" height="10" title="161" alt="161"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="33" height="10" title="26" alt="26"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">19</td><td class="ctr2" id="g4">19</td><td class="ctr1" id="h4">37</td><td class="ctr2" id="i4">37</td><td class="ctr1" id="j4">6</td><td class="ctr2" id="k4">6</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a0"><a href="BidiMap.html" class="el_class">BidiMap</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="15" height="10" title="61" alt="61"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">6</td><td class="ctr2" id="g5">6</td><td class="ctr1" id="h5">14</td><td class="ctr2" id="i5">14</td><td class="ctr1" id="j5">5</td><td class="ctr2" id="k5">5</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a3"><a href="FileUtils$FindOpt.html" class="el_class">FileUtils.FindOpt</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="15" height="10" title="60" alt="60"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">4</td><td class="ctr2" id="g6">4</td><td class="ctr1" id="h7">3</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j6">4</td><td class="ctr2" id="k6">4</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a9"><a href="URIUtills.html" class="el_class">URIUtills</a></td><td class="bar" id="b7"><img src="../../../.resources/redbar.gif" width="4" height="10" title="17" alt="17"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h6">5</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j7">2</td><td class="ctr2" id="k7">2</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a6"><a href="GraphTS$Vertex.html" class="el_class">GraphTS.Vertex</a></td><td class="bar" id="b8"><img src="../../../.resources/redbar.gif" width="2" height="10" title="9" alt="9"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h8">3</td><td class="ctr2" id="i8">3</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a4"><a href="FileUtils$1.html" class="el_class">FileUtils.new Comparator() {...}</a></td><td class="bar" id="b9"><img src="../../../.resources/redbar.gif" width="2" height="10" title="9" alt="9"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h9">3</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j8">2</td><td class="ctr2" id="k8">2</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/index.source.html b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/index.source.html
    new file mode 100644
    index 000000000..417bfd1e4
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/eu.sqooss.service.util/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.service.util</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/main/java</a> &gt; <span class="el_package">eu.sqooss.service.util</span></div><h1>eu.sqooss.service.util</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,543 of 1,543</td><td class="ctr2">0%</td><td class="bar">224 of 224</td><td class="ctr2">0%</td><td class="ctr1">179</td><td class="ctr2">179</td><td class="ctr1">341</td><td class="ctr2">341</td><td class="ctr1">67</td><td class="ctr2">67</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a2"><a href="FileUtils.java.html" class="el_source">FileUtils.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="541" alt="541"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="92" alt="92"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">65</td><td class="ctr2" id="g0">65</td><td class="ctr1" id="h0">111</td><td class="ctr2" id="i0">111</td><td class="ctr1" id="j0">19</td><td class="ctr2" id="k0">19</td><td class="ctr1" id="l0">3</td><td class="ctr2" id="m0">3</td></tr><tr><td id="a3"><a href="GraphTS.java.html" class="el_source">GraphTS.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="74" height="10" title="338" alt="338"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../../../.resources/redbar.gif" width="41" height="10" title="32" alt="32"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f3">27</td><td class="ctr2" id="g3">27</td><td class="ctr1" id="h2">60</td><td class="ctr2" id="i2">60</td><td class="ctr1" id="j2">11</td><td class="ctr2" id="k2">11</td><td class="ctr1" id="l1">2</td><td class="ctr2" id="m1">2</td></tr><tr><td id="a1"><a href="BundleActivatorBase.java.html" class="el_source">BundleActivatorBase.java</a></td><td class="bar" id="b2"><img src="../../../.resources/redbar.gif" width="49" height="10" title="225" alt="225"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../../../.resources/redbar.gif" width="39" height="10" title="30" alt="30"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">32</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h1">69</td><td class="ctr2" id="i1">69</td><td class="ctr1" id="j1">17</td><td class="ctr2" id="k1">17</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a5"><a href="StringUtils.java.html" class="el_source">StringUtils.java</a></td><td class="bar" id="b3"><img src="../../../.resources/redbar.gif" width="44" height="10" title="200" alt="200"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="54" height="10" title="42" alt="42"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">28</td><td class="ctr2" id="g2">28</td><td class="ctr1" id="h3">45</td><td class="ctr2" id="i3">45</td><td class="ctr1" id="j3">7</td><td class="ctr2" id="k3">7</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a4"><a href="Pair.java.html" class="el_source">Pair.java</a></td><td class="bar" id="b4"><img src="../../../.resources/redbar.gif" width="35" height="10" title="161" alt="161"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../../../.resources/redbar.gif" width="33" height="10" title="26" alt="26"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">19</td><td class="ctr2" id="g4">19</td><td class="ctr1" id="h4">37</td><td class="ctr2" id="i4">37</td><td class="ctr1" id="j4">6</td><td class="ctr2" id="k4">6</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a0"><a href="BidiMap.java.html" class="el_source">BidiMap.java</a></td><td class="bar" id="b5"><img src="../../../.resources/redbar.gif" width="13" height="10" title="61" alt="61"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../../../.resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f5">6</td><td class="ctr2" id="g5">6</td><td class="ctr1" id="h5">14</td><td class="ctr2" id="i5">14</td><td class="ctr1" id="j5">5</td><td class="ctr2" id="k5">5</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a6"><a href="URIUtills.java.html" class="el_source">URIUtills.java</a></td><td class="bar" id="b6"><img src="../../../.resources/redbar.gif" width="3" height="10" title="17" alt="17"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h6">5</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j6">2</td><td class="ctr2" id="k6">2</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_java/index.html b/4143760-4167562/coverage/before/core/src_main_java/index.html
    new file mode 100644
    index 000000000..b9adf2156
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_java/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../.resources/report.gif" type="image/gif"/><title>src/main/java</title><script type="text/javascript" src="../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../.sessions.html" class="el_session">Sessions</a></span><a href="../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../index.html" class="el_group">core</a> &gt; <span class="el_bundle">src/main/java</span></div><h1>src/main/java</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">37,980 of 39,180</td><td class="ctr2">3%</td><td class="bar">2,895 of 2,956</td><td class="ctr2">2%</td><td class="ctr1">2,995</td><td class="ctr2">3,075</td><td class="ctr1">8,376</td><td class="ctr2">8,660</td><td class="ctr1">1,513</td><td class="ctr2">1,582</td><td class="ctr1">153</td><td class="ctr2">165</td></tr></tfoot><tbody><tr><td id="a13"><a href="eu.sqooss.impl.service.webadmin/index.html" class="el_package">eu.sqooss.impl.service.webadmin</a></td><td class="bar" id="b0"><img src="../../.resources/redbar.gif" width="120" height="10" title="8,416" alt="8,416"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d1"><img src="../../.resources/redbar.gif" width="89" height="10" title="444" alt="444"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f1">290</td><td class="ctr2" id="g1">290</td><td class="ctr1" id="h1">1,564</td><td class="ctr2" id="i1">1,564</td><td class="ctr1" id="j3">68</td><td class="ctr2" id="k3">68</td><td class="ctr1" id="l5">8</td><td class="ctr2" id="m5">8</td></tr><tr><td id="a19"><a href="eu.sqooss.service.db/index.html" class="el_package">eu.sqooss.service.db</a></td><td class="bar" id="b1"><img src="../../.resources/redbar.gif" width="116" height="10" title="8,188" alt="8,188"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d0"><img src="../../.resources/redbar.gif" width="120" height="10" title="596" alt="596"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f0">1,023</td><td class="ctr2" id="g0">1,023</td><td class="ctr1" id="h0">2,229</td><td class="ctr2" id="i0">2,229</td><td class="ctr1" id="j0">713</td><td class="ctr2" id="k0">713</td><td class="ctr1" id="l0">49</td><td class="ctr2" id="m0">49</td></tr><tr><td id="a15"><a href="eu.sqooss.service.abstractmetric/index.html" class="el_package">eu.sqooss.service.abstractmetric</a></td><td class="bar" id="b2"><img src="../../.resources/redbar.gif" width="35" height="10" title="2,490" alt="2,490"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d3"><img src="../../.resources/redbar.gif" width="43" height="10" title="214" alt="214"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f2">194</td><td class="ctr2" id="g2">194</td><td class="ctr1" id="h2">549</td><td class="ctr2" id="i2">549</td><td class="ctr1" id="j1">87</td><td class="ctr2" id="k1">87</td><td class="ctr1" id="l2">10</td><td class="ctr2" id="m2">10</td></tr><tr><td id="a20"><a href="eu.sqooss.service.fds/index.html" class="el_package">eu.sqooss.service.fds</a></td><td class="bar" id="b3"><img src="../../.resources/redbar.gif" width="28" height="10" title="2,023" alt="2,023"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d10"><img src="../../.resources/redbar.gif" width="21" height="10" title="106" alt="106"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">110</td><td class="ctr2" id="g8">110</td><td class="ctr1" id="h8">264</td><td class="ctr2" id="i9">264</td><td class="ctr1" id="j5">57</td><td class="ctr2" id="k6">57</td><td class="ctr1" id="l3">10</td><td class="ctr2" id="m3">10</td></tr><tr><td id="a4"><a href="eu.sqooss.impl.service.fds/index.html" class="el_package">eu.sqooss.impl.service.fds</a></td><td class="bar" id="b4"><img src="../../.resources/redbar.gif" width="26" height="10" title="1,846" alt="1,846"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d5"><img src="../../.resources/redbar.gif" width="28" height="10" title="140" alt="140"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f5">123</td><td class="ctr2" id="g6">123</td><td class="ctr1" id="h3">424</td><td class="ctr2" id="i3">424</td><td class="ctr1" id="j6">53</td><td class="ctr2" id="k7">53</td><td class="ctr1" id="l6">6</td><td class="ctr2" id="m6">6</td></tr><tr><td id="a3"><a href="eu.sqooss.impl.service.db/index.html" class="el_package">eu.sqooss.impl.service.db</a></td><td class="bar" id="b5"><img src="../../.resources/redbar.gif" width="24" height="10" title="1,717" alt="1,717"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d6"><img src="../../.resources/redbar.gif" width="26" height="10" title="134" alt="134"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f8">108</td><td class="ctr2" id="g9">108</td><td class="ctr1" id="h4">396</td><td class="ctr2" id="i4">396</td><td class="ctr1" id="j7">41</td><td class="ctr2" id="k8">41</td><td class="ctr1" id="l13">2</td><td class="ctr2" id="m15">2</td></tr><tr><td id="a12"><a href="eu.sqooss.impl.service.updater/index.html" class="el_package">eu.sqooss.impl.service.updater</a></td><td class="bar" id="b6"><img src="../../.resources/redbar.gif" width="22" height="10" title="1,554" alt="1,554"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d4"><img src="../../.resources/redbar.gif" width="30" height="10" title="152" alt="152"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f6">115</td><td class="ctr2" id="g7">115</td><td class="ctr1" id="h6">333</td><td class="ctr2" id="i6">333</td><td class="ctr1" id="j8">39</td><td class="ctr2" id="k9">39</td><td class="ctr1" id="l7">6</td><td class="ctr2" id="m7">6</td></tr><tr><td id="a25"><a href="eu.sqooss.service.util/index.html" class="el_package">eu.sqooss.service.util</a></td><td class="bar" id="b7"><img src="../../.resources/redbar.gif" width="22" height="10" title="1,543" alt="1,543"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d2"><img src="../../.resources/redbar.gif" width="45" height="10" title="224" alt="224"/></td><td class="ctr2" id="e11">0%</td><td class="ctr1" id="f3">179</td><td class="ctr2" id="g3">179</td><td class="ctr1" id="h5">341</td><td class="ctr2" id="i5">341</td><td class="ctr1" id="j4">67</td><td class="ctr2" id="k4">67</td><td class="ctr1" id="l4">10</td><td class="ctr2" id="m4">10</td></tr><tr><td id="a23"><a href="eu.sqooss.service.tds/index.html" class="el_package">eu.sqooss.service.tds</a></td><td class="bar" id="b8"><img src="../../.resources/redbar.gif" width="20" height="10" title="1,431" alt="1,431"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d7"><img src="../../.resources/redbar.gif" width="24" height="10" title="120" alt="120"/></td><td class="ctr2" id="e12">0%</td><td class="ctr1" id="f4">133</td><td class="ctr2" id="g4">133</td><td class="ctr1" id="h7">288</td><td class="ctr2" id="i7">288</td><td class="ctr1" id="j2">73</td><td class="ctr2" id="k2">73</td><td class="ctr1" id="l1">19</td><td class="ctr2" id="m1">19</td></tr><tr><td id="a6"><a href="eu.sqooss.impl.service.metricactivator/index.html" class="el_package">eu.sqooss.impl.service.metricactivator</a></td><td class="bar" id="b9"><img src="../../.resources/redbar.gif" width="15" height="10" title="1,054" alt="1,054"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d12"><img src="../../.resources/redbar.gif" width="15" height="10" title="78" alt="78"/></td><td class="ctr2" id="e13">0%</td><td class="ctr1" id="f12">62</td><td class="ctr2" id="g13">62</td><td class="ctr1" id="h10">223</td><td class="ctr2" id="i11">223</td><td class="ctr1" id="j15">23</td><td class="ctr2" id="k17">23</td><td class="ctr1" id="l8">5</td><td class="ctr2" id="m8">5</td></tr><tr><td id="a17"><a href="eu.sqooss.service.admin.actions/index.html" class="el_package">eu.sqooss.service.admin.actions</a></td><td class="bar" id="b10"><img src="../../.resources/redbar.gif" width="14" height="10" title="1,041" alt="1,041"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d9"><img src="../../.resources/redbar.gif" width="21" height="10" title="108" alt="108"/></td><td class="ctr2" id="e14">0%</td><td class="ctr1" id="f11">67</td><td class="ctr2" id="g12">69</td><td class="ctr1" id="h13">187</td><td class="ctr2" id="i14">190</td><td class="ctr1" id="j19">13</td><td class="ctr2" id="k21">15</td><td class="ctr1" id="l9">3</td><td class="ctr2" id="m9">4</td></tr><tr><td id="a22"><a href="eu.sqooss.service.scheduler/index.html" class="el_package">eu.sqooss.service.scheduler</a></td><td class="bar" id="b11"><img src="../../.resources/redbar.gif" width="12" height="10" title="893" alt="893"/><img src="../../.resources/greenbar.gif" width="4" height="10" title="322" alt="322"/></td><td class="ctr2" id="c3">27%</td><td class="bar" id="d8"><img src="../../.resources/redbar.gif" width="23" height="10" title="116" alt="116"/><img src="../../.resources/greenbar.gif" width="3" height="10" title="16" alt="16"/></td><td class="ctr2" id="e3">12%</td><td class="ctr1" id="f9">101</td><td class="ctr2" id="g5">125</td><td class="ctr1" id="h12">196</td><td class="ctr2" id="i8">271</td><td class="ctr1" id="j9">37</td><td class="ctr2" id="k5">59</td><td class="ctr1" id="l20">1</td><td class="ctr2" id="m10">4</td></tr><tr><td id="a7"><a href="eu.sqooss.impl.service.pa/index.html" class="el_package">eu.sqooss.impl.service.pa</a></td><td class="bar" id="b12"><img src="../../.resources/redbar.gif" width="12" height="10" title="892" alt="892"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d11"><img src="../../.resources/redbar.gif" width="18" height="10" title="90" alt="90"/></td><td class="ctr2" id="e15">0%</td><td class="ctr1" id="f10">77</td><td class="ctr2" id="g10">77</td><td class="ctr1" id="h9">250</td><td class="ctr2" id="i10">250</td><td class="ctr1" id="j10">31</td><td class="ctr2" id="k11">31</td><td class="ctr1" id="l14">2</td><td class="ctr2" id="m16">2</td></tr><tr><td id="a2"><a href="eu.sqooss.impl.service.cluster/index.html" class="el_package">eu.sqooss.impl.service.cluster</a></td><td class="bar" id="b13"><img src="../../.resources/redbar.gif" width="12" height="10" title="892" alt="892"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d14"><img src="../../.resources/redbar.gif" width="12" height="10" title="60" alt="60"/></td><td class="ctr2" id="e16">0%</td><td class="ctr1" id="f16">44</td><td class="ctr2" id="g17">44</td><td class="ctr1" id="h11">205</td><td class="ctr2" id="i12">205</td><td class="ctr1" id="j20">13</td><td class="ctr2" id="k22">13</td><td class="ctr1" id="l21">1</td><td class="ctr2" id="m25">1</td></tr><tr><td id="a10"><a href="eu.sqooss.impl.service.tds/index.html" class="el_package">eu.sqooss.impl.service.tds</a></td><td class="bar" id="b14"><img src="../../.resources/redbar.gif" width="10" height="10" title="765" alt="765"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d15"><img src="../../.resources/redbar.gif" width="10" height="10" title="52" alt="52"/></td><td class="ctr2" id="e17">0%</td><td class="ctr1" id="f14">52</td><td class="ctr2" id="g14">52</td><td class="ctr1" id="h14">167</td><td class="ctr2" id="i15">167</td><td class="ctr1" id="j12">26</td><td class="ctr2" id="k13">26</td><td class="ctr1" id="l10">3</td><td class="ctr2" id="m12">3</td></tr><tr><td id="a9"><a href="eu.sqooss.impl.service.scheduler/index.html" class="el_package">eu.sqooss.impl.service.scheduler</a></td><td class="bar" id="b15"><img src="../../.resources/redbar.gif" width="9" height="10" title="684" alt="684"/><img src="../../.resources/greenbar.gif" width="4" height="10" title="287" alt="287"/></td><td class="ctr2" id="c2">30%</td><td class="bar" id="d13"><img src="../../.resources/redbar.gif" width="12" height="10" title="62" alt="62"/><img src="../../.resources/greenbar.gif" width="4" height="10" title="20" alt="20"/></td><td class="ctr2" id="e2">24%</td><td class="ctr1" id="f13">57</td><td class="ctr2" id="g11">75</td><td class="ctr1" id="h16">124</td><td class="ctr2" id="i13">203</td><td class="ctr1" id="j17">19</td><td class="ctr2" id="k10">34</td><td class="ctr1" id="l22">1</td><td class="ctr2" id="m11">4</td></tr><tr><td id="a5"><a href="eu.sqooss.impl.service.logging/index.html" class="el_package">eu.sqooss.impl.service.logging</a></td><td class="bar" id="b16"><img src="../../.resources/redbar.gif" width="7" height="10" title="492" alt="492"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"><img src="../../.resources/redbar.gif" width="4" height="10" title="22" alt="22"/></td><td class="ctr2" id="e18">0%</td><td class="ctr1" id="f18">38</td><td class="ctr2" id="g20">38</td><td class="ctr1" id="h17">117</td><td class="ctr2" id="i17">117</td><td class="ctr1" id="j11">27</td><td class="ctr2" id="k12">27</td><td class="ctr1" id="l11">3</td><td class="ctr2" id="m13">3</td></tr><tr><td id="a11"><a href="eu.sqooss.impl.service.tds.diff/index.html" class="el_package">eu.sqooss.impl.service.tds.diff</a></td><td class="bar" id="b17"><img src="../../.resources/redbar.gif" width="6" height="10" title="430" alt="430"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d18"><img src="../../.resources/redbar.gif" width="7" height="10" title="36" alt="36"/></td><td class="ctr2" id="e19">0%</td><td class="ctr1" id="f17">43</td><td class="ctr2" id="g18">43</td><td class="ctr1" id="h15">133</td><td class="ctr2" id="i16">133</td><td class="ctr1" id="j13">25</td><td class="ctr2" id="k15">25</td><td class="ctr1" id="l15">2</td><td class="ctr2" id="m17">2</td></tr><tr><td id="a14"><a href="eu.sqooss.rest.api/index.html" class="el_package">eu.sqooss.rest.api</a></td><td class="bar" id="b18"><img src="../../.resources/redbar.gif" width="5" height="10" title="414" alt="414"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d16"><img src="../../.resources/redbar.gif" width="10" height="10" title="50" alt="50"/></td><td class="ctr2" id="e20">0%</td><td class="ctr1" id="f15">45</td><td class="ctr2" id="g16">45</td><td class="ctr1" id="h18">114</td><td class="ctr2" id="i18">114</td><td class="ctr1" id="j16">20</td><td class="ctr2" id="k19">20</td><td class="ctr1" id="l16">2</td><td class="ctr2" id="m18">2</td></tr><tr><td id="a0"><a href="eu.sqooss.core/index.html" class="el_package">eu.sqooss.core</a></td><td class="bar" id="b19"><img src="../../.resources/redbar.gif" width="5" height="10" title="393" alt="393"/><img src="../../.resources/greenbar.gif" width="1" height="10" title="113" alt="113"/></td><td class="ctr2" id="c4">22%</td><td class="bar" id="d20"><img src="../../.resources/redbar.gif" width="4" height="10" title="22" alt="22"/></td><td class="ctr2" id="e21">0%</td><td class="ctr1" id="f19">35</td><td class="ctr2" id="g21">37</td><td class="ctr1" id="h19">86</td><td class="ctr2" id="i19">113</td><td class="ctr1" id="j14">24</td><td class="ctr2" id="k14">26</td><td class="ctr1" id="l23">1</td><td class="ctr2" id="m19">2</td></tr><tr><td id="a1"><a href="eu.sqooss.impl.service.admin/index.html" class="el_package">eu.sqooss.impl.service.admin</a></td><td class="bar" id="b20"><img src="../../.resources/redbar.gif" width="3" height="10" title="225" alt="225"/><img src="../../.resources/greenbar.gif" width="4" height="10" title="307" alt="307"/></td><td class="ctr2" id="c0">58%</td><td class="bar" id="d17"><img src="../../.resources/redbar.gif" width="7" height="10" title="38" alt="38"/><img src="../../.resources/greenbar.gif" width="3" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">32%</td><td class="ctr1" id="f20">31</td><td class="ctr2" id="g15">50</td><td class="ctr1" id="h21">45</td><td class="ctr2" id="i20">109</td><td class="ctr1" id="j23">8</td><td class="ctr2" id="k18">22</td><td class="ctr1" id="l24">0</td><td class="ctr2" id="m20">2</td></tr><tr><td id="a16"><a href="eu.sqooss.service.admin/index.html" class="el_package">eu.sqooss.service.admin</a></td><td class="bar" id="b21"><img src="../../.resources/redbar.gif" width="2" height="10" title="174" alt="174"/><img src="../../.resources/greenbar.gif" width="2" height="10" title="166" alt="166"/></td><td class="ctr2" id="c1">49%</td><td class="bar" id="d21"><img src="../../.resources/redbar.gif" width="4" height="10" title="21" alt="21"/><img src="../../.resources/greenbar.gif" width="1" height="10" title="7" alt="7"/></td><td class="ctr2" id="e1">25%</td><td class="ctr1" id="f21">25</td><td class="ctr2" id="g19">40</td><td class="ctr1" id="h22">41</td><td class="ctr2" id="i21">77</td><td class="ctr1" id="j21">11</td><td class="ctr2" id="k16">25</td><td class="ctr1" id="l25">0</td><td class="ctr2" id="m21">2</td></tr><tr><td id="a8"><a href="eu.sqooss.impl.service.rest/index.html" class="el_package">eu.sqooss.impl.service.rest</a></td><td class="bar" id="b22"><img src="../../.resources/redbar.gif" width="2" height="10" title="156" alt="156"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"><img src="../../.resources/redbar.gif" width="1" height="10" title="8" alt="8"/></td><td class="ctr2" id="e22">0%</td><td class="ctr1" id="f22">20</td><td class="ctr2" id="g22">20</td><td class="ctr1" id="h20">56</td><td class="ctr2" id="i22">56</td><td class="ctr1" id="j18">16</td><td class="ctr2" id="k20">16</td><td class="ctr1" id="l12">3</td><td class="ctr2" id="m14">3</td></tr><tr><td id="a24"><a href="eu.sqooss.service.updater/index.html" class="el_package">eu.sqooss.service.updater</a></td><td class="bar" id="b23"><img src="../../.resources/redbar.gif" width="2" height="10" title="148" alt="148"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f23">10</td><td class="ctr2" id="g23">10</td><td class="ctr1" id="h23">23</td><td class="ctr2" id="i23">23</td><td class="ctr1" id="j22">10</td><td class="ctr2" id="k23">10</td><td class="ctr1" id="l17">2</td><td class="ctr2" id="m22">2</td></tr><tr><td id="a18"><a href="eu.sqooss.service.cluster/index.html" class="el_package">eu.sqooss.service.cluster</a></td><td class="bar" id="b24"><img src="../../.resources/redbar.gif" width="1" height="10" title="107" alt="107"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">0%</td><td class="ctr1" id="f24">9</td><td class="ctr2" id="g24">9</td><td class="ctr1" id="h24">16</td><td class="ctr2" id="i24">16</td><td class="ctr1" id="j24">8</td><td class="ctr2" id="k24">8</td><td class="ctr1" id="l18">2</td><td class="ctr2" id="m23">2</td></tr><tr><td id="a21"><a href="eu.sqooss.service.rest/index.html" class="el_package">eu.sqooss.service.rest</a></td><td class="bar" id="b25"/><td class="ctr2" id="c25">0%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">4</td><td class="ctr2" id="g25">4</td><td class="ctr1" id="h25">5</td><td class="ctr2" id="i25">5</td><td class="ctr1" id="j25">4</td><td class="ctr2" id="k25">4</td><td class="ctr1" id="l19">2</td><td class="ctr2" id="m24">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_main_resources/index.html b/4143760-4167562/coverage/before/core/src_main_resources/index.html
    new file mode 100644
    index 000000000..fd379ee98
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_main_resources/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../.resources/report.gif" type="image/gif"/><title>src/main/resources</title><script type="text/javascript" src="../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../.sessions.html" class="el_session">Sessions</a></span><a href="../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../index.html" class="el_group">core</a> &gt; <span class="el_bundle">src/main/resources</span></div><h1>src/main/resources</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td></tr></tfoot><tbody/></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/AdminServiceImplTest.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/AdminServiceImplTest.html
    new file mode 100644
    index 000000000..1cfd3ec47
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/AdminServiceImplTest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServiceImplTest</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.admin.test</a> &gt; <span class="el_class">AdminServiceImplTest</span></div><h1>AdminServiceImplTest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1 of 202</td><td class="ctr2">100%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">10</td><td class="ctr1">0</td><td class="ctr2">58</td><td class="ctr1">0</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a5"><a href="AdminServiceImplTest.java.html#L104" class="el_method">testGC()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="2" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="43" height="10" title="19" alt="19"/></td><td class="ctr2" id="c8">95%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="AdminServiceImplTest.java.html#L73" class="el_method">testExecute()</a></td><td class="bar" id="b1"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="53" alt="53"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">15</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a7"><a href="AdminServiceImplTest.java.html#L34" class="el_method">testRegisterAdminAction()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="104" height="10" title="46" alt="46"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">10</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="AdminServiceImplTest.java.html#L56" class="el_method">testCreate()</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="90" height="10" title="40" alt="40"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i1">12</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="AdminServiceImplTest.java.html#L49" class="el_method">testGetAdminActions()</a></td><td class="bar" id="b4"><img src="../../../.resources/greenbar.gif" width="38" height="10" title="17" alt="17"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d0"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="AdminServiceImplTest.java.html#L94" class="el_method">testShow()</a></td><td class="bar" id="b5"><img src="../../../.resources/greenbar.gif" width="33" height="10" title="15" alt="15"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="AdminServiceImplTest.java.html#L24" class="el_method">setUp()</a></td><td class="bar" id="b6"><img src="../../../.resources/greenbar.gif" width="11" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="AdminServiceImplTest.java.html#L16" class="el_method">AdminServiceImplTest()</a></td><td class="bar" id="b7"><img src="../../../.resources/greenbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="AdminServiceImplTest.java.html#L29" class="el_method">testAdminServiceImpl()</a></td><td class="bar" id="b8"><img src="../../../.resources/greenbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/AdminServiceImplTest.java.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/AdminServiceImplTest.java.html
    new file mode 100644
    index 000000000..795febe48
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/AdminServiceImplTest.java.html
    @@ -0,0 +1,114 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>AdminServiceImplTest.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.admin.test</a> &gt; <span class="el_source">AdminServiceImplTest.java</span></div><h1>AdminServiceImplTest.java</h1><pre class="source lang-java linenums">package eu.sqooss.admin.test;
    +
    +import static org.junit.Assert.*;
    +
    +import java.util.Set;
    +
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +
    +import eu.sqooss.impl.service.admin.AdminServiceImpl;
    +import eu.sqooss.impl.service.admin.AdminServiceImpl.ActionContainer;
    +import eu.sqooss.service.admin.AdminAction;
    +import eu.sqooss.service.admin.AdminAction.AdminActionStatus;
    +import eu.sqooss.service.admin.actions.RunTimeInfo;
    +
    +<span class="fc" id="L16">public class AdminServiceImplTest {</span>
    +
    +    static AdminServiceImpl impl;
    +    static long failid;
    +    static long successid;
    +
    +    @BeforeClass
    +    public static void setUp() {
    +<span class="fc" id="L24">        impl = new AdminServiceImpl();</span>
    +<span class="fc" id="L25">    }</span>
    +
    +    @Test
    +    public void testAdminServiceImpl() {
    +<span class="fc" id="L29">        assertNotNull(impl);</span>
    +<span class="fc" id="L30">    }</span>
    +
    +    @Test
    +    public void testRegisterAdminAction() {
    +<span class="fc" id="L34">        RunTimeInfo rti = new RunTimeInfo();</span>
    +<span class="fc" id="L35">        impl.registerAdminAction(rti.mnemonic(), RunTimeInfo.class);</span>
    +<span class="fc" id="L36">        assertEquals(1, impl.getAdminActions().size());</span>
    +
    +<span class="fc" id="L38">        FailingAction fa = new FailingAction();</span>
    +<span class="fc" id="L39">        impl.registerAdminAction(fa.mnemonic(), FailingAction.class);</span>
    +<span class="fc" id="L40">        assertEquals(2, impl.getAdminActions().size());</span>
    +
    +<span class="fc" id="L42">        SucceedingAction su = new SucceedingAction();</span>
    +<span class="fc" id="L43">        impl.registerAdminAction(su.mnemonic(), SucceedingAction.class);</span>
    +<span class="fc" id="L44">        assertEquals(3, impl.getAdminActions().size());</span>
    +<span class="fc" id="L45">    }</span>
    +
    +    @Test
    +    public void testGetAdminActions() {
    +<span class="fc" id="L49">        Set&lt;AdminAction&gt; actions = impl.getAdminActions();</span>
    +<span class="fc bfc" id="L50" title="All 2 branches covered.">        for (AdminAction aa : actions)</span>
    +<span class="fc" id="L51">            assertNotNull (aa);</span>
    +<span class="fc" id="L52">    }</span>
    +    
    +    @Test
    +    public void testCreate() {
    +<span class="fc" id="L56">        AdminAction fail = impl.create(&quot;blah&quot;);</span>
    +<span class="fc" id="L57">        assertNull(fail);</span>
    +
    +<span class="fc" id="L59">        fail = impl.create(&quot;fail&quot;);</span>
    +<span class="fc" id="L60">        assertNotNull(fail);</span>
    +<span class="fc" id="L61">        ActionContainer ac = impl.liveactions().get(1L);</span>
    +<span class="fc" id="L62">        assertNotNull(ac);</span>
    +<span class="fc" id="L63">        assertEquals(-1, ac.end);</span>
    +
    +<span class="fc" id="L65">        assertEquals(AdminActionStatus.CREATED, fail.status());</span>
    +<span class="fc" id="L66">        assertNull(fail.errors());</span>
    +<span class="fc" id="L67">        assertNull(fail.results());</span>
    +<span class="fc" id="L68">        failid = fail.id();</span>
    +<span class="fc" id="L69">    }</span>
    +    
    +    @Test
    +    public void testExecute() {
    +<span class="fc" id="L73">        AdminAction success = impl.create(&quot;win&quot;);</span>
    +<span class="fc" id="L74">        assertNotNull(success);</span>
    +<span class="fc" id="L75">        impl.execute(success);</span>
    +        
    +<span class="fc" id="L77">        assertNull(success.errors());</span>
    +<span class="fc" id="L78">        assertEquals(&quot;#win&quot;, success.results().get(&quot;1&quot;));</span>
    +<span class="fc" id="L79">        assertEquals(AdminActionStatus.FINISHED, success.status());</span>
    +<span class="fc" id="L80">        successid = success.id();</span>
    +        
    +<span class="fc" id="L82">        AdminAction fail = impl.create(&quot;fail&quot;);</span>
    +<span class="fc" id="L83">        assertNotNull(fail);</span>
    +<span class="fc" id="L84">        impl.execute(fail);</span>
    +        
    +<span class="fc" id="L86">        assertNull(fail.results());</span>
    +<span class="fc" id="L87">        assertEquals(&quot;#fail&quot;, fail.errors().get(&quot;1&quot;));</span>
    +<span class="fc" id="L88">        assertEquals(AdminActionStatus.ERROR, fail.status());</span>
    +<span class="fc" id="L89">        failid = fail.id();</span>
    +<span class="fc" id="L90">    }</span>
    +    
    +    @Test
    +    public void testShow() {
    +<span class="fc" id="L94">        AdminAction aa = impl.show(failid);</span>
    +<span class="fc" id="L95">        assertNotNull(aa);</span>
    +        
    +<span class="fc" id="L97">        aa = impl.show(successid);</span>
    +<span class="fc" id="L98">        assertNotNull(aa);</span>
    +<span class="fc" id="L99">    }</span>
    +    
    +    @Test
    +    public void testGC() {
    +        try {
    +<span class="fc" id="L104">            Thread.sleep (300);</span>
    +<span class="pc" id="L105">        } catch (InterruptedException e) {}</span>
    +<span class="fc" id="L106">        int collected = impl.gc(1);</span>
    +        
    +<span class="fc" id="L108">        assertEquals(collected, 2);</span>
    +        
    +<span class="fc" id="L110">        AdminAction aa = impl.show(failid);</span>
    +<span class="fc" id="L111">        assertNull(aa);</span>
    +<span class="fc" id="L112">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/FailingAction.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/FailingAction.html
    new file mode 100644
    index 000000000..8e9cf296a
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/FailingAction.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FailingAction</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.admin.test</a> &gt; <span class="el_class">FailingAction</span></div><h1>FailingAction</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">12 of 17</td><td class="ctr2">29%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">4</td><td class="ctr1">4</td><td class="ctr2">6</td><td class="ctr1">2</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="FailingAction.java.html#L19" class="el_method">execute()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="FailingAction.java.html#L14" class="el_method">descr()</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="FailingAction.java.html#L5" class="el_method">FailingAction()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="36" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="FailingAction.java.html#L9" class="el_method">mnemonic()</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/FailingAction.java.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/FailingAction.java.html
    new file mode 100644
    index 000000000..96d0544e6
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/FailingAction.java.html
    @@ -0,0 +1,24 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>FailingAction.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.admin.test</a> &gt; <span class="el_source">FailingAction.java</span></div><h1>FailingAction.java</h1><pre class="source lang-java linenums">package eu.sqooss.admin.test;
    +
    +import eu.sqooss.service.admin.AdminActionBase;
    +
    +<span class="fc" id="L5">public class FailingAction extends AdminActionBase {</span>
    +
    +    @Override
    +    public String mnemonic() {
    +<span class="fc" id="L9">        return &quot;fail&quot;;</span>
    +    }
    +
    +    @Override
    +    public String descr() {
    +<span class="nc" id="L14">        return &quot;An action that enjoys to fail itself&quot;;</span>
    +    }
    +
    +    @Override
    +    public void execute() throws Exception {
    +<span class="nc" id="L19">        super.execute();</span>
    +<span class="nc" id="L20">        error(&quot;1&quot;, &quot;#fail&quot;);</span>
    +<span class="nc" id="L21">        throw new RuntimeException();</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/SucceedingAction.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/SucceedingAction.html
    new file mode 100644
    index 000000000..efe2bb492
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/SucceedingAction.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SucceedingAction</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.admin.test</a> &gt; <span class="el_class">SucceedingAction</span></div><h1>SucceedingAction</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">2 of 17</td><td class="ctr2">88%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">7</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="SucceedingAction.java.html#L14" class="el_method">descr()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="SucceedingAction.java.html#L19" class="el_method">execute()</a></td><td class="bar" id="b1"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="SucceedingAction.java.html#L5" class="el_method">SucceedingAction()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="36" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="SucceedingAction.java.html#L9" class="el_method">mnemonic()</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/SucceedingAction.java.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/SucceedingAction.java.html
    new file mode 100644
    index 000000000..f23c2eb29
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/SucceedingAction.java.html
    @@ -0,0 +1,24 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SucceedingAction.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.admin.test</a> &gt; <span class="el_source">SucceedingAction.java</span></div><h1>SucceedingAction.java</h1><pre class="source lang-java linenums">package eu.sqooss.admin.test;
    +
    +import eu.sqooss.service.admin.AdminActionBase;
    +
    +<span class="fc" id="L5">public class SucceedingAction extends AdminActionBase {</span>
    +
    +    @Override
    +    public String mnemonic() {
    +<span class="fc" id="L9">        return &quot;win&quot;;</span>
    +    }
    +
    +    @Override
    +    public String descr() {
    +<span class="nc" id="L14">        return &quot;An action that enjoys success&quot;;</span>
    +    }
    +
    +    @Override
    +    public void execute() throws Exception {
    +<span class="fc" id="L19">        super.execute();</span>
    +<span class="fc" id="L20">        result(&quot;1&quot;, &quot;#win&quot;);</span>
    +<span class="fc" id="L21">        finished(&quot;&quot;);</span>
    +<span class="fc" id="L22">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/index.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/index.html
    new file mode 100644
    index 000000000..1776717ad
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.admin.test</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <span class="el_package">eu.sqooss.admin.test</span></div><h1>eu.sqooss.admin.test</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">15 of 236</td><td class="ctr2">94%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">3</td><td class="ctr2">18</td><td class="ctr1">5</td><td class="ctr2">71</td><td class="ctr1">3</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="FailingAction.html" class="el_class">FailingAction</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="7" height="10" title="12" alt="12"/><img src="../../../.resources/greenbar.gif" width="2" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">29%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j0">2</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="SucceedingAction.html" class="el_class">SucceedingAction</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="1" height="10" title="2" alt="2"/><img src="../../../.resources/greenbar.gif" width="8" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">88%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="AdminServiceImplTest.html" class="el_class">AdminServiceImplTest</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="119" height="10" title="201" alt="201"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i0">58</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k0">9</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/index.source.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/index.source.html
    new file mode 100644
    index 000000000..c30ee07e9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.admin.test/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.admin.test</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <span class="el_package">eu.sqooss.admin.test</span></div><h1>eu.sqooss.admin.test</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">15 of 236</td><td class="ctr2">94%</td><td class="bar">0 of 2</td><td class="ctr2">100%</td><td class="ctr1">3</td><td class="ctr2">18</td><td class="ctr1">5</td><td class="ctr2">71</td><td class="ctr1">3</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="FailingAction.java.html" class="el_source">FailingAction.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="7" height="10" title="12" alt="12"/><img src="../../../.resources/greenbar.gif" width="2" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">29%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j0">2</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="SucceedingAction.java.html" class="el_source">SucceedingAction.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="1" height="10" title="2" alt="2"/><img src="../../../.resources/greenbar.gif" width="8" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">88%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="AdminServiceImplTest.java.html" class="el_source">AdminServiceImplTest.java</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="119" height="10" title="201" alt="201"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i0">58</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k0">9</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/SchedulerTests.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/SchedulerTests.html
    new file mode 100644
    index 000000000..a65494671
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/SchedulerTests.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerTests</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.test.service.scheduler</a> &gt; <span class="el_class">SchedulerTests</span></div><h1>SchedulerTests</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">4 of 96</td><td class="ctr2">96%</td><td class="bar">1 of 2</td><td class="ctr2">50%</td><td class="ctr1">1</td><td class="ctr2">5</td><td class="ctr1">2</td><td class="ctr2">26</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a2"><a href="SchedulerTests.java.html#L49" class="el_method">tearDown()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="6" height="10" title="4" alt="4"/><img src="../../../.resources/greenbar.gif" width="16" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">71%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="60" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="60" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="SchedulerTests.java.html#L26" class="el_method">testJobYield()</a></td><td class="bar" id="b1"><img src="../../../.resources/greenbar.gif" width="120" height="10" title="71" alt="71"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="SchedulerTests.java.html#L19" class="el_method">setUp()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="SchedulerTests.java.html#L13" class="el_method">SchedulerTests()</a></td><td class="bar" id="b3"><img src="../../../.resources/greenbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/SchedulerTests.java.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/SchedulerTests.java.html
    new file mode 100644
    index 000000000..9b00ec952
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/SchedulerTests.java.html
    @@ -0,0 +1,57 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>SchedulerTests.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.test.service.scheduler</a> &gt; <span class="el_source">SchedulerTests.java</span></div><h1>SchedulerTests.java</h1><pre class="source lang-java linenums">package eu.sqooss.test.service.scheduler;
    +
    +import static org.junit.Assert.*;
    +
    +import org.junit.AfterClass;
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +
    +import eu.sqooss.impl.service.scheduler.SchedulerServiceImpl;
    +import eu.sqooss.service.scheduler.Job.State;
    +import eu.sqooss.service.scheduler.SchedulerException;
    +
    +<span class="fc" id="L13">public class SchedulerTests {</span>
    +    
    +    static SchedulerServiceImpl sched;
    +    
    +    @BeforeClass
    +    public static void setUp() {
    +<span class="fc" id="L19">        sched = new SchedulerServiceImpl();</span>
    +<span class="fc" id="L20">        sched.startExecute(2);</span>
    +<span class="fc" id="L21">    }</span>
    +
    +    @Test
    +    public void testJobYield() throws SchedulerException {
    +        
    +<span class="fc" id="L26">        TestJob j1 = new TestJob(20, &quot;Test&quot;);</span>
    +<span class="fc" id="L27">        sched.enqueue(j1);</span>
    +<span class="fc" id="L28">        TestJob j2 = new TestJob(20, &quot;Test&quot;);</span>
    +<span class="fc" id="L29">        sched.enqueue(j2);</span>
    +<span class="fc" id="L30">        TestJob j3 = new TestJob(20, &quot;Test&quot;);</span>
    +<span class="fc" id="L31">        sched.enqueue(j3);</span>
    +<span class="fc" id="L32">        TestJob j4 = new TestJob(20, &quot;Test&quot;);</span>
    +<span class="fc" id="L33">        sched.enqueue(j4);</span>
    +        
    +<span class="fc" id="L35">        assertTrue(sched.isExecuting());</span>
    +
    +<span class="fc" id="L37">		assertEquals(0, sched.getSchedulerStats().getFailedJobs());</span>
    +<span class="fc" id="L38">		assertEquals(0, sched.getSchedulerStats().getFinishedJobs());</span>
    +<span class="fc" id="L39">		assertEquals(4, sched.getSchedulerStats().getWaitingJobs());</span>
    +		
    +<span class="fc" id="L41">		sched.jobStateChanged(j1, State.Running);</span>
    +<span class="fc" id="L42">		sched.jobStateChanged(j2, State.Running);</span>
    +<span class="fc" id="L43">		sched.jobStateChanged(j3, State.Running);</span>
    +<span class="fc" id="L44">		sched.jobStateChanged(j4, State.Running);</span>
    +<span class="fc" id="L45">    }</span>
    +    
    +    @AfterClass
    +    public static void tearDown() {
    +<span class="pc bpc" id="L49" title="1 of 2 branches missed.">        while (sched.getSchedulerStats().getWaitingJobs() &gt; 0)</span>
    +            try {
    +<span class="nc" id="L51">                Thread.sleep(500);</span>
    +<span class="nc" id="L52">            } catch (InterruptedException e) {}</span>
    +            
    +<span class="fc" id="L54">        sched.stopExecute();</span>
    +<span class="fc" id="L55">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/TestJob.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/TestJob.html
    new file mode 100644
    index 000000000..5ff16d096
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/TestJob.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TestJob</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.html" class="el_package">eu.sqooss.test.service.scheduler</a> &gt; <span class="el_class">TestJob</span></div><h1>TestJob</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">21 of 32</td><td class="ctr2">34%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">2</td><td class="ctr2">4</td><td class="ctr1">6</td><td class="ctr2">11</td><td class="ctr1">1</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="TestJob.java.html#L63" class="el_method">run()</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="TestJob.java.html#L53" class="el_method">TestJob(int, String)</a></td><td class="bar" id="b1"><img src="../../../.resources/greenbar.gif" width="51" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="TestJob.java.html#L59" class="el_method">priority()</a></td><td class="bar" id="b2"><img src="../../../.resources/greenbar.gif" width="11" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/TestJob.java.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/TestJob.java.html
    new file mode 100644
    index 000000000..7fb1e7372
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/TestJob.java.html
    @@ -0,0 +1,71 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>TestJob.java</title><link rel="stylesheet" href="../../../.resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../../.resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <a href="index.source.html" class="el_package">eu.sqooss.test.service.scheduler</a> &gt; <span class="el_source">TestJob.java</span></div><h1>TestJob.java</h1><pre class="source lang-java linenums">/*
    + * This file is part of the Alitheia system, developed by the SQO-OSS
    + * consortium as part of the IST FP6 SQO-OSS project, number 033331.
    + *
    + * Copyright 2007 - 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.test.service.scheduler;
    +
    +import eu.sqooss.service.scheduler.Job;
    +
    +/**
    + * This a test job class.
    + * It has the holy purpuse to print a string n times.
    + *
    + * @author Christoph Schleifenbaum
    + */
    +class TestJob extends Job
    +{
    +
    +    private int n;
    +    private String s;
    +
    +    /**
    +     * Contructor creating a job printing string \a s \a n times.
    +     */
    +<span class="fc" id="L53">    public TestJob(int n, String s) {</span>
    +<span class="fc" id="L54">        this.n = n;</span>
    +<span class="fc" id="L55">        this.s = s;</span>
    +<span class="fc" id="L56">    }</span>
    +
    +    public long priority() {
    +<span class="fc" id="L59">        return 0;</span>
    +    }
    +    
    +    protected void run() throws Exception {
    +<span class="nc" id="L63">        System.out.println(&quot;Testjob running!&quot;);</span>
    +<span class="nc bnc" id="L64" title="All 2 branches missed.">        for (int i = 0; i &lt; n; ++i) {   </span>
    +<span class="nc" id="L65">            Thread.sleep(500);</span>
    +<span class="nc" id="L66">            System.out.println(s);</span>
    +        }
    +<span class="nc" id="L68">        System.out.println(&quot;Testjob finished!&quot;);</span>
    +<span class="nc" id="L69">    }</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/index.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/index.html
    new file mode 100644
    index 000000000..e848578c3
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.test.service.scheduler</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <span class="el_package">eu.sqooss.test.service.scheduler</span></div><h1>eu.sqooss.test.service.scheduler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">25 of 128</td><td class="ctr2">80%</td><td class="bar">3 of 4</td><td class="ctr2">25%</td><td class="ctr1">3</td><td class="ctr2">9</td><td class="ctr1">8</td><td class="ctr2">37</td><td class="ctr1">1</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="TestJob.html" class="el_class">TestJob</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="26" height="10" title="21" alt="21"/><img src="../../../.resources/greenbar.gif" width="13" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">34%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">3</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="SchedulerTests.html" class="el_class">SchedulerTests</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/><img src="../../../.resources/greenbar.gif" width="115" height="10" title="92" alt="92"/></td><td class="ctr2" id="c0">96%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="60" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k0">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/index.source.html b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/index.source.html
    new file mode 100644
    index 000000000..d0853b795
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/eu.sqooss.test.service.scheduler/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../../.resources/report.gif" type="image/gif"/><title>eu.sqooss.test.service.scheduler</title><script type="text/javascript" src="../../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../../../.sessions.html" class="el_session">Sessions</a></span><a href="../../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../../index.html" class="el_group">core</a> &gt; <a href="../index.html" class="el_bundle">src/test/java</a> &gt; <span class="el_package">eu.sqooss.test.service.scheduler</span></div><h1>eu.sqooss.test.service.scheduler</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">25 of 128</td><td class="ctr2">80%</td><td class="bar">3 of 4</td><td class="ctr2">25%</td><td class="ctr1">3</td><td class="ctr2">9</td><td class="ctr1">8</td><td class="ctr2">37</td><td class="ctr1">1</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="TestJob.java.html" class="el_source">TestJob.java</a></td><td class="bar" id="b0"><img src="../../../.resources/redbar.gif" width="26" height="10" title="21" alt="21"/><img src="../../../.resources/greenbar.gif" width="13" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">34%</td><td class="bar" id="d0"><img src="../../../.resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">3</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="SchedulerTests.java.html" class="el_source">SchedulerTests.java</a></td><td class="bar" id="b1"><img src="../../../.resources/redbar.gif" width="5" height="10" title="4" alt="4"/><img src="../../../.resources/greenbar.gif" width="115" height="10" title="92" alt="92"/></td><td class="ctr2" id="c0">96%</td><td class="bar" id="d1"><img src="../../../.resources/redbar.gif" width="60" height="10" title="1" alt="1"/><img src="../../../.resources/greenbar.gif" width="60" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k0">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_java/index.html b/4143760-4167562/coverage/before/core/src_test_java/index.html
    new file mode 100644
    index 000000000..67465afc0
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_java/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../.resources/report.gif" type="image/gif"/><title>src/test/java</title><script type="text/javascript" src="../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../.sessions.html" class="el_session">Sessions</a></span><a href="../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../index.html" class="el_group">core</a> &gt; <span class="el_bundle">src/test/java</span></div><h1>src/test/java</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">40 of 364</td><td class="ctr2">89%</td><td class="bar">3 of 6</td><td class="ctr2">50%</td><td class="ctr1">6</td><td class="ctr2">27</td><td class="ctr1">13</td><td class="ctr2">108</td><td class="ctr1">4</td><td class="ctr2">24</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a1"><a href="eu.sqooss.test.service.scheduler/index.html" class="el_package">eu.sqooss.test.service.scheduler</a></td><td class="bar" id="b0"><img src="../../.resources/redbar.gif" width="12" height="10" title="25" alt="25"/><img src="../../.resources/greenbar.gif" width="52" height="10" title="103" alt="103"/></td><td class="ctr2" id="c1">80%</td><td class="bar" id="d0"><img src="../../.resources/redbar.gif" width="90" height="10" title="3" alt="3"/><img src="../../.resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">25%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g1">9</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i1">37</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m1">2</td></tr><tr><td id="a0"><a href="eu.sqooss.admin.test/index.html" class="el_package">eu.sqooss.admin.test</a></td><td class="bar" id="b1"><img src="../../.resources/redbar.gif" width="7" height="10" title="15" alt="15"/><img src="../../.resources/greenbar.gif" width="112" height="10" title="221" alt="221"/></td><td class="ctr2" id="c0">94%</td><td class="bar" id="d1"><img src="../../.resources/greenbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g0">18</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i0">71</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">17</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">3</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/core/src_test_resources/index.html b/4143760-4167562/coverage/before/core/src_test_resources/index.html
    new file mode 100644
    index 000000000..f8ccbe763
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/core/src_test_resources/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../.resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../.resources/report.gif" type="image/gif"/><title>src/test/resources</title><script type="text/javascript" src="../../.resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../.sessions.html" class="el_session">Sessions</a></span><a href="../../index.html" class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</a> &gt; <a href="../index.html" class="el_group">core</a> &gt; <span class="el_bundle">src/test/resources</span></div><h1>src/test/resources</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td></tr></tfoot><tbody/></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/coverage/before/index.html b/4143760-4167562/coverage/before/index.html
    new file mode 100644
    index 000000000..793f37bb9
    --- /dev/null
    +++ b/4143760-4167562/coverage/before/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href=".resources/report.css" type="text/css"/><link rel="shortcut icon" href=".resources/report.gif" type="image/gif"/><title>JUnit (Jan 15, 2015 3:49:07 PM)</title><script type="text/javascript" src=".resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href=".sessions.html" class="el_session">Sessions</a></span><span class="el_report">JUnit (Jan 15, 2015 3:49:07 PM)</span></div><h1>JUnit (Jan 15, 2015 3:49:07 PM)</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">38,020 of 39,544</td><td class="ctr2">4%</td><td class="bar">2,898 of 2,962</td><td class="ctr2">2%</td><td class="ctr1">3,001</td><td class="ctr2">3,102</td><td class="ctr1">8,389</td><td class="ctr2">8,768</td><td class="ctr1">1,517</td><td class="ctr2">1,606</td><td class="ctr1">153</td><td class="ctr2">170</td></tr></tfoot><tbody><tr><td id="a0"><a href="core/index.html" class="el_group">core</a></td><td class="bar" id="b0"><img src=".resources/redbar.gif" width="115" height="10" title="38,020" alt="38,020"/><img src=".resources/greenbar.gif" width="4" height="10" title="1,524" alt="1,524"/></td><td class="ctr2" id="c0">4%</td><td class="bar" id="d0"><img src=".resources/redbar.gif" width="117" height="10" title="2,898" alt="2,898"/><img src=".resources/greenbar.gif" width="2" height="10" title="64" alt="64"/></td><td class="ctr2" id="e0">2%</td><td class="ctr1" id="f0">3,001</td><td class="ctr2" id="g0">3,102</td><td class="ctr1" id="h0">8,389</td><td class="ctr2" id="i0">8,768</td><td class="ctr1" id="j0">1,517</td><td class="ctr2" id="k0">1,606</td><td class="ctr1" id="l0">153</td><td class="ctr2" id="m0">170</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.2.201409121644</span>JUnit (Jan 15, 2015 3:49:07 PM)</div></body></html>
    \ No newline at end of file
    diff --git a/4143760-4167562/img/abstractmetric-after.png b/4143760-4167562/img/abstractmetric-after.png
    new file mode 100644
    index 000000000..771eb8fbb
    Binary files /dev/null and b/4143760-4167562/img/abstractmetric-after.png differ
    diff --git a/4143760-4167562/img/abstractmetric-before.png b/4143760-4167562/img/abstractmetric-before.png
    new file mode 100644
    index 000000000..64cd82c5b
    Binary files /dev/null and b/4143760-4167562/img/abstractmetric-before.png differ
    diff --git a/4143760-4167562/img/coreCoverageAfter.png b/4143760-4167562/img/coreCoverageAfter.png
    new file mode 100644
    index 000000000..90b0ed6db
    Binary files /dev/null and b/4143760-4167562/img/coreCoverageAfter.png differ
    diff --git a/4143760-4167562/img/coreCoverageBefore.png b/4143760-4167562/img/coreCoverageBefore.png
    new file mode 100644
    index 000000000..908003a29
    Binary files /dev/null and b/4143760-4167562/img/coreCoverageBefore.png differ
    diff --git a/4143760-4167562/img/core_class_dependency.png b/4143760-4167562/img/core_class_dependency.png
    new file mode 100644
    index 000000000..48128ae09
    Binary files /dev/null and b/4143760-4167562/img/core_class_dependency.png differ
    diff --git a/4143760-4167562/img/core_package_dependency.png b/4143760-4167562/img/core_package_dependency.png
    new file mode 100644
    index 000000000..962894745
    Binary files /dev/null and b/4143760-4167562/img/core_package_dependency.png differ
    diff --git a/4143760-4167562/img/core_system_complexity.png b/4143760-4167562/img/core_system_complexity.png
    new file mode 100644
    index 000000000..834ac7f1b
    Binary files /dev/null and b/4143760-4167562/img/core_system_complexity.png differ
    diff --git a/4143760-4167562/img/core_system_complexity_marked.png b/4143760-4167562/img/core_system_complexity_marked.png
    new file mode 100644
    index 000000000..b84723c4e
    Binary files /dev/null and b/4143760-4167562/img/core_system_complexity_marked.png differ
    diff --git a/4143760-4167562/img/cycle1.png b/4143760-4167562/img/cycle1.png
    new file mode 100644
    index 000000000..fab6610f8
    Binary files /dev/null and b/4143760-4167562/img/cycle1.png differ
    diff --git a/4143760-4167562/img/cycle2.png b/4143760-4167562/img/cycle2.png
    new file mode 100644
    index 000000000..cfd75e605
    Binary files /dev/null and b/4143760-4167562/img/cycle2.png differ
    diff --git a/4143760-4167562/img/cycle3.png b/4143760-4167562/img/cycle3.png
    new file mode 100644
    index 000000000..b5bf64403
    Binary files /dev/null and b/4143760-4167562/img/cycle3.png differ
    diff --git a/4143760-4167562/img/fds-after.png b/4143760-4167562/img/fds-after.png
    new file mode 100644
    index 000000000..5704cbaec
    Binary files /dev/null and b/4143760-4167562/img/fds-after.png differ
    diff --git a/4143760-4167562/img/fds-before.png b/4143760-4167562/img/fds-before.png
    new file mode 100644
    index 000000000..506fcbb3d
    Binary files /dev/null and b/4143760-4167562/img/fds-before.png differ
    diff --git a/4143760-4167562/img/gitUpdaterDependencies.png b/4143760-4167562/img/gitUpdaterDependencies.png
    new file mode 100644
    index 000000000..a4fe2e817
    Binary files /dev/null and b/4143760-4167562/img/gitUpdaterDependencies.png differ
    diff --git a/4143760-4167562/img/impl-depedency.png b/4143760-4167562/img/impl-depedency.png
    new file mode 100644
    index 000000000..cee146cc7
    Binary files /dev/null and b/4143760-4167562/img/impl-depedency.png differ
    diff --git a/4143760-4167562/img/inCodeOverview.png b/4143760-4167562/img/inCodeOverview.png
    new file mode 100644
    index 000000000..91b96d48b
    Binary files /dev/null and b/4143760-4167562/img/inCodeOverview.png differ
    diff --git a/4143760-4167562/img/personIcon.png b/4143760-4167562/img/personIcon.png
    new file mode 100644
    index 000000000..4790a50cc
    Binary files /dev/null and b/4143760-4167562/img/personIcon.png differ
    diff --git a/4143760-4167562/img/personIcon2.png b/4143760-4167562/img/personIcon2.png
    new file mode 100644
    index 000000000..73190ab4e
    Binary files /dev/null and b/4143760-4167562/img/personIcon2.png differ
    diff --git a/4143760-4167562/img/sqo-oss.png b/4143760-4167562/img/sqo-oss.png
    new file mode 100644
    index 000000000..77ba637b8
    Binary files /dev/null and b/4143760-4167562/img/sqo-oss.png differ
    diff --git a/4143760-4167562/img/uml.png b/4143760-4167562/img/uml.png
    new file mode 100644
    index 000000000..198a0f7a3
    Binary files /dev/null and b/4143760-4167562/img/uml.png differ
    diff --git a/4143760-4167562/presentation/beamercolorthemetud.sty b/4143760-4167562/presentation/beamercolorthemetud.sty
    new file mode 100644
    index 000000000..64ff38151
    --- /dev/null
    +++ b/4143760-4167562/presentation/beamercolorthemetud.sty
    @@ -0,0 +1,49 @@
    +% TU Delft Beamer template
    +% Author: Maarten Abbink
    +% Delft Universiy of Technology
    +% March 2014
    +\mode<presentation>
    +
    +% outer theme colors
    +\setbeamercolor{normal text}{fg=tudBlack}
    +\setbeamercolor{alerted text}{fg=tudOrange}
    +\setbeamercolor{example text}{fg=tudGreen}
    +
    +\setbeamercolor*{structure}{fg=tudCyan}
    +
    +\setbeamercolor*{decoration}{fg=tudWhite,bg=tudCyan}
    +
    +\setbeamercolor*{palette primary}{use=decoration,fg=decoration.fg,bg=decoration.bg}
    +\setbeamercolor*{palette secondary}{parent=palette primary}
    +\setbeamercolor*{palette tertiary}{parent=palette secondary}
    +\setbeamercolor*{palette quaternary}{use=palette primary,bg=palette primary.fg}
    +
    +\setbeamercolor{separation line}{bg=tudBlack}
    +\setbeamercolor{fine separation line}{parent=separation line}
    +
    +\setbeamercolor{upper separation line foot}{parent=fine separation line}
    +\setbeamercolor{middle separation line foot}{parent=separation line,bg=tudWhite}
    +\setbeamercolor{lower separation line foot}{parent=separation line}
    +
    +\setbeamercolor{titlelike}{parent=structure}
    +
    +%inner theme colors
    +\setbeamercolor{title block body}{fg=tudWhite,bg=tudBlack}
    +\setbeamercolor{title}{parent=title block body}
    +\setbeamercolor{subtitle}{parent=title}
    +\setbeamercolor{institute}{parent=structure}
    +\setbeamercolor{author}{parent=title block body}
    +\setbeamercolor{date}{parent=author}
    +
    +\setbeamercolor{block title}{parent=normal text,bg=tudLavender}
    +\setbeamercolor{block title alerted}{parent=block title,bg=tudYellow}
    +\setbeamercolor{block title example}{parent=block title,bg=tudSeaGreen}
    +
    +\setbeamercolor{block body}{parent=normal text,use=block title,bg=block title.bg!50!bg}
    +\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!50!bg}
    +\setbeamercolor{block body example}{parent=normal text,use=block title example,bg=block title example.bg!50!bg}
    +
    +\setbeamercolor{item projected}{use=item,fg=tudWhite,bg=item.fg}
    +
    +\mode
    +<all>
    diff --git a/4143760-4167562/presentation/beamerfontthemetud.sty b/4143760-4167562/presentation/beamerfontthemetud.sty
    new file mode 100644
    index 000000000..d9040aa93
    --- /dev/null
    +++ b/4143760-4167562/presentation/beamerfontthemetud.sty
    @@ -0,0 +1,25 @@
    +% TU Delft Beamer template
    +% Author: Maarten Abbink
    +% Delft Universiy of Technology
    +% March 2014
    +\mode<presentation>
    +
    +\setbeamerfont{normal text}{family=\sffamily}
    +
    +\setbeamerfont{structure}{family=\rmfamily}
    +\setbeamerfont{title}{series=\bfseries,size=\LARGE}
    +\setbeamerfont{subtitle}{series*=m,shape=\itshape,size=\Large}
    +\setbeamerfont{institute}{parent=structure,series=\bfseries,size=\large}
    +\setbeamerfont{author}{size=\normalsize}
    +\setbeamerfont{date}{parent=author}
    +
    +\setbeamerfont{frametitle}{series=\bfseries}
    +
    +\setbeamerfont{section in toc}{parent=structure,family=\sffamily}
    +
    +\setbeamerfont{block body}{parent=normal text}
    +
    +\setbeamerfont{item}{parent=normal text}
    +
    +\mode
    +<all>
    diff --git a/4143760-4167562/presentation/beamerinnerthemetud.sty b/4143760-4167562/presentation/beamerinnerthemetud.sty
    new file mode 100644
    index 000000000..19a03ead9
    --- /dev/null
    +++ b/4143760-4167562/presentation/beamerinnerthemetud.sty
    @@ -0,0 +1,70 @@
    +% TU Delft Beamer template
    +% Author: Maarten Abbink
    +% Delft Universiy of Technology
    +% March 2014
    +\DeclareOptionBeamer{shadow}[true]{\def\beamer@themerounded@shadow{#1}}
    +\ExecuteOptionsBeamer{shadow=false}
    +\ProcessOptionsBeamer
    +
    +\mode<presentation>
    +
    +\defbeamertemplate*{title page}{}{
    +	\newsavebox\titleBox
    +	\newsavebox\subtitleBox
    +	\newsavebox\instituteBox
    +	\newsavebox\authorBox
    +	\newsavebox\dateBox
    +	\sbox{\titleBox}{\usebeamercolor[fg]{title}\usebeamerfont{title}\inserttitle}
    +	\ifx\insertsubtitle\@empty%
    +		\sbox{\subtitleBox}{}
    +	\else%
    +		\sbox{\subtitleBox}{\usebeamercolor[fg]{subtitle}\usebeamerfont{subtitle}\insertsubtitle}
    +	\fi%
    +	\sbox{\instituteBox}{\usebeamercolor[fg]{institute}\usebeamerfont{institute}\insertinstitute}
    +	\sbox{\authorBox}{\usebeamercolor[fg]{author}\usebeamerfont{author}\insertauthor}
    +	\sbox{\dateBox}{\usebeamercolor[fg]{date}\usebeamerfont{date}\insertdate}
    +	\newlength{\titleBoxWidth}
    +	\newlength{\titleBoxInnerWidth}
    +	\setlength{\titleBoxInnerWidth}{\maxof{\wd\titleBox}{\maxof{\wd\subtitleBox}{\maxof{\wd\instituteBox}{\maxof{\wd\authorBox}{\wd\dateBox}}}}}
    +	\setlength{\titleBoxWidth}{\titleBoxInnerWidth}
    +	\addtolength{\titleBoxWidth}{1cm}
    +	
    +	\begin{textblock*}{\titleBoxWidth}(0.5cm,2.5cm)
    +	\begin{beamercolorbox}[sep=2mm,leftskip=3mm,rightskip=3mm,wd=\titleBoxWidth,center]{title block body}
    +	\begin{beamercolorbox}[sep=0pt,vmode,wd=\titleBoxInnerWidth,left]{}
    +		\begin{beamercolorbox}[wd=\wd\titleBox]{title}
    +            \usebeamercolor[fg]{title}\usebeamerfont{title}Reengineering Alitheia Core%
    +		\end{beamercolorbox}%
    +		\ifx\insertsubtitle\@empty%
    +		\else%
    +			\vskip1mm
    +			\begin{beamercolorbox}[wd=\wd\subtitleBox]{subtitle}
    +				\usebox{\subtitleBox}%
    +			\end{beamercolorbox}
    +		\fi%
    +		\vskip1mm
    +		\begin{beamercolorbox}[wd=\wd\instituteBox]{institute}
    +			\usebox{\instituteBox}%
    +		\end{beamercolorbox}
    +		\vskip7mm
    +		\begin{beamercolorbox}[wd=\wd\authorBox]{author}
    +			\usebox{\authorBox}%
    +		\end{beamercolorbox}
    +		\vskip1mm
    +		\begin{beamercolorbox}[wd=\wd\dateBox]{date}
    +			February 12, 2015%
    +		\end{beamercolorbox}
    +		\vskip0pt
    +	\end{beamercolorbox}
    +	\end{beamercolorbox}
    +	\end{textblock*}
    +}
    +
    +\addtobeamertemplate{frametitle}{\hspace*{0.5cm}}
    +
    +\setbeamertemplate{blocks}[rounded][shadow=\beamer@themerounded@shadow]
    +\setbeamertemplate{items}[circle]
    +\setbeamertemplate{sections/subsections in toc}[circle]
    +
    +\mode
    +<all>
    diff --git a/4143760-4167562/presentation/beamerouterthemetud.sty b/4143760-4167562/presentation/beamerouterthemetud.sty
    new file mode 100644
    index 000000000..474e5905e
    --- /dev/null
    +++ b/4143760-4167562/presentation/beamerouterthemetud.sty
    @@ -0,0 +1,69 @@
    +% TU Delft Beamer template
    +% Author: Maarten Abbink
    +% Delft Universiy of Technology
    +% March 2014
    +\mode<presentation>
    +
    +\setbeamercolor{author in head/foot}{parent=palette tertiary}
    +\setbeamercolor{title in head/foot}{parent=palette secondary}
    +\setbeamercolor{date in head/foot}{parent=palette primary}
    +\setbeamercolor{section in head/foot}{parent=palette tertiary}
    +\setbeamercolor{subsection in head/foot}{parent=palette primary}
    +\setbeamercolor{navigtion symbols in head/foot}{parent=palette primary}
    +\setbeamercolor{logo in head/foot}{parent=palette quaternary}
    +
    +\setbeamercolor*{navigation symbols}{parent=palette primary}
    +\setbeamercolor*{navigation symbols dimmed}{parent=palette primary,fg=parent.fg!20!parent.bg}
    +
    +\setbeamersize{text margin left=1cm}
    +\setbeamersize{text margin right=0.5cm}
    +
    +\defbeamertemplate*{sidebar left}{}{
    +	\begin{beamercolorbox}[wd=0.5cm,ht=2.5cm]{decoration}
    +	\end{beamercolorbox}
    +}
    +
    +\defbeamertemplate*{footline}{}{
    +	\leavevmode%
    +	\vskip0pt%
    +	\begin{beamercolorbox}[wd=\paperwidth,colsep=0.5pt]{middle separation line foot}
    +	\end{beamercolorbox}
    +	\vskip0pt%
    +	\hbox{%
    +		\begin{beamercolorbox}[wd=.666667\paperwidth,ht=2.25ex,dp=1ex,left]{title in head/foot}%
    +			\usebeamerfont{title in head/foot}~\insertshorttitle
    +		\end{beamercolorbox}%
    +		\begin{beamercolorbox}[wd=.433333\paperwidth,ht=2.25ex,dp=1ex,left]{date in head/foot}%
    +			\usebeamerfont{date in head/foot}\insertshortdate{}
    +            \hfill
    +			\insertframenumber{} / \inserttotalframenumber
    +		\end{beamercolorbox}
    +	}%
    +	\vskip0pt%
    +}
    +
    +\defbeamertemplate*{minimal footline}{}{
    +	\leavevmode%
    +	\vskip0pt%
    +	\begin{beamercolorbox}[wd=\paperwidth,colsep=0.5pt]{middle separation line foot}
    +	\end{beamercolorbox}
    +	\vskip0pt%
    +	\hbox{%
    +		\begin{beamercolorbox}[wd=.666667\paperwidth,ht=2.25ex,dp=1ex,left]{title in head/foot}%
    +			\usebeamerfont{title in head/foot}~\insertshorttitle
    +		\end{beamercolorbox}%
    +		\begin{beamercolorbox}[wd=.433333\paperwidth,ht=2.25ex,dp=1ex,left]{date in head/foot}%
    +			\usebeamerfont{date in head/foot}\insertshortdate{}
    +            \hfill
    +			\insertframenumber{} / \inserttotalframenumber
    +		\end{beamercolorbox}
    +	}%
    +	\vskip0pt%
    +}
    +
    +% this normally contains the navigation links
    +\defbeamertemplate*{sidebar right}{}{}
    +
    +\mode
    +<all>
    +
    diff --git a/4143760-4167562/presentation/beamerthemetud.sty b/4143760-4167562/presentation/beamerthemetud.sty
    new file mode 100644
    index 000000000..43c6c3172
    --- /dev/null
    +++ b/4143760-4167562/presentation/beamerthemetud.sty
    @@ -0,0 +1,33 @@
    +% TU Delft Beamer template
    +% Author: Maarten Abbink
    +% Delft Universiy of Technology
    +% March 2014
    +\mode<presentation>
    +
    +%TU Delft colors: https://intranet.tudelft.nl/en/services/communication/communication-mc/manuals/tu-delft-corporate-design/toepassing-huisstijl-2/colour/
    +% Corporate colors
    +\definecolor{tudCyan}{RGB}{61,152,222}
    +\definecolor{tudBlack}{RGB}{0,0,0}
    +\definecolor{tudWhite}{RGB}{255,255,255}
    +% Basic colors
    +\definecolor{tudSeaGreen}{RGB}{111,189,165}
    +\definecolor{tudGreen}{RGB}{39,131,142}
    +\definecolor{tudDarkBlue}{RGB}{34,70,122}
    +\definecolor{tudPurple}{RGB}{36,46,131}
    +\definecolor{tudTurquoise}{RGB}{50,154,179}
    +\definecolor{tudSkyBlue}{RGB}{130,187,206}
    +% Accent colors
    +\definecolor{tudLavender}{RGB}{121,150,180}
    +\definecolor{tudOrange}{RGB}{216,130,62}
    +\definecolor{tudWarmPurple}{RGB}{110,50,122}
    +\definecolor{tudFuchsia}{RGB}{178,72,146}
    +\definecolor{tudBrightGreen}{RGB}{183,200,34}
    +\definecolor{tudYellow}{RGB}{247,234,151}
    +
    +\usefonttheme{tud}
    +\usecolortheme{tud}
    +\useinnertheme[shadow]{tud}
    +\useoutertheme{tud}
    +
    +\mode
    +<all>
    diff --git a/4143760-4167562/presentation/images/tudelft_logo.pdf b/4143760-4167562/presentation/images/tudelft_logo.pdf
    new file mode 100644
    index 000000000..3e7b54980
    Binary files /dev/null and b/4143760-4167562/presentation/images/tudelft_logo.pdf differ
    diff --git a/4143760-4167562/presentation/presentation.aux b/4143760-4167562/presentation/presentation.aux
    new file mode 100644
    index 000000000..55dc7065d
    --- /dev/null
    +++ b/4143760-4167562/presentation/presentation.aux
    @@ -0,0 +1,55 @@
    +\relax 
    +\providecommand\hyper@newdestlabel[2]{}
    +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
    +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
    +\global\let\oldcontentsline\contentsline
    +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
    +\global\let\oldnewlabel\newlabel
    +\gdef\newlabel#1#2{\newlabelxx{#1}#2}
    +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
    +\AtEndDocument{\ifx\hyper@anchor\@undefined
    +\let\contentsline\oldcontentsline
    +\let\newlabel\oldnewlabel
    +\fi}
    +\fi}
    +\global\let\hyper@last\relax 
    +\gdef\HyperFirstAtBeginDocument#1{#1}
    +\providecommand\HyField@AuxAddToFields[1]{}
    +\providecommand\HyField@AuxAddToCoFields[2]{}
    +\@writefile{toc}{\beamer@endinputifotherversion {3.24pt}}
    +\@writefile{nav}{\beamer@endinputifotherversion {3.24pt}}
    +\select@language{english}
    +\@writefile{toc}{\select@language{english}}
    +\@writefile{lof}{\select@language{english}}
    +\@writefile{lot}{\select@language{english}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {1}{1}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {2}{2}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{3}{3/7}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {3}{7}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{4}{8/8}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {8}{8}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{5}{9/9}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {9}{9}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{6}{10/10}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {10}{10}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{7}{11/11}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {11}{11}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{8}{12/13}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {12}{13}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{9}{14/14}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {14}{14}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{10}{15/15}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {15}{15}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{11}{16/19}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {16}{19}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{12}{20/20}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {20}{20}}}
    +\@writefile{nav}{\headcommand {\slideentry {0}{0}{13}{21/21}{}{0}}}
    +\@writefile{nav}{\headcommand {\beamer@framepages {21}{21}}}
    +\@writefile{nav}{\headcommand {\beamer@partpages {1}{21}}}
    +\@writefile{nav}{\headcommand {\beamer@subsectionpages {1}{21}}}
    +\@writefile{nav}{\headcommand {\beamer@sectionpages {1}{21}}}
    +\@writefile{nav}{\headcommand {\beamer@documentpages {21}}}
    +\@writefile{nav}{\headcommand {\def \inserttotalframenumber {13}}}
    diff --git a/4143760-4167562/presentation/presentation.log b/4143760-4167562/presentation/presentation.log
    new file mode 100644
    index 000000000..7c5653b7c
    --- /dev/null
    +++ b/4143760-4167562/presentation/presentation.log
    @@ -0,0 +1,1800 @@
    +This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) (format=pdflatex 2014.5.7)  12 FEB 2015 11:08
    +entering extended mode
    + restricted \write18 enabled.
    + %&-line parsing enabled.
    +**presentation.tex
    +(./presentation.tex
    +LaTeX2e <2011/06/27>
    +Babel <3.9h> and hyphenation patterns for 78 languages loaded.
    +(/usr/share/texmf/tex/latex/beamer/base/beamer.cls
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasercs.sty
    +Package: beamerbasercs 2012/11/13 (rcs-revision cb16a617839f)
    +)
    +Document Class: beamer 2012/10/15 development version 3.24 A class for typesett
    +ing presentations (rcs-revision 24853e6b98cf)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasemodes.sty
    +Package: beamerbasemodes 2012/04/15 (rcs-revision cc6557182d97)
    +\beamer@tempbox=\box26
    +\beamer@tempcount=\count79
    +\c@beamerpauses=\count80
    +
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasedecode.sty
    +Package: beamerbasedecode 2010/05/01 (rcs-revision efa082c6111d)
    +\beamer@slideinframe=\count81
    +\beamer@minimum=\count82
    +)
    +\beamer@commentbox=\box27
    +\beamer@modecount=\count83
    +)
    +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
    +Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO)
    +Package ifpdf Info: pdfTeX in PDF mode is detected.
    +)
    +\headheight=\dimen102
    +\headdp=\dimen103
    +\footheight=\dimen104
    +\sidebarheight=\dimen105
    +\beamer@tempdim=\dimen106
    +\beamer@finalheight=\dimen107
    +\beamer@animht=\dimen108
    +\beamer@animdp=\dimen109
    +\beamer@animwd=\dimen110
    +\beamer@leftmargin=\dimen111
    +\beamer@rightmargin=\dimen112
    +\beamer@leftsidebar=\dimen113
    +\beamer@rightsidebar=\dimen114
    +\beamer@boxsize=\dimen115
    +\beamer@vboxoffset=\dimen116
    +\beamer@descdefault=\dimen117
    +\beamer@descriptionwidth=\dimen118
    +\beamer@lastskip=\skip41
    +\beamer@areabox=\box28
    +\beamer@animcurrent=\box29
    +\beamer@animshowbox=\box30
    +\beamer@sectionbox=\box31
    +\beamer@logobox=\box32
    +\beamer@linebox=\box33
    +\beamer@sectioncount=\count84
    +\beamer@subsubsectionmax=\count85
    +\beamer@subsectionmax=\count86
    +\beamer@sectionmax=\count87
    +\beamer@totalheads=\count88
    +\beamer@headcounter=\count89
    +\beamer@partstartpage=\count90
    +\beamer@sectionstartpage=\count91
    +\beamer@subsectionstartpage=\count92
    +\beamer@animationtempa=\count93
    +\beamer@animationtempb=\count94
    +\beamer@xpos=\count95
    +\beamer@ypos=\count96
    +\beamer@showpartnumber=\count97
    +\beamer@currentsubsection=\count98
    +\beamer@coveringdepth=\count99
    +\beamer@sectionadjust=\count100
    +\beamer@tocsectionnumber=\count101
    +
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseoptions.sty
    +Package: beamerbaseoptions 2010/04/27 (rcs-revision 982469101dd6)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty
    +Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
    +\KV@toks@=\toks14
    +))
    +\beamer@paperwidth=\skip42
    +\beamer@paperheight=\skip43
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
    +Package: geometry 2010/09/12 v5.6 Page Geometry
    +
    +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty
    +Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO)
    +Package ifvtex Info: VTeX not detected.
    +)
    +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty
    +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional
    +)
    +\Gm@cnth=\count102
    +\Gm@cntv=\count103
    +\c@Gm@tempcnt=\count104
    +\Gm@bindingoffset=\dimen119
    +\Gm@wd@mp=\dimen120
    +\Gm@odd@mp=\dimen121
    +\Gm@even@mp=\dimen122
    +\Gm@layoutwidth=\dimen123
    +\Gm@layoutheight=\dimen124
    +\Gm@layouthoffset=\dimen125
    +\Gm@layoutvoffset=\dimen126
    +\Gm@dimlist=\toks15
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo
    +File: size11.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
    +)
    +(/usr/share/texmf/tex/latex/pgf/basiclayer/pgfcore.sty
    +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
    +Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
    +Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty
    +Package: trig 1999/03/16 v1.09 sin cos tan (DPC)
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg
    +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
    +)
    +Package graphics Info: Driver file: pdftex.def on input line 91.
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def
    +File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
    +
    +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
    +Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO)
    +)
    +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
    +Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
    +)
    +\Gread@gobject=\count105
    +))
    +\Gin@req@height=\dimen127
    +\Gin@req@width=\dimen128
    +)
    +(/usr/share/texmf/tex/latex/pgf/systemlayer/pgfsys.sty
    +(/usr/share/texmf/tex/latex/pgf/utilities/pgfrcs.sty
    +(/usr/share/texmf/tex/generic/pgf/utilities/pgfutil-common.tex
    +\pgfutil@everybye=\toks16
    +)
    +(/usr/share/texmf/tex/generic/pgf/utilities/pgfutil-latex.def
    +\pgfutil@abb=\box34
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/ms/everyshi.sty
    +Package: everyshi 2001/05/15 v3.00 EveryShipout Package (MS)
    +))
    +(/usr/share/texmf/tex/generic/pgf/utilities/pgfrcs.code.tex
    +Package: pgfrcs 2010/10/25 v2.10 (rcs-revision 1.24)
    +))
    +(/usr/share/texmf/tex/generic/pgf/systemlayer/pgfsys.code.tex
    +Package: pgfsys 2010/06/30 v2.10 (rcs-revision 1.37)
    +
    +(/usr/share/texmf/tex/generic/pgf/utilities/pgfkeys.code.tex
    +\pgfkeys@pathtoks=\toks17
    +\pgfkeys@temptoks=\toks18
    +
    +(/usr/share/texmf/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex
    +\pgfkeys@tmptoks=\toks19
    +))
    +\pgf@x=\dimen129
    +\pgf@y=\dimen130
    +\pgf@xa=\dimen131
    +\pgf@ya=\dimen132
    +\pgf@xb=\dimen133
    +\pgf@yb=\dimen134
    +\pgf@xc=\dimen135
    +\pgf@yc=\dimen136
    +\w@pgf@writea=\write3
    +\r@pgf@reada=\read1
    +\c@pgf@counta=\count106
    +\c@pgf@countb=\count107
    +\c@pgf@countc=\count108
    +\c@pgf@countd=\count109
    +
    +(/usr/share/texmf/tex/generic/pgf/systemlayer/pgf.cfg
    +File: pgf.cfg 2008/05/14  (rcs-revision 1.7)
    +)
    +Package pgfsys Info: Driver file for pgf: pgfsys-pdftex.def on input line 900.
    +
    +(/usr/share/texmf/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
    +File: pgfsys-pdftex.def 2009/05/22  (rcs-revision 1.26)
    +
    +(/usr/share/texmf/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
    +File: pgfsys-common-pdf.def 2008/05/19  (rcs-revision 1.10)
    +)))
    +(/usr/share/texmf/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
    +File: pgfsyssoftpath.code.tex 2008/07/18  (rcs-revision 1.7)
    +\pgfsyssoftpath@smallbuffer@items=\count110
    +\pgfsyssoftpath@bigbuffer@items=\count111
    +)
    +(/usr/share/texmf/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
    +File: pgfsysprotocol.code.tex 2006/10/16  (rcs-revision 1.4)
    +))
    +(/usr/share/texmf/tex/latex/xcolor/xcolor.sty
    +Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg
    +File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
    +)
    +Package xcolor Info: Driver file: pdftex.def on input line 225.
    +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337.
    +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341.
    +Package xcolor Info: Model `RGB' extended on input line 1353.
    +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355.
    +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356.
    +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357.
    +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358.
    +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359.
    +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360.
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcore.code.tex
    +Package: pgfcore 2010/04/11 v2.10 (rcs-revision 1.7)
    +
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmath.code.tex
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathcalc.code.tex
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathutil.code.tex)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathparser.code.tex
    +\pgfmath@dimen=\dimen137
    +\pgfmath@count=\count112
    +\pgfmath@box=\box35
    +\pgfmath@toks=\toks20
    +\pgfmath@stack@operand=\toks21
    +\pgfmath@stack@operation=\toks22
    +)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.code.tex
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)))
    +(/usr/share/texmf/tex/generic/pgf/math/pgfmathfloat.code.tex
    +\c@pgfmathroundto@lastzeros=\count113
    +))
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
    +File: pgfcorepoints.code.tex 2010/04/09  (rcs-revision 1.20)
    +\pgf@picminx=\dimen138
    +\pgf@picmaxx=\dimen139
    +\pgf@picminy=\dimen140
    +\pgf@picmaxy=\dimen141
    +\pgf@pathminx=\dimen142
    +\pgf@pathmaxx=\dimen143
    +\pgf@pathminy=\dimen144
    +\pgf@pathmaxy=\dimen145
    +\pgf@xx=\dimen146
    +\pgf@xy=\dimen147
    +\pgf@yx=\dimen148
    +\pgf@yy=\dimen149
    +\pgf@zx=\dimen150
    +\pgf@zy=\dimen151
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
    +File: pgfcorepathconstruct.code.tex 2010/08/03  (rcs-revision 1.24)
    +\pgf@path@lastx=\dimen152
    +\pgf@path@lasty=\dimen153
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
    +File: pgfcorepathusage.code.tex 2008/04/22  (rcs-revision 1.12)
    +\pgf@shorten@end@additional=\dimen154
    +\pgf@shorten@start@additional=\dimen155
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
    +File: pgfcorescopes.code.tex 2010/09/08  (rcs-revision 1.34)
    +\pgfpic=\box36
    +\pgf@hbox=\box37
    +\pgf@layerbox@main=\box38
    +\pgf@picture@serial@count=\count114
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
    +File: pgfcoregraphicstate.code.tex 2008/04/22  (rcs-revision 1.9)
    +\pgflinewidth=\dimen156
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex
    +File: pgfcoretransformations.code.tex 2009/06/10  (rcs-revision 1.11)
    +\pgf@pt@x=\dimen157
    +\pgf@pt@y=\dimen158
    +\pgf@pt@temp=\dimen159
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
    +File: pgfcorequick.code.tex 2008/10/09  (rcs-revision 1.3)
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
    +File: pgfcoreobjects.code.tex 2006/10/11  (rcs-revision 1.2)
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex
    +File: pgfcorepathprocessing.code.tex 2008/10/09  (rcs-revision 1.8)
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
    +File: pgfcorearrows.code.tex 2008/04/23  (rcs-revision 1.11)
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
    +File: pgfcoreshade.code.tex 2008/11/23  (rcs-revision 1.13)
    +\pgf@max=\dimen160
    +\pgf@sys@shading@range@num=\count115
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
    +File: pgfcoreimage.code.tex 2010/03/25  (rcs-revision 1.16)
    +
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
    +File: pgfcoreexternal.code.tex 2010/09/01  (rcs-revision 1.17)
    +\pgfexternal@startupbox=\box39
    +))
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
    +File: pgfcorelayers.code.tex 2010/08/27  (rcs-revision 1.2)
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
    +File: pgfcoretransparency.code.tex 2008/01/17  (rcs-revision 1.2)
    +)
    +(/usr/share/texmf/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
    +File: pgfcorepatterns.code.tex 2009/07/02  (rcs-revision 1.3)
    +)))
    +(/usr/share/texmf/tex/latex/pgf/utilities/xxcolor.sty
    +Package: xxcolor 2003/10/24 ver 0.1
    +\XC@nummixins=\count116
    +\XC@countmixins=\count117
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
    +Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX
    +
    +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
    +Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO)
    +
    +
    +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
    +Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO)
    +Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO)
    +Package hobsub Info: Skipping package `infwarerr' (already loaded).
    +Package hobsub Info: Skipping package `ltxcmds' (already loaded).
    +Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO)
    +Package ifluatex Info: LuaTeX not detected.
    +Package hobsub Info: Skipping package `ifvtex' (already loaded).
    +Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO)
    +Package hobsub Info: Skipping package `ifpdf' (already loaded).
    +Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
    +Package etexcmds Info: Could not find \expanded.
    +(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
    +(etexcmds)             that some package has redefined \expanded.
    +(etexcmds)             In the latter case, load this package earlier.
    +Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO)
    +Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO)
    +Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO
    +)
    +Package pdftexcmds Info: LuaTeX not detected.
    +Package pdftexcmds Info: \pdf@primitive is available.
    +Package pdftexcmds Info: \pdf@ifprimitive is available.
    +Package pdftexcmds Info: \pdfdraftmode found.
    +Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO)
    +Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO
    +)
    +Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO)
    +Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO)
    +)
    +Package hobsub Info: Skipping package `hobsub' (already loaded).
    +Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO)
    +Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO)
    +Package: xcolor-patch 2011/01/30 xcolor patch
    +Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO)
    +Package atveryend Info: \enddocument detected (standard20110627).
    +Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO)
    +Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO)
    +Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO)
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty
    +Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO)
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
    +Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO)
    +)
    +\@linkdim=\dimen161
    +\Hy@linkcounter=\count118
    +\Hy@pagecounter=\count119
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def
    +File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO)
    +)
    +\Hy@SavedSpaceFactor=\count120
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg
    +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive
    +)
    +Package hyperref Info: Option `bookmarks' set `true' on input line 4319.
    +Package hyperref Info: Option `bookmarksopen' set `true' on input line 4319.
    +Package hyperref Info: Option `implicit' set `false' on input line 4319.
    +Package hyperref Info: Hyper figures OFF on input line 4443.
    +Package hyperref Info: Link nesting OFF on input line 4448.
    +Package hyperref Info: Hyper index ON on input line 4451.
    +Package hyperref Info: Plain pages OFF on input line 4458.
    +Package hyperref Info: Backreferencing OFF on input line 4463.
    +Package hyperref Info: Implicit mode OFF; no redefinition of LaTeX internals.
    +Package hyperref Info: Bookmarks ON on input line 4688.
    +\c@Hy@tempcnt=\count121
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty
    +\Urlmuskip=\muskip10
    +Package: url 2013/09/16  ver 3.4  Verb mode for urls, etc.
    +)
    +LaTeX Info: Redefining \url on input line 5041.
    +\XeTeXLinkMargin=\dimen162
    +\Fld@menulength=\count122
    +\Field@Width=\dimen163
    +\Fld@charsize=\dimen164
    +Package hyperref Info: Hyper figures OFF on input line 6295.
    +Package hyperref Info: Link nesting OFF on input line 6300.
    +Package hyperref Info: Hyper index ON on input line 6303.
    +Package hyperref Info: backreferencing OFF on input line 6310.
    +Package hyperref Info: Link coloring OFF on input line 6315.
    +Package hyperref Info: Link coloring with OCG OFF on input line 6320.
    +Package hyperref Info: PDF/A mode OFF on input line 6325.
    +LaTeX Info: Redefining \ref on input line 6365.
    +LaTeX Info: Redefining \pageref on input line 6369.
    +\Hy@abspage=\count123
    +
    +
    +Package hyperref Message: Stopped early.
    +
    +)
    +
    +Package hyperref Message: Driver (autodetected): hpdftex.
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
    +File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX
    +\Fld@listcount=\count124
    +\c@bookmark@seq@number=\count125
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
    +Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO)
    +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2
    +82.
    +))
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaserequires.sty
    +Package: beamerbaserequires 2010/05/01  (rcs-revision efa082c6111d)
    +
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasecompatibility.sty
    +Package: beamerbasecompatibility 2012/05/01  (rcs-revision 67c48b3b652d)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasefont.sty
    +Package: beamerbasefont 2012/09/19  (rcs-revision 733629cd0c6c)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
    +Package: amssymb 2013/01/14 v3.01 AMS font symbols
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
    +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
    +\@emptytoks=\toks23
    +\symAMSa=\mathgroup4
    +\symAMSb=\mathgroup5
    +LaTeX Font Info:    Overwriting math alphabet `\mathfrak' in version `bold'
    +(Font)                  U/euf/m/n --> U/euf/b/n on input line 106.
    +)))
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasetranslator.sty
    +Package: beamerbasetranslator 2010/06/11  (rcs-revision 85fd1cc7fc42)
    +
    +(/usr/share/texmf/tex/latex/beamer/base/translator/translator.sty
    +Package: translator 2010/06/12 ver 1.10
    +
    +(/usr/share/texmf/tex/latex/beamer/base/translator/translator-language-mappings
    +.tex))) (/usr/share/texmf/tex/latex/beamer/base/beamerbasemisc.sty
    +Package: beamerbasemisc 2012/02/24  (rcs-revision 2ff5461be705)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasetwoscreens.sty
    +Package: beamerbasetwoscreens 2010/05/01  (rcs-revision efa082c6111d)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseoverlay.sty
    +Package: beamerbaseoverlay 2012/11/11  (rcs-revision 6afbc49b1109)
    +\beamer@argscount=\count126
    +\beamer@lastskipcover=\skip44
    +\beamer@trivlistdepth=\count127
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasetitle.sty
    +Package: beamerbasetitle 2010/09/21  (rcs-revision f0446ed0b6ae)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasesection.sty
    +Package: beamerbasesection 2012/11/11  (rcs-revision 0056eef6f17f)
    +\c@lecture=\count128
    +\c@part=\count129
    +\c@section=\count130
    +\c@subsection=\count131
    +\c@subsubsection=\count132
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseframe.sty
    +Package: beamerbaseframe 2012/09/13  (rcs-revision dcd846607320)
    +\beamer@framebox=\box40
    +\beamer@frametitlebox=\box41
    +\beamer@zoombox=\box42
    +\beamer@zoomcount=\count133
    +\beamer@zoomframecount=\count134
    +\beamer@frametextheight=\dimen165
    +\c@subsectionslide=\count135
    +\beamer@frametopskip=\skip45
    +\beamer@framebottomskip=\skip46
    +\beamer@frametopskipautobreak=\skip47
    +\beamer@framebottomskipautobreak=\skip48
    +\beamer@envbody=\toks24
    +\framewidth=\dimen166
    +\c@framenumber=\count136
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseverbatim.sty
    +Package: beamerbaseverbatim 2012/08/30  (rcs-revision dfdb135076b3)
    +\beamer@verbatimfileout=\write4
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseframesize.sty
    +Package: beamerbaseframesize 2011/09/12  (rcs-revision 70f9d8411e54)
    +\beamer@splitbox=\box43
    +\beamer@autobreakcount=\count137
    +\beamer@autobreaklastheight=\dimen167
    +\beamer@frametitletoks=\toks25
    +\beamer@framesubtitletoks=\toks26
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseframecomponents.sty
    +Package: beamerbaseframecomponents 2012/09/13  (rcs-revision dcd846607320)
    +\beamer@footins=\box44
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasecolor.sty
    +Package: beamerbasecolor 2010/06/06  (rcs-revision d1a9b48be06d)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasenotes.sty
    +Package: beamerbasenotes 2010/05/01  (rcs-revision efa082c6111d)
    +\beamer@frameboxcopy=\box45
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasetoc.sty
    +Package: beamerbasetoc 2012/10/02  (rcs-revision 5ed0f4010e8a)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasetemplates.sty
    +Package: beamerbasetemplates 2010/05/01  (rcs-revision efa082c6111d)
    +\beamer@sbttoks=\toks27
    +
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseauxtemplates.sty
    +Package: beamerbaseauxtemplates 2012/05/01  (rcs-revision 67c48b3b652d)
    +
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaseboxes.sty
    +Package: beamerbaseboxes 2012/05/13  (rcs-revision 56972908a390)
    +\bmb@box=\box46
    +\bmb@colorbox=\box47
    +\bmb@boxshadow=\box48
    +\bmb@boxshadowball=\box49
    +\bmb@boxshadowballlarge=\box50
    +\bmb@temp=\dimen168
    +\bmb@dima=\dimen169
    +\bmb@dimb=\dimen170
    +\bmb@prevheight=\dimen171
    +)
    +\beamer@blockheadheight=\dimen172
    +))
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbaselocalstructure.sty
    +Package: beamerbaselocalstructure 2012/11/13  (rcs-revision ddfba79dac19)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/tools/enumerate.sty
    +Package: enumerate 1999/03/05 v3.00 enumerate extensions (DPC)
    +\@enLab=\toks28
    +)
    +\c@figure=\count138
    +\c@table=\count139
    +\abovecaptionskip=\skip49
    +\belowcaptionskip=\skip50
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasenavigation.sty
    +Package: beamerbasenavigation 2012/04/03  (rcs-revision 42a0f21a412d)
    +\beamer@section@min@dim=\dimen173
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasetheorems.sty
    +Package: beamerbasetheorems 2010/06/06  (rcs-revision 7e7cc5e53e9d)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
    +Package: amsmath 2013/01/14 v2.14 AMS math features
    +\@mathmargin=\skip51
    +
    +For additional information on amsmath, use the `?' option.
    +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
    +Package: amstext 2000/06/29 v2.01
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty
    +File: amsgen.sty 1999/11/30 v2.0
    +\@emptytoks=\toks29
    +\ex@=\dimen174
    +))
    +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty
    +Package: amsbsy 1999/11/29 v1.2d
    +\pmbraise@=\dimen175
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty
    +Package: amsopn 1999/12/14 v2.01 operator names
    +)
    +\inf@bad=\count140
    +LaTeX Info: Redefining \frac on input line 210.
    +\uproot@=\count141
    +\leftroot@=\count142
    +LaTeX Info: Redefining \overline on input line 306.
    +\classnum@=\count143
    +\DOTSCASE@=\count144
    +LaTeX Info: Redefining \ldots on input line 378.
    +LaTeX Info: Redefining \dots on input line 381.
    +LaTeX Info: Redefining \cdots on input line 466.
    +\Mathstrutbox@=\box51
    +\strutbox@=\box52
    +\big@size=\dimen176
    +LaTeX Font Info:    Redeclaring font encoding OML on input line 566.
    +LaTeX Font Info:    Redeclaring font encoding OMS on input line 567.
    +\macc@depth=\count145
    +\c@MaxMatrixCols=\count146
    +\dotsspace@=\muskip11
    +\c@parentequation=\count147
    +\dspbrk@lvl=\count148
    +\tag@help=\toks30
    +\row@=\count149
    +\column@=\count150
    +\maxfields@=\count151
    +\andhelp@=\toks31
    +\eqnshift@=\dimen177
    +\alignsep@=\dimen178
    +\tagshift@=\dimen179
    +\tagwidth@=\dimen180
    +\totwidth@=\dimen181
    +\lineht@=\dimen182
    +\@envbody=\toks32
    +\multlinegap=\skip52
    +\multlinetaggap=\skip53
    +\mathdisplay@stack=\toks33
    +LaTeX Info: Redefining \[ on input line 2665.
    +LaTeX Info: Redefining \] on input line 2666.
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/amscls/amsthm.sty
    +Package: amsthm 2004/08/06 v2.20
    +\thm@style=\toks34
    +\thm@bodyfont=\toks35
    +\thm@headfont=\toks36
    +\thm@notefont=\toks37
    +\thm@headpunct=\toks38
    +\thm@preskip=\skip54
    +\thm@postskip=\skip55
    +\thm@headsep=\skip56
    +\dth@everypar=\toks39
    +)
    +\c@theorem=\count152
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/beamerbasethemes.sty
    +Package: beamerbasethemes 2010/05/01  (rcs-revision efa082c6111d)
    +))
    +(/usr/share/texmf/tex/latex/beamer/base/themes/theme/beamerthemedefault.sty
    +Package: beamerthemedefault 2010/06/17  (rcs-revision d02a7cf4d8ae)
    +
    +(/usr/share/texmf/tex/latex/beamer/base/themes/font/beamerfontthemedefault.sty
    +Package: beamerfontthemedefault 2010/06/17  (rcs-revision d02a7cf4d8ae)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/themes/color/beamercolorthemedefault.st
    +y
    +Package: beamercolorthemedefault 2010/06/17  (rcs-revision d02a7cf4d8ae)
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/themes/inner/beamerinnerthemedefault.st
    +y
    +Package: beamerinnerthemedefault 2012/05/01  (rcs-revision 67c48b3b652d)
    +\beamer@dima=\dimen183
    +\beamer@dimb=\dimen184
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/themes/outer/beamerouterthemedefault.st
    +y
    +Package: beamerouterthemedefault 2012/10/02  (rcs-revision 5ed0f4010e8a)
    +))) (/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
    +Package: babel 2013/12/03 3.9h The Babel package
    +
    +(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
    +Language: english 2012/08/20 v3.3p English support from the babel system
    +
    +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def
    +File: babel.def 2013/12/03 3.9h Babel common definitions
    +LaTeX Info: Redefining \textlatin on input line 137.
    +\babel@savecnt=\count153
    +\U@D=\dimen185
    +)
    +\l@canadian = a dialect from \language\l@american 
    +\l@australian = a dialect from \language\l@british 
    +\l@newzealand = a dialect from \language\l@british 
    +))
    +(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty
    +Package: calc 2007/08/22 v4.3 Infix arithmetic (KKT,FJ)
    +\calc@Acount=\count154
    +\calc@Bcount=\count155
    +\calc@Adimen=\dimen186
    +\calc@Bdimen=\dimen187
    +\calc@Askip=\skip57
    +\calc@Bskip=\skip58
    +LaTeX Info: Redefining \setlength on input line 76.
    +LaTeX Info: Redefining \addtolength on input line 77.
    +\calc@Ccount=\count156
    +\calc@Cskip=\skip59
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/textpos/textpos.sty
    +Package: textpos 2014/01/03 v1.7j
    +
    +Package: textpos 2014/01/03 1.7j, absolute positioning of text on the page
    +\TP@textbox=\box53
    +\TP@holdbox=\box54
    +\TPHorizModule=\dimen188
    +\TPVertModule=\dimen189
    +\TP@margin=\dimen190
    +\TP@absmargin=\dimen191
    +Grid set 16 x 16 = 22.7622pt x 17.07166pt
    +\TPboxrulesize=\dimen192
    +\TP@ox=\dimen193
    +\TP@oy=\dimen194
    +\TP@tbargs=\toks40
    +\TP@prevdepth=\dimen195
    +TextBlockOrigin set to 0pt x 0pt
    +) (/usr/share/texmf/tex/latex/pgf/frontendlayer/tikz.sty
    +(/usr/share/texmf/tex/latex/pgf/basiclayer/pgf.sty
    +Package: pgf 2008/01/15 v2.10 (rcs-revision 1.12)
    +
    +(/usr/share/texmf/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
    +File: pgfmoduleshapes.code.tex 2010/09/09  (rcs-revision 1.13)
    +\pgfnodeparttextbox=\box55
    +)
    +(/usr/share/texmf/tex/generic/pgf/modules/pgfmoduleplot.code.tex
    +File: pgfmoduleplot.code.tex 2010/10/22  (rcs-revision 1.8)
    +)
    +(/usr/share/texmf/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
    +Package: pgfcomp-version-0-65 2007/07/03 v2.10 (rcs-revision 1.7)
    +\pgf@nodesepstart=\dimen196
    +\pgf@nodesepend=\dimen197
    +)
    +(/usr/share/texmf/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
    +Package: pgfcomp-version-1-18 2007/07/23 v2.10 (rcs-revision 1.1)
    +))
    +(/usr/share/texmf/tex/latex/pgf/utilities/pgffor.sty
    +(/usr/share/texmf/tex/latex/pgf/utilities/pgfkeys.sty
    +(/usr/share/texmf/tex/generic/pgf/utilities/pgfkeys.code.tex))
    +(/usr/share/texmf/tex/generic/pgf/utilities/pgffor.code.tex
    +Package: pgffor 2010/03/23 v2.10 (rcs-revision 1.18)
    +\pgffor@iter=\dimen198
    +\pgffor@skip=\dimen199
    +\pgffor@stack=\toks41
    +\pgffor@toks=\toks42
    +))
    +(/usr/share/texmf/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
    +Package: tikz 2010/10/13 v2.10 (rcs-revision 1.76)
    +
    +(/usr/share/texmf/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex
    +File: pgflibraryplothandlers.code.tex 2010/05/31 v2.10 (rcs-revision 1.15)
    +\pgf@plot@mark@count=\count157
    +\pgfplotmarksize=\dimen200
    +)
    +\tikz@lastx=\dimen201
    +\tikz@lasty=\dimen202
    +\tikz@lastxsaved=\dimen203
    +\tikz@lastysaved=\dimen204
    +\tikzleveldistance=\dimen205
    +\tikzsiblingdistance=\dimen206
    +\tikz@figbox=\box56
    +\tikz@tempbox=\box57
    +\tikztreelevel=\count158
    +\tikznumberofchildren=\count159
    +\tikznumberofcurrentchild=\count160
    +\tikz@fig@count=\count161
    +
    +(/usr/share/texmf/tex/generic/pgf/modules/pgfmodulematrix.code.tex
    +File: pgfmodulematrix.code.tex 2010/08/24  (rcs-revision 1.4)
    +\pgfmatrixcurrentrow=\count162
    +\pgfmatrixcurrentcolumn=\count163
    +\pgf@matrix@numberofcolumns=\count164
    +)
    +\tikz@expandcount=\count165
    +
    +(/usr/share/texmf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopat
    +hs.code.tex
    +File: tikzlibrarytopaths.code.tex 2008/06/17 v2.10 (rcs-revision 1.2)
    +))) (/usr/share/texlive/texmf-dist/tex/latex/qtree/qtree.sty
    +Package: 2008/12/12 v.3.1bQtree: tree-drawing for linguistics
    +Package: qtree 2008/12/12 v.3.1bQtree: tree-drawing for linguistics
    +(/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.sty
    +Package: pict2e 2014/01/12 v0.2z Improved picture commands (HjG,RN,JT)
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/pict2e/pict2e.cfg
    +File: pict2e.cfg 2011/04/05 v0.1t pict2e configuration for teTeX/TeXLive
    +)
    +Package pict2e Info: Driver file: pdftex.def on input line 119.
    +Package pict2e Info: Driver file for pict2e: p2e-pdftex.def on input line 121.
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/pict2e/p2e-pdftex.def
    +File: p2e-pdftex.def 2011/04/05 v0.1t Driver-dependant file (RN,HjG,JT)
    +)
    +\pIIe@GRAPH=\toks43
    +\@arclen=\dimen207
    +\@arcrad=\dimen208
    +\@tempdimd=\dimen209
    +)
    +\c@treecount=\count166
    +\c@branchcount=\count167
    +\parentbox=\box58
    +\treebox=\box59
    +\treeboxone=\box60
    +\treeboxtwo=\box61
    +\treeboxthree=\box62
    +\treeboxfour=\box63
    +\treeboxfive=\box64
    +\treeboxsix=\box65
    +\treeboxseven=\box66
    +\treeboxeight=\box67
    +\treeboxnine=\box68
    +\treeboxten=\box69
    +\treeboxeleven=\box70
    +\treeboxtwelve=\box71
    +\treeboxthirteen=\box72
    +\treeboxfourteen=\box73
    +\treeboxfifteen=\box74
    +\treeboxsixteen=\box75
    +\treeboxseventeen=\box76
    +\treeboxeighteen=\box77
    +\treeboxnineteen=\box78
    +\treeboxtwenty=\box79
    +\treeoffsetone=\skip60
    +\treeoffsettwo=\skip61
    +\treeoffsetthree=\skip62
    +\treeoffsetfour=\skip63
    +\treeoffsetfive=\skip64
    +\treeoffsetsix=\skip65
    +\treeoffsetseven=\skip66
    +\treeoffseteight=\skip67
    +\treeoffsetnine=\skip68
    +\treeoffsetten=\skip69
    +\treeoffseteleven=\skip70
    +\treeoffsettwelve=\skip71
    +\treeoffsetthirteen=\skip72
    +\treeoffsetfourteen=\skip73
    +\treeoffsetfifteen=\skip74
    +\treeoffsetsixteen=\skip75
    +\treeoffsetseventeen=\skip76
    +\treeoffseteighteen=\skip77
    +\treeoffsetnineteen=\skip78
    +\treeoffsettwenty=\skip79
    +\treeshiftone=\skip80
    +\treeshifttwo=\skip81
    +\treeshiftthree=\skip82
    +\treeshiftfour=\skip83
    +\treeshiftfive=\skip84
    +\treeshiftsix=\skip85
    +\treeshiftseven=\skip86
    +\treeshifteight=\skip87
    +\treeshiftnine=\skip88
    +\treeshiftten=\skip89
    +\treeshifteleven=\skip90
    +\treeshifttwelve=\skip91
    +\treeshiftthirteen=\skip92
    +\treeshiftfourteen=\skip93
    +\treeshiftfifteen=\skip94
    +\treeshiftsixteen=\skip95
    +\treeshiftseventeen=\skip96
    +\treeshifteighteen=\skip97
    +\treeshiftnineteen=\skip98
    +\treeshifttwenty=\skip99
    +\treewidthone=\skip100
    +\treewidthtwo=\skip101
    +\treewidththree=\skip102
    +\treewidthfour=\skip103
    +\treewidthfive=\skip104
    +\treewidthsix=\skip105
    +\treewidthseven=\skip106
    +\treewidtheight=\skip107
    +\treewidthnine=\skip108
    +\treewidthten=\skip109
    +\treewidtheleven=\skip110
    +\treewidthtwelve=\skip111
    +\treewidththirteen=\skip112
    +\treewidthfourteen=\skip113
    +\treewidthfifteen=\skip114
    +\treewidthsixteen=\skip115
    +\treewidthseventeen=\skip116
    +\treewidtheighteen=\skip117
    +\treewidthnineteen=\skip118
    +\treewidthtwenty=\skip119
    +\daughteroffsetone=\skip120
    +\daughteroffsettwo=\skip121
    +\daughteroffsetthree=\skip122
    +\daughteroffsetfour=\skip123
    +\branchwidthone=\skip124
    +\branchwidthtwo=\skip125
    +\branchwidththree=\skip126
    +\branchwidthfour=\skip127
    +\parentoffset=\skip128
    +\treeoffset=\skip129
    +\daughteroffset=\skip130
    +\branchwidth=\skip131
    +\parentwidth=\skip132
    +\treewidth=\skip133
    +\qta=\toks44
    +\qtb=\toks45
    +\nbranches=\count168
    +\qroofx=\count169
    +\qroofy=\count170
    +\@qrscratchbox=\box80
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/soul/soul.sty
    +Package: soul 2003/11/17 v2.4 letterspacing/underlining (mf)
    +\SOUL@word=\toks46
    +\SOUL@lasttoken=\toks47
    +\SOUL@cmds=\toks48
    +\SOUL@buffer=\toks49
    +\SOUL@token=\toks50
    +\SOUL@spaceskip=\skip134
    +\SOUL@ttwidth=\dimen210
    +\SOUL@uldp=\dimen211
    +\SOUL@ulht=\dimen212
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/threeparttable/threeparttable.sty
    +Package: threeparttable 2003/06/13  v 3.0
    +\@tempboxb=\box81
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty
    +Package: algorithm2e 2013/01/06 v5.00 algorithms environments
    +\c@AlgoLine=\count171
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty
    +Package: ifthen 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/tools/xspace.sty
    +Package: xspace 2009/10/20 v1.13 Space after command names (DPC,MH)
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/relsize/relsize.sty
    +Package: relsize 2013/03/29 ver 4.1
    +)
    +********************************************************
    +Package `algorithm2e' Release 5.0 -- january 06 2013 --
    +- algorithm2e-announce@lirmm.fr mailing list for announcement about releases
    +- algorithm2e-discussion@lirmm.fr mailing list for discussion about package
    +subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'
    +- Author: Christophe Fiorio (cfiorio@um2.fr)
    +********************************************************
    +\skiptotal=\skip135
    +\skiplinenumber=\skip136
    +\skiprule=\skip137
    +\skiphlne=\skip138
    +\skiptext=\skip139
    +\skiplength=\skip140
    +\algomargin=\skip141
    +\skipalgocfslide=\skip142
    +\algowidth=\dimen213
    +\inoutsize=\dimen214
    +\inoutindent=\dimen215
    +\interspacetitleruled=\dimen216
    +\interspacealgoruled=\dimen217
    +\interspacetitleboxruled=\dimen218
    +\algocf@inoutbox=\box82
    +\algocf@inputbox=\box83
    +\AlCapSkip=\skip143
    +\AlCapHSkip=\skip144
    +\algoskipindent=\skip145
    +\algocf@nlbox=\box84
    +\algocf@hangingbox=\box85
    +\algocf@untilbox=\box86
    +\algocf@skipuntil=\skip146
    +\algocf@capbox=\box87
    +\algoheightruledefault=\skip147
    +\algoheightrule=\skip148
    +\algotitleheightruledefault=\skip149
    +\algotitleheightrule=\skip150
    +\c@algocfline=\count172
    +\c@algocfproc=\count173
    +\c@algocf=\count174
    +\algocf@algoframe=\box88
    +\algocf@algobox=\box89
    +) (/usr/share/texlive/texmf-dist/tex/latex/minibox/minibox.sty
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3names.sty
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3bootstrap.sty
    +Package: l3bootstrap 2014/01/04 v4640 L3 Experimental bootstrap code
    +)
    +Package: l3names 2014/01/04 v4640 L3 Namespace for primitives
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/etex-pkg/etex.sty
    +Package: etex 1998/03/26 v2.0 eTeX basic definition package (PEB)
    +\et@xins=\count175
    +)
    +Package: expl3 2014/01/07 v4646 L3 Experimental code bundle wrapper
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3basics.sty
    +Package: l3basics 2014/01/04 v4642 L3 Basic definitions
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3expan.sty
    +Package: l3expan 2014/01/04 v4642 L3 Argument expansion
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3tl.sty
    +Package: l3tl 2013/12/27 v4625 L3 Token lists
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3seq.sty
    +Package: l3seq 2013/12/14 v4623 L3 Sequences and stacks
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3int.sty
    +Package: l3int 2013/08/02 v4583 L3 Integers
    +\c_max_int=\count176
    +\l_tmpa_int=\count177
    +\l_tmpb_int=\count178
    +\g_tmpa_int=\count179
    +\g_tmpb_int=\count180
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3quark.sty
    +Package: l3quark 2013/12/14 v4623 L3 Quarks
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3prg.sty
    +Package: l3prg 2014/01/04 v4642 L3 Control structures
    +\g__prg_map_int=\count181
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3clist.sty
    +Package: l3clist 2013/07/28 v4581 L3 Comma separated lists
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3token.sty
    +Package: l3token 2013/08/25 v4587 L3 Experimental token manipulation
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3prop.sty
    +Package: l3prop 2013/12/14 v4623 L3 Property lists
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3msg.sty
    +Package: l3msg 2013/07/28 v4581 L3 Messages
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3file.sty
    +Package: l3file 2013/10/13 v4596 L3 File and I/O operations
    +\l_iow_line_count_int=\count182
    +\l__iow_target_count_int=\count183
    +\l__iow_current_line_int=\count184
    +\l__iow_current_word_int=\count185
    +\l__iow_current_indentation_int=\count186
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3skip.sty
    +Package: l3skip 2013/07/28 v4581 L3 Dimensions and skips
    +Normal \dimen register pool exhausted, switching to extended pool.
    +\c_zero_dim=\dimen256
    +\c_max_dim=\dimen257
    +\l_tmpa_dim=\dimen258
    +\l_tmpb_dim=\dimen259
    +\g_tmpa_dim=\dimen260
    +\g_tmpb_dim=\dimen261
    +\c_zero_skip=\skip151
    +\c_max_skip=\skip152
    +\l_tmpa_skip=\skip153
    +\l_tmpb_skip=\skip154
    +\g_tmpa_skip=\skip155
    +\g_tmpb_skip=\skip156
    +\c_zero_muskip=\muskip12
    +\c_max_muskip=\muskip13
    +\l_tmpa_muskip=\muskip14
    +\l_tmpb_muskip=\muskip15
    +\g_tmpa_muskip=\muskip16
    +\g_tmpb_muskip=\muskip17
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3keys.sty
    +Package: l3keys 2013/12/08 v4614 L3 Experimental key-value interfaces
    +\g__keyval_level_int=\count187
    +\l_keys_choice_int=\count188
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3fp.sty
    +Package: l3fp 2014/01/04 v4642 L3 Floating points
    +\c__fp_leading_shift_int=\count189
    +\c__fp_middle_shift_int=\count190
    +\c__fp_trailing_shift_int=\count191
    +\c__fp_big_leading_shift_int=\count192
    +\c__fp_big_middle_shift_int=\count193
    +\c__fp_big_trailing_shift_int=\count194
    +\c__fp_Bigg_leading_shift_int=\count195
    +\c__fp_Bigg_middle_shift_int=\count196
    +\c__fp_Bigg_trailing_shift_int=\count197
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3box.sty
    +Package: l3box 2013/07/28 v4581 L3 Experimental boxes
    +\c_empty_box=\box90
    +\l_tmpa_box=\box91
    +\l_tmpb_box=\box92
    +\g_tmpa_box=\box93
    +\g_tmpb_box=\box94
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3coffins.sty
    +Package: l3coffins 2013/12/14 v4624 L3 Coffin code layer
    +\l__coffin_internal_box=\box95
    +\l__coffin_internal_dim=\dimen262
    +\l__coffin_offset_x_dim=\dimen263
    +\l__coffin_offset_y_dim=\dimen264
    +\l__coffin_x_dim=\dimen265
    +\l__coffin_y_dim=\dimen266
    +\l__coffin_x_prime_dim=\dimen267
    +\l__coffin_y_prime_dim=\dimen268
    +\c_empty_coffin=\box96
    +\l__coffin_aligned_coffin=\box97
    +\l__coffin_aligned_internal_coffin=\box98
    +\l_tmpa_coffin=\box99
    +\l_tmpb_coffin=\box100
    +\l__coffin_display_coffin=\box101
    +\l__coffin_display_coord_coffin=\box102
    +\l__coffin_display_pole_coffin=\box103
    +\l__coffin_display_offset_dim=\dimen269
    +\l__coffin_display_x_dim=\dimen270
    +\l__coffin_display_y_dim=\dimen271
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3color.sty
    +Package: l3color 2012/08/29 v4156 L3 Experimental color support
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3luatex.sty
    +Package: l3luatex 2013/07/28 v4581 L3 Experimental LuaTeX-specific functions
    +\g__cctab_allocate_int=\count198
    +\g__cctab_stack_int=\count199
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/l3kernel/l3candidates.sty
    +Package: l3candidates 2014/01/06 v4643 L3 Experimental additions to l3kernel
    +\l__box_top_dim=\dimen272
    +\l__box_bottom_dim=\dimen273
    +\l__box_left_dim=\dimen274
    +\l__box_right_dim=\dimen275
    +\l__box_top_new_dim=\dimen276
    +\l__box_bottom_new_dim=\dimen277
    +\l__box_left_new_dim=\dimen278
    +\l__box_right_new_dim=\dimen279
    +\l__box_internal_box=\box104
    +\l__coffin_bounding_shift_dim=\dimen280
    +\l__coffin_left_corner_dim=\dimen281
    +\l__coffin_right_corner_dim=\dimen282
    +\l__coffin_bottom_corner_dim=\dimen283
    +\l__coffin_top_corner_dim=\dimen284
    +\l__coffin_scaled_total_height_dim=\dimen285
    +\l__coffin_scaled_width_dim=\dimen286
    +))
    +Package: minibox 2013/06/21 v0.2a Another type of box.
    +\l_minibox_rule_dim=\dimen287
    +\l_minibox_pad_dim=\dimen288
    +)
    +(/usr/share/texlive/texmf-dist/tex/latex/eurosym/eurosym.sty
    +Package: eurosym 1998/08/06 v1.1 European currency symbol ``Euro''
    +\@eurobox=\box105
    +)
    +(./beamerthemetud.sty (./beamerfontthemetud.sty) (./beamercolorthemetud.sty)
    +(./beamerinnerthemetud.sty) (./beamerouterthemetud.sty)) (./presentation.aux)
    +\openout1 = `presentation.aux'.
    +
    +LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 44.
    +LaTeX Font Info:    ... okay on input line 44.
    +LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 44.
    +LaTeX Font Info:    ... okay on input line 44.
    +LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 44.
    +LaTeX Font Info:    ... okay on input line 44.
    +LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 44.
    +LaTeX Font Info:    ... okay on input line 44.
    +LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 44.
    +LaTeX Font Info:    ... okay on input line 44.
    +LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 44.
    +LaTeX Font Info:    ... okay on input line 44.
    +LaTeX Font Info:    Checking defaults for PD1/pdf/m/n on input line 44.
    +LaTeX Font Info:    ... okay on input line 44.
    +
    +*geometry* driver: auto-detecting
    +*geometry* detected driver: pdftex
    +*geometry* verbose mode - [ preamble ] result:
    +* driver: pdftex
    +* paper: custom
    +* layout: <same size as paper>
    +* layoutoffset:(h,v)=(0.0pt,0.0pt)
    +* modes: includehead includefoot 
    +* h-part:(L,W,R)=(28.45274pt, 321.51625pt, 14.22636pt)
    +* v-part:(T,H,B)=(0.0pt, 273.14662pt, 0.0pt)
    +* \paperwidth=364.19536pt
    +* \paperheight=273.14662pt
    +* \textwidth=321.51625pt
    +* \textheight=244.6939pt
    +* \oddsidemargin=-43.81725pt
    +* \evensidemargin=-43.81725pt
    +* \topmargin=-72.26999pt
    +* \headheight=14.22636pt
    +* \headsep=0.0pt
    +* \topskip=11.0pt
    +* \footskip=14.22636pt
    +* \marginparwidth=4.0pt
    +* \marginparsep=10.0pt
    +* \columnsep=10.0pt
    +* \skip\footins=10.0pt plus 4.0pt minus 2.0pt
    +* \hoffset=0.0pt
    +* \voffset=0.0pt
    +* \mag=1000
    +* \@twocolumnfalse
    +* \@twosidefalse
    +* \@mparswitchfalse
    +* \@reversemarginfalse
    +* (1in=72.27pt=25.4mm, 1cm=28.453pt)
    +
    +(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii
    +[Loading MPS to PDF converter (version 2006.09.02).]
    +\scratchcounter=\count200
    +\scratchdimen=\dimen289
    +\scratchbox=\box106
    +\nofMPsegments=\count201
    +Normal \count register pool exhausted, switching to extended pool.
    +\nofMParguments=\count277
    +\everyMPshowfont=\toks51
    +\MPscratchCnt=\count278
    +\MPscratchDim=\dimen290
    +\MPnumerator=\count279
    +\makeMPintoPDFobject=\count280
    +\everyMPtoPDFconversion=\toks52
    +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
    +Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty
    +Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO)
    +)
    +Package grfext Info: Graphics extension search list:
    +(grfext)             [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE
    +G,.JBIG2,.JB2,.eps]
    +(grfext)             \AppendGraphicsExtensions on input line 452.
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg
    +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv
    +e
    +))
    +ABD: EveryShipout initializing macros
    +\AtBeginShipoutBox=\box107
    +Package hyperref Info: Link coloring OFF on input line 44.
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
    +Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section
    +
    +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
    +Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO)
    +)
    +\c@section@level=\count281
    +)
    +LaTeX Info: Redefining \ref on input line 44.
    +LaTeX Info: Redefining \pageref on input line 44.
    +LaTeX Info: Redefining \nameref on input line 44.
    +
    +(./presentation.out) (./presentation.out)
    +\@outlinefile=\write5
    +\openout5 = `presentation.out'.
    +
    +LaTeX Font Info:    Overwriting symbol font `operators' in version `normal'
    +(Font)                  OT1/cmr/m/n --> OT1/cmss/m/n on input line 44.
    +LaTeX Font Info:    Overwriting symbol font `operators' in version `bold'
    +(Font)                  OT1/cmr/bx/n --> OT1/cmss/bx/n on input line 44.
    +\symnumbers=\mathgroup6
    +\sympureletters=\mathgroup7
    +LaTeX Font Info:    Overwriting math alphabet `\mathrm' in version `normal'
    +(Font)                  OT1/cmss/m/n --> OT1/cmr/m/n on input line 44.
    +LaTeX Font Info:    Redeclaring math alphabet \mathbf on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathbf' in version `normal'
    +(Font)                  OT1/cmr/bx/n --> OT1/cmss/bx/n on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathbf' in version `bold'
    +(Font)                  OT1/cmr/bx/n --> OT1/cmss/bx/n on input line 44.
    +LaTeX Font Info:    Redeclaring math alphabet \mathsf on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathsf' in version `normal'
    +(Font)                  OT1/cmss/m/n --> OT1/cmss/m/n on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathsf' in version `bold'
    +(Font)                  OT1/cmss/bx/n --> OT1/cmss/m/n on input line 44.
    +LaTeX Font Info:    Redeclaring math alphabet \mathit on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `normal'
    +(Font)                  OT1/cmr/m/it --> OT1/cmss/m/it on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `bold'
    +(Font)                  OT1/cmr/bx/it --> OT1/cmss/m/it on input line 44.
    +LaTeX Font Info:    Redeclaring math alphabet \mathtt on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathtt' in version `normal'
    +(Font)                  OT1/cmtt/m/n --> OT1/cmtt/m/n on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathtt' in version `bold'
    +(Font)                  OT1/cmtt/m/n --> OT1/cmtt/m/n on input line 44.
    +LaTeX Font Info:    Overwriting symbol font `numbers' in version `bold'
    +(Font)                  OT1/cmss/m/n --> OT1/cmss/bx/n on input line 44.
    +LaTeX Font Info:    Overwriting symbol font `pureletters' in version `bold'
    +(Font)                  OT1/cmss/m/it --> OT1/cmss/bx/it on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathrm' in version `bold'
    +(Font)                  OT1/cmss/bx/n --> OT1/cmr/bx/n on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathbf' in version `bold'
    +(Font)                  OT1/cmss/bx/n --> OT1/cmss/bx/n on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathsf' in version `bold'
    +(Font)                  OT1/cmss/m/n --> OT1/cmss/bx/n on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathit' in version `bold'
    +(Font)                  OT1/cmss/m/it --> OT1/cmss/bx/it on input line 44.
    +LaTeX Font Info:    Overwriting math alphabet `\mathtt' in version `bold'
    +(Font)                  OT1/cmtt/m/n --> OT1/cmtt/bx/n on input line 44.
    +
    +(/usr/share/texmf/tex/latex/beamer/base/translator/dicts/translator-basic-dicti
    +onary/translator-basic-dictionary-English.dict
    +Dictionary: translator-basic-dictionary, Language: English 
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/translator/dicts/translator-bibliograph
    +y-dictionary/translator-bibliography-dictionary-English.dict
    +Dictionary: translator-bibliography-dictionary, Language: English 
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/translator/dicts/translator-environment
    +-dictionary/translator-environment-dictionary-English.dict
    +Dictionary: translator-environment-dictionary, Language: English 
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/translator/dicts/translator-months-dict
    +ionary/translator-months-dictionary-English.dict
    +Dictionary: translator-months-dictionary, Language: English 
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/translator/dicts/translator-numbers-dic
    +tionary/translator-numbers-dictionary-English.dict
    +Dictionary: translator-numbers-dictionary, Language: English 
    +)
    +(/usr/share/texmf/tex/latex/beamer/base/translator/dicts/translator-theorem-dic
    +tionary/translator-theorem-dictionary-English.dict
    +Dictionary: translator-theorem-dictionary, Language: English 
    +)
    +LaTeX Info: Redefining \includegraphics on input line 44.
    + (./presentation.nav)
    +\titleBox=\box108
    +\subtitleBox=\box109
    +\instituteBox=\box110
    +\authorBox=\box111
    +\dateBox=\box112
    +\titleBoxWidth=\skip157
    +\titleBoxInnerWidth=\skip158
    +
    +
    +LaTeX Font Warning: Font shape `OT1/cmss/m/n' in size <4> not available
    +(Font)              size <5> substituted on input line 48.
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[1
    +
    +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]
    +LaTeX Font Info:    Try loading font information for OMS+cmss on input line 59.
    +
    +LaTeX Font Info:    No file OMScmss.fd. on input line 59.
    +
    +
    +LaTeX Font Warning: Font shape `OMS/cmss/m/n' undefined
    +(Font)              using `OMS/cmsy/m/n' instead
    +(Font)              for symbol `textbullet' on input line 59.
    +
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 59--59
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[2
    +
    +] <../img/personIcon.png, id=32, 256.96pt x 256.96pt>
    +File: ../img/personIcon.png Graphic file (type png)
    +
    +<use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +LaTeX Font Info:    Try loading font information for U+msa on input line 90.
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd
    +File: umsa.fd 2013/01/14 v3.01 AMS symbols A
    +)
    +LaTeX Font Info:    Try loading font information for U+msb on input line 90.
    +
    +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd
    +File: umsb.fd 2013/01/14 v3.01 AMS symbols B
    +)
    +<../img/sqo-oss.png, id=34, 139.722pt x 36.135pt>
    +File: ../img/sqo-oss.png Graphic file (type png)
    + <use ../img/sqo-oss.png>
    +Package pdftex.def Info: ../img/sqo-oss.png used on input line 90.
    +(pdftex.def)             Requested size: 96.45586pt x 24.94583pt.
    +File: ../img/personIcon.png Graphic file (type png)
    +
    +<use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 90--90
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[3
    +
    + <../img/personIcon.png> <../img/sqo-oss.png>]
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    +
    +<use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/sqo-oss.png Graphic file (type png)
    + <use ../img/sqo-oss.png>
    +Package pdftex.def Info: ../img/sqo-oss.png used on input line 90.
    +(pdftex.def)             Requested size: 96.45586pt x 24.94583pt.
    +File: ../img/personIcon.png Graphic file (type png)
    +
    +<use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 90--90
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[4
    +
    +]
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/sqo-oss.png Graphic file (type png)
    +
    +<use ../img/sqo-oss.png>
    +Package pdftex.def Info: ../img/sqo-oss.png used on input line 90.
    +(pdftex.def)             Requested size: 96.45586pt x 24.94583pt.
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    +
    +<use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 90--90
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[5
    +
    +]
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/sqo-oss.png Graphic file (type png)
    +
    +<use ../img/sqo-oss.png>
    +Package pdftex.def Info: ../img/sqo-oss.png used on input line 90.
    +(pdftex.def)             Requested size: 96.45586pt x 24.94583pt.
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +
    +<../img/personIcon2.png, id=55, 256.96pt x 256.96pt>
    +File: ../img/personIcon2.png Graphic file (type png)
    +
    +<use ../img/personIcon2.png>
    +Package pdftex.def Info: ../img/personIcon2.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 90--90
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[6
    +
    + <../img/personIcon2.png>]
    +File: ../img/personIcon.png Graphic file (type png)
    + <use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon.png Graphic file (type png)
    +
    +<use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/sqo-oss.png Graphic file (type png)
    + <use ../img/sqo-oss.png>
    +Package pdftex.def Info: ../img/sqo-oss.png used on input line 90.
    +(pdftex.def)             Requested size: 96.45586pt x 24.94583pt.
    +File: ../img/personIcon.png Graphic file (type png)
    +
    +<use ../img/personIcon.png>
    +Package pdftex.def Info: ../img/personIcon.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +File: ../img/personIcon2.png Graphic file (type png)
    + <use ../img/personIcon2.png>
    +Package pdftex.def Info: ../img/personIcon2.png used on input line 90.
    +(pdftex.def)             Requested size: 48.22792pt x 48.22693pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 90--90
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[7
    +
    +] <../img/inCodeOverview.png, id=70, 554.07pt x 262.73157pt>
    +File: ../img/inCodeOverview.png Graphic file (type png)
    +
    +<use ../img/inCodeOverview.png>
    +Package pdftex.def Info: ../img/inCodeOverview.png used on input line 103.
    +(pdftex.def)             Requested size: 257.21397pt x 121.96445pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 103--103
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[8
    +
    + <../img/inCodeOverview.png>]
    +<../img/gitUpdaterDependencies.png, id=78, 445.665pt x 232.87pt>
    +File: ../img/gitUpdaterDependencies.png Graphic file (type png)
    +
    +<use ../img/gitUpdaterDependencies.png>
    +Package pdftex.def Info: ../img/gitUpdaterDependencies.png used on input line 1
    +15.
    +(pdftex.def)             Requested size: 257.21397pt x 134.4002pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 115--115
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[9
    +
    + <../img/gitUpdaterDependencies.png>]
    +<../img/impl-depedency.png, id=85, 399.4925pt x 331.2375pt>
    +File: ../img/impl-depedency.png Graphic file (type png)
    +
    +<use ../img/impl-depedency.png>
    +Package pdftex.def Info: ../img/impl-depedency.png used on input line 136.
    +(pdftex.def)             Requested size: 192.91171pt x 159.9525pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 136--136
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[10
    +
    + <../img/impl-depedency.png>]
    +<../img/cycle1.png, id=92, 676.5275pt x 172.645pt>
    +File: ../img/cycle1.png Graphic file (type png)
    + <use ../img/cycle1.png>
    +Package pdftex.def Info: ../img/cycle1.png used on input line 149.
    +(pdftex.def)             Requested size: 321.51625pt x 82.04936pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 149--149
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[11
    +
    + <../img/cycle1.png (PNG copy)>]
    +<../img/fds-before.png, id=99, 942.52126pt x 459.7175pt>
    +File: ../img/fds-before.png Graphic file (type png)
    +
    +<use ../img/fds-before.png>
    +Package pdftex.def Info: ../img/fds-before.png used on input line 164.
    +(pdftex.def)             Requested size: 257.21397pt x 125.45818pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 164--164
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[12
    +
    + <../img/fds-before.png>]
    +<../img/fds-after.png, id=106, 927.465pt x 322.20375pt>
    +File: ../img/fds-after.png Graphic file (type png)
    +
    +<use ../img/fds-after.png>
    +Package pdftex.def Info: ../img/fds-after.png used on input line 164.
    +(pdftex.def)             Requested size: 321.51625pt x 111.69629pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 164--164
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[13
    +
    + <../img/fds-after.png>]
    +<../img/coreCoverageBefore.png, id=114, 872.25874pt x 170.6375pt>
    +File: ../img/coreCoverageBefore.png Graphic file (type png)
    +
    +<use ../img/coreCoverageBefore.png>
    +Package pdftex.def Info: ../img/coreCoverageBefore.png used on input line 177.
    +(pdftex.def)             Requested size: 321.51625pt x 62.89534pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 177--177
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[14
    +
    + <../img/coreCoverageBefore.png (PNG copy)>]
    +<../img/coreCoverageAfter.png, id=122, 900.36375pt x 395.4775pt>
    +File: ../img/coreCoverageAfter.png Graphic file (type png)
    +
    +<use ../img/coreCoverageAfter.png>
    +Package pdftex.def Info: ../img/coreCoverageAfter.png used on input line 189.
    +(pdftex.def)             Requested size: 321.51625pt x 141.22523pt.
    +
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 189--189
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[15
    +
    + <../img/coreCoverageAfter.png>]
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 199--199
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[16
    +
    +]
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 199--199
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[17
    +
    +]
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 199--199
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[18
    +
    +]
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 199--199
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[19
    +
    +]
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 208--208
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[20
    +
    +]
    +Overfull \hbox (17.82637pt too wide) in paragraph at lines 214--214
    +[]|  []  
    + []
    +
    +
    +Overfull \hbox (38.54677pt too wide) has occurred while \output is active
    +[] 
    + []
    +
    +[21
    +
    +]
    +\tf@nav=\write6
    +\openout6 = `presentation.nav'.
    +
    +\tf@toc=\write7
    +\openout7 = `presentation.toc'.
    +
    +\tf@snm=\write8
    +\openout8 = `presentation.snm'.
    +
    +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 216.
    +Package atveryend Info: Empty hook `AfterLastShipout' on input line 216.
    + (./presentation.aux)
    +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 216.
    +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 216.
    +Package rerunfilecheck Info: File `presentation.out' has not changed.
    +(rerunfilecheck)             Checksum: D41D8CD98F00B204E9800998ECF8427E;0.
    +
    +
    +LaTeX Font Warning: Size substitutions with differences
    +(Font)              up to 1.0pt have occurred.
    +
    +
    +LaTeX Font Warning: Some font shapes were not available, defaults substituted.
    +
    +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 216.
    + ) 
    +Here is how much of TeX's memory you used:
    + 25556 strings out of 493304
    + 479249 string characters out of 6139872
    + 570784 words of memory out of 5000000
    + 28398 multiletter control sequences out of 15000+600000
    + 13102 words of font info for 48 fonts, out of 8000000 for 9000
    + 957 hyphenation exceptions out of 8191
    + 49i,15n,53p,10399b,900s stack positions out of 5000i,500n,10000p,200000b,80000s
    +</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></us
    +r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmss10.pfb></usr/shar
    +e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmss17.pfb></usr/share/texl
    +ive/texmf-dist/fonts/type1/public/amsfonts/cm/cmss8.pfb></usr/share/texlive/tex
    +mf-dist/fonts/type1/public/amsfonts/cm/cmssbx10.pfb></usr/share/texlive/texmf-d
    +ist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/fo
    +nts/type1/public/eurosym/feymr10.pfb>
    +Output written on presentation.pdf (21 pages, 370661 bytes).
    +PDF statistics:
    + 204 PDF objects out of 1000 (max. 8388607)
    + 150 compressed objects within 2 object streams
    + 43 named destinations out of 1000 (max. 500000)
    + 98 words of extra memory for PDF output out of 10000 (max. 10000000)
    +
    diff --git a/4143760-4167562/presentation/presentation.nav b/4143760-4167562/presentation/presentation.nav
    new file mode 100644
    index 000000000..03d20af4d
    --- /dev/null
    +++ b/4143760-4167562/presentation/presentation.nav
    @@ -0,0 +1,32 @@
    +\beamer@endinputifotherversion {3.24pt}
    +\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}
    +\headcommand {\beamer@framepages {1}{1}}
    +\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}}
    +\headcommand {\beamer@framepages {2}{2}}
    +\headcommand {\slideentry {0}{0}{3}{3/7}{}{0}}
    +\headcommand {\beamer@framepages {3}{7}}
    +\headcommand {\slideentry {0}{0}{4}{8/8}{}{0}}
    +\headcommand {\beamer@framepages {8}{8}}
    +\headcommand {\slideentry {0}{0}{5}{9/9}{}{0}}
    +\headcommand {\beamer@framepages {9}{9}}
    +\headcommand {\slideentry {0}{0}{6}{10/10}{}{0}}
    +\headcommand {\beamer@framepages {10}{10}}
    +\headcommand {\slideentry {0}{0}{7}{11/11}{}{0}}
    +\headcommand {\beamer@framepages {11}{11}}
    +\headcommand {\slideentry {0}{0}{8}{12/13}{}{0}}
    +\headcommand {\beamer@framepages {12}{13}}
    +\headcommand {\slideentry {0}{0}{9}{14/14}{}{0}}
    +\headcommand {\beamer@framepages {14}{14}}
    +\headcommand {\slideentry {0}{0}{10}{15/15}{}{0}}
    +\headcommand {\beamer@framepages {15}{15}}
    +\headcommand {\slideentry {0}{0}{11}{16/19}{}{0}}
    +\headcommand {\beamer@framepages {16}{19}}
    +\headcommand {\slideentry {0}{0}{12}{20/20}{}{0}}
    +\headcommand {\beamer@framepages {20}{20}}
    +\headcommand {\slideentry {0}{0}{13}{21/21}{}{0}}
    +\headcommand {\beamer@framepages {21}{21}}
    +\headcommand {\beamer@partpages {1}{21}}
    +\headcommand {\beamer@subsectionpages {1}{21}}
    +\headcommand {\beamer@sectionpages {1}{21}}
    +\headcommand {\beamer@documentpages {21}}
    +\headcommand {\def \inserttotalframenumber {13}}
    diff --git a/4143760-4167562/presentation/presentation.out b/4143760-4167562/presentation/presentation.out
    new file mode 100644
    index 000000000..e69de29bb
    diff --git a/4143760-4167562/presentation/presentation.pdf b/4143760-4167562/presentation/presentation.pdf
    new file mode 100644
    index 000000000..8ac8fcd44
    Binary files /dev/null and b/4143760-4167562/presentation/presentation.pdf differ
    diff --git a/4143760-4167562/presentation/presentation.snm b/4143760-4167562/presentation/presentation.snm
    new file mode 100644
    index 000000000..e69de29bb
    diff --git a/4143760-4167562/presentation/presentation.tex b/4143760-4167562/presentation/presentation.tex
    new file mode 100644
    index 000000000..f02277e62
    --- /dev/null
    +++ b/4143760-4167562/presentation/presentation.tex
    @@ -0,0 +1,216 @@
    +% TU Delft Beamer template
    +% Author: Maarten Abbink
    +% Delft University of Technology
    +% March 2014
    +% Version 2.0
    +% Based on original version 1.0 of Carl Schneider
    +\documentclass{beamer}
    +\usepackage[english]{babel}
    +\usepackage{calc}
    +\usepackage[absolute,overlay]{textpos}
    +\usepackage{amsmath}
    +\usepackage{tikz}
    +\usepackage{qtree}
    +\usepackage{soul}
    +\usepackage{threeparttable}
    +\usepackage{algorithm2e}
    +\usepackage{minibox}
    +\usepackage[gen]{eurosym}
    +\mode<presentation>{\usetheme{tud}}
    +
    +\SetKwProg{Fn}{Function}{ :}{end}
    +\SetKw{Break}{break}
    +
    +\title[]{Reengineering Alitheia Core}
    +\institute[TU Delft]{Software Reengineering - IN4189}
    +\author{Anton Bouter - Martijn den Hoedt}
    +\date{\today}
    +
    +% Insert frame before each subsection (requires 2 latex runs)
    +\AtBeginSubsection[] {
    +	\begin{frame}<beamer>\frametitle{\titleSubsec}
    +		\tableofcontents[currentsection,currentsubsection]  % Generation of the Table of Contents
    +	\end{frame}
    +}
    +% Define the title of each inserted pre-subsection frame
    +\newcommand*\titleSubsec{Next Subsection}
    +% Define the title of the "Table of Contents" frame
    +\newcommand*\titleTOC{Outline}
    +
    +% define a symbol which can be removed if you don't need it
    +\newcommand{\field}[1]{\mathbb{#1}}
    +\newcommand{\Zset}{\field{Z}}
    +
    +\begin{document}
    +
    +% remove the next line if you don't want a background image
    +\setbeamertemplate{footline}{\usebeamertemplate*{minimal footline}}
    +\frame{\titlepage}
    +
    +\setbeamertemplate{footline}{\usebeamertemplate*{minimal footline}}
    +\begin{frame}
    +    \frametitle{Outline}
    +    \begin{itemize}
    +        \item Shortcomings
    +        \item Improvements
    +        \item Recommendations
    +        \item Conclusions
    +    \end{itemize}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Scenario}
    +    \begin{columns}
    +    
    +        \begin{column}{0.3\textwidth}
    +        		\centering
    +            \includegraphics[width=0.5\textwidth]{../img/personIcon.png}
    +            \\ \vspace{30px}
    +            \centering
    +            \includegraphics<1>[width=0.5\textwidth]{../img/personIcon.png}
    +            \tikz\node[opacity=0.3]{\includegraphics<2->[width=0.5\textwidth]{../img/personIcon.png}};
    +        \end{column}
    +        
    +        \begin{column}{0.3\textwidth}
    +        		\centering
    +            \includegraphics[width=\textwidth]{../img/sqo-oss.png}
    +        \end{column}
    +        
    +        \begin{column}{0.3\textwidth}
    +        		\centering
    +            \includegraphics<-4>[width=0.5\textwidth]{../img/personIcon.png}
    +            \tikz\node[opacity=0.3]{\includegraphics<5->[width=0.5\textwidth]{../img/personIcon.png}};
    +            \\ \vspace{30px}
    +            \includegraphics<-2>[width=0.5\textwidth]{../img/personIcon.png}
    +            \tikz\node[opacity=0.3]{\includegraphics<3>[width=0.5\textwidth]{../img/personIcon.png}};
    +            \includegraphics<4->[width=0.5\textwidth]{../img/personIcon2.png}
    +        \end{column}
    +        
    +    \end{columns}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Shortcomings - Single Responsibility Principle}
    +    \begin{itemize}
    +        \item Every software entity should have a single purpose.
    +        \item inCode tool
    +    \end{itemize}
    +    
    +    \begin{figure}
    +    	\centering
    +    	\includegraphics[width=0.8\textwidth]{../img/inCodeOverview.png}
    +    \end{figure}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Improvements - Single Responsibility Principle}
    +    \begin{itemize}
    +        \item Split GitUpdater into 4 classes.
    +    \end{itemize}
    +    
    +    \begin{figure}
    +    	\centering
    +    	\includegraphics[width=0.8\textwidth]{../img/gitUpdaterDependencies.png}
    +    \end{figure}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Shortcomings - Dependency Inversion \\ Principle}
    +	\begin{columns}
    +	
    +	\begin{column}{0.4\textwidth}    
    +    		\begin{itemize}
    +    		    \item High-level modules should not depend on low-level modules.
    +    		    \item STAN Eclipse plugin
    +    		\end{itemize}
    +    \end{column}
    +    
    +    \begin{column}{0.6\textwidth}
    +    		\begin{figure}
    +    		\centering
    +    		\includegraphics[width=\textwidth]{../img/impl-depedency.png}
    +    		\end{figure}
    +    \end{column}
    +    
    +    \end{columns}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Shortcomings - Acyclic Dependency Principle}
    +    \begin{itemize}
    +        \item If A depends on B, B should not depend on A.
    +        \item STAN Eclipse plugin
    +    \end{itemize}
    +    
    +    \begin{figure}
    +    	\centering
    +    	\includegraphics[width=\textwidth]{../img/cycle1.png}
    +    \end{figure}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Improvements - Acyclic Dependency Principle}
    +    Solved cyclic dependencies:
    +    \begin{itemize}
    +        \item service.abstractmetric
    +        \item service.fds
    +    \end{itemize}
    +    
    +    \begin{figure}
    +    	\centering
    +        \includegraphics<1>[width=0.8\textwidth]{../img/fds-before.png}
    +    	\includegraphics<2>[width=\textwidth]{../img/fds-after.png}
    +    \end{figure}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Shortcomings - Lack of tests}
    +    \begin{itemize}
    +        \item EclEmma tool
    +        \item \textbf{Terrible coverage of 1.7\%!}
    +        
    +    \end{itemize}
    +    \begin{figure}
    +    	\centering
    +    		\includegraphics[width=\textwidth]{../img/coreCoverageBefore.png}
    +    \end{figure}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Improvements - Tests}
    +    \begin{itemize}
    +        \item Core coverage of 11.0\%.
    +    \end{itemize}
    +    
    +    \begin{figure}
    +    	\centering
    +    		\includegraphics[width=\textwidth]{../img/coreCoverageAfter.png}
    +    \end{figure}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Recommendations}
    +    \begin{itemize}
    +    		\item Create tests.
    +    		\item<2-> Create more tests.
    +    		\item<3-> Perform more refactorings to fix e.g. SRP and DIP problems.
    +    		\item<4-> $\euro{}$ 15.000 to hire additional developers.
    +    \end{itemize}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Conclusion}
    +    \begin{itemize}
    +    		\item Many problems that affect maintainability.
    +    		\item Some improvements have been made.
    +    		\item $\euro{}$ 15.000 required to keep the system maintainable.
    +    \end{itemize}
    +\end{frame}
    +
    +\begin{frame}
    +    \frametitle{Questions}
    +    \hspace{.25\linewidth}
    +    \Huge{Questions?}
    +\end{frame}
    +
    +\end{document}
    diff --git a/4143760-4167562/presentation/presentation.toc b/4143760-4167562/presentation/presentation.toc
    new file mode 100644
    index 000000000..ab3aa12db
    --- /dev/null
    +++ b/4143760-4167562/presentation/presentation.toc
    @@ -0,0 +1,2 @@
    +\beamer@endinputifotherversion {3.24pt}
    +\select@language {english}
    diff --git a/alitheia/core/.codepro/deadCodeEntryPoints.xml b/alitheia/core/.codepro/deadCodeEntryPoints.xml
    new file mode 100644
    index 000000000..62e231eee
    --- /dev/null
    +++ b/alitheia/core/.codepro/deadCodeEntryPoints.xml
    @@ -0,0 +1,129 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<!-- Generated by Code Pro -->
    +<entry-points
    +		version="1">
    +	<explicit-entry-points>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java%eu.sqooss.core"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#java.util.ArrayList"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#java.util.Collections"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#java.util.HashMap"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#java.util.List"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#java.util.Map"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#java.util.Vector"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#org.osgi.framework.BundleContext"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.admin.AdminServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.cluster.ClusterNodeServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.db.DBServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.fds.FDSServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.logging.LogManagerImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.metricactivator.MetricActivatorImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.pa.PAServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.rest.ResteasyServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.scheduler.SchedulerServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.tds.TDSServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.updater.UpdaterServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.impl.service.webadmin.WebadminServiceImpl"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.admin.AdminService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.cluster.ClusterNodeService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.db.DBService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.fds.FDSService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.logging.LogManager"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.metricactivator.MetricActivator"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.pa.PluginAdmin"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.rest.RestService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.scheduler.Scheduler"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.tds.TDSService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.updater.UpdaterService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java#eu.sqooss.service.webadmin.WebadminService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore|1"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~AlitheiaCore~QBundleContext;"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getInstance"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~testInstance"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~registerService~QClass\&lt;+QAlitheiaCoreService;&gt;;~QClass\&lt;*&gt;;"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~unregisterService~QClass\&lt;+QAlitheiaCoreService;&gt;;"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~init"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~initService~QClass\&lt;+QAlitheiaCoreService;&gt;;"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~shutDown"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getLogManager"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getWebadminService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getPluginAdmin"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getDBService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~canLee~Z"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getFDSService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getScheduler"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getSecurityManager"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getTDSService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getUpdater"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getClusterNodeService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getMetricActivator"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~getAdminService"/>
    +		<explicit-entry-point
    +				handle="=core/src\/main\/java&lt;eu.sqooss.core{AlitheiaCore.java[AlitheiaCore~err~QString;"/>
    +	</explicit-entry-points>
    +	<include-main
    +			enabled="true"/>
    +	<include-tests
    +			enabled="false"/>
    +	<include-xml
    +			enabled="true"/>
    +</entry-points>
    \ No newline at end of file
    diff --git a/alitheia/core/default.ecore b/alitheia/core/default.ecore
    new file mode 100644
    index 000000000..31aefc15b
    --- /dev/null
    +++ b/alitheia/core/default.ecore
    @@ -0,0 +1,2 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"/>
    diff --git a/alitheia/core/default.ecore_diagram b/alitheia/core/default.ecore_diagram
    new file mode 100644
    index 000000000..530d84fc4
    --- /dev/null
    +++ b/alitheia/core/default.ecore_diagram
    @@ -0,0 +1,5 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_7jvUgH4cEeSZa_InsXqNmA" type="Ecore" name="default.ecore_diagram" measurementUnit="Pixel">
    +  <styles xmi:type="notation:DiagramStyle" xmi:id="_7jvUgX4cEeSZa_InsXqNmA"/>
    +  <element xmi:type="ecore:EPackage" href="default.ecore#/"/>
    +</notation:Diagram>
    diff --git a/alitheia/core/src/main/java/eu/sqooss/core/AlitheiaCore.java b/alitheia/core/src/main/java/eu/sqooss/core/AlitheiaCore.java
    index 63610d55f..048da54a2 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/core/AlitheiaCore.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/core/AlitheiaCore.java
    @@ -54,13 +54,13 @@
     import eu.sqooss.impl.service.tds.TDSServiceImpl;
     import eu.sqooss.impl.service.updater.UpdaterServiceImpl;
     import eu.sqooss.impl.service.webadmin.WebadminServiceImpl;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
     import eu.sqooss.service.admin.AdminService;
     import eu.sqooss.service.cluster.ClusterNodeService;
     import eu.sqooss.service.db.DBService;
     import eu.sqooss.service.fds.FDSService;
     import eu.sqooss.service.logging.LogManager;
    -import eu.sqooss.service.metricactivator.MetricActivator;
    -import eu.sqooss.service.pa.PluginAdmin;
     import eu.sqooss.service.rest.RestService;
     import eu.sqooss.service.scheduler.Scheduler;
     import eu.sqooss.service.tds.TDSService;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/admin/AdminServiceImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/admin/AdminServiceImpl.java
    index bcd0f6556..6d612a41f 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/admin/AdminServiceImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/admin/AdminServiceImpl.java
    @@ -48,8 +48,8 @@
     
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.service.admin.AdminAction;
    -import eu.sqooss.service.admin.AdminService;
     import eu.sqooss.service.admin.AdminAction.AdminActionStatus;
    +import eu.sqooss.service.admin.AdminService;
     import eu.sqooss.service.admin.actions.AddProject;
     import eu.sqooss.service.admin.actions.RunTimeInfo;
     import eu.sqooss.service.admin.actions.UpdateProject;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/db/DBServiceImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/db/DBServiceImpl.java
    index 546b4addd..a0b3e48d8 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/db/DBServiceImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/db/DBServiceImpl.java
    @@ -36,8 +36,8 @@
     
     import java.io.File;
     import java.io.FilenameFilter;
    -import java.net.URL;
     import java.net.URI;
    +import java.net.URL;
     import java.sql.Connection;
     import java.sql.Driver;
     import java.sql.DriverManager;
    @@ -52,14 +52,14 @@
     import java.util.concurrent.atomic.AtomicBoolean;
     
     import org.hibernate.HibernateException;
    -import org.hibernate.LockMode;
    -import org.hibernate.QueryException;
     import org.hibernate.JDBCException;
    +import org.hibernate.LockMode;
     import org.hibernate.Query;
    +import org.hibernate.QueryException;
     import org.hibernate.Session;
     import org.hibernate.SessionFactory;
     import org.hibernate.cfg.AnnotationConfiguration;
    -import org.hibernate.cfg.Configuration;	
    +import org.hibernate.cfg.Configuration;
     import org.osgi.framework.BundleContext;
     
     import eu.sqooss.core.AlitheiaCoreService;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/DiskUtil.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/DiskUtil.java
    index 17f03f1bc..4d081c457 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/DiskUtil.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/DiskUtil.java
    @@ -36,8 +36,6 @@
     import java.io.File;
     import java.io.IOException;
     
    -import eu.sqooss.service.logging.Logger;
    -
     /**
      * This class contains common static functionality for manipulating
      * directory trees on-disk.
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java
    index e28fb7ea3..0f959e143 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java
    @@ -36,16 +36,12 @@
     import java.io.ByteArrayInputStream;
     import java.io.ByteArrayOutputStream;
     import java.io.File;
    -import java.io.FileInputStream;
     import java.io.FileNotFoundException;
     import java.io.InputStream;
     import java.util.Random;
    -import java.util.Set;
     import java.util.concurrent.ConcurrentHashMap;
     import java.util.regex.Pattern;
     
    -import eu.sqooss.service.util.FileUtils;
    -import org.apache.commons.codec.binary.Hex;
     import org.osgi.framework.BundleContext;
     
     import eu.sqooss.core.AlitheiaCore;
    @@ -67,646 +63,608 @@
     import eu.sqooss.service.tds.Revision;
     import eu.sqooss.service.tds.SCMAccessor;
     import eu.sqooss.service.tds.TDSService;
    +import eu.sqooss.service.util.FileUtils;
     
     /** {@inheritDoc} */
     public class FDSServiceImpl implements FDSService, Runnable {
    -    /** The logger for the FDS. */
    -    private Logger logger = null;
    -    /** We use the TDS for raw data access. */
    -    private TDSService tds = null;
    -
    -    /**
    -     * The FDS is configured to place checkouts -- which are the main things
    -     * that the FDS is supposed to manage -- somewhere in the filesystem. This
    -     * is the root of those checkouts; underneath here each project has a
    -     * directory, and then checkouts of that project live under there.
    -     */
    -    private File fdsCheckoutRoot = null;
    -    /**
    -     * Checkouts are done in directories with a random prefix; this is done to
    -     * avoid the suggestion that the checkouts are tied to specific revisions.
    -     * We generate the random prefixes with this random generator.
    -     */
    -    private Random randomCheckout = null;
    -
    -    /**
    -     * Cache checkouts in a live system. The cache will not be re-populated from
    -     * on disk data if the system is shutdown.
    -     */
    -    private ConcurrentHashMap<String, OnDiskCheckout> checkoutCache;
    -
    -    /**
    -     * Number of handles acquired on each cached checkout.
    -     */
    -    private ConcurrentHashMap<OnDiskCheckout, Integer> checkoutHandles;
    -
    -    private BundleContext bc;
    -    
    -    /*
    -     * The following constants influence the formatting of checkout and project
    -     * directory names.
    -     */
    -    /**
    -     * Project IDs are formatted as decimals (with leading zeroes) of this
    -     * length; 8 covers the expected range of IDs.
    -     */
    -    private static final int INT_AS_DECIMAL_LENGTH = 8;
    -    /**
    -     * Each checkout gets a random hex string prefixed to a guaranteed unique
    -     * identifier. The length of the prefix is defined here.
    -     */
    -    private static final int RANDOM_PREFIX_LENGTH = 8;
    -    /**
    -     * States how many hex digits are needed to express an int.
    -     */
    -    private static final int INT_AS_HEX_LENGTH = 8;
    -
    -    public FDSServiceImpl() { }
    -
    -    /**
    -     * The FDS considers its checkout root to be 'private' and will write all
    -     * kinds of stuff in there. The checkouts need to be cleaned up on shutdown
    -     * at the very least, in order to avoid polluting the filesystem with
    -     * orphaned checkout directories.
    -     * 
    -     */
    -    private class CleanupThread extends Thread {
    -
    -        public CleanupThread(String name) {
    -            super(name);
    -        }
    -
    -        public void run() {
    -            System.err.println("Cleaning up " + fdsCheckoutRoot);
    -            logger.info("Cleaning up " + fdsCheckoutRoot);
    -            DiskUtil.rmRf(fdsCheckoutRoot);
    -        }
    -    }
    -
    -    /**
    -     * Create, for a given SCM accessor, an on disk checkout at a given
    -     * revision. This assumes that there is not already a checkout for this
    -     * project in this revision, and uses the SCM itself to do the checkout
    -     * somewhere underneath the FDS root.
    -     * 
    -     * @return
    -     */
    -    private OnDiskCheckout createCheckout(SCMAccessor scm, ProjectVersion pv, String path) {
    -        logger.info("Creating new checkout for " + pv);
    -
    -        File projectRoot = new File(fdsCheckoutRoot, pv.getProject().getName());
    -        // It might not exist yet
    -        projectRoot.mkdirs();
    -
    -        // Side effect: throws if the revision is invalid
    -        Revision r = scm.newRevision(pv.getRevisionId());
    -        File checkoutRoot = new File(projectRoot, pv.getRevisionId());
    -
    -        if (checkoutRoot.exists()) {
    -            logger.warn("Checkout root <" + checkoutRoot + "> exists. " +
    -                    "Cleaning up");
    -            FileUtils.deleteRecursive(checkoutRoot);
    -        }
    -        if (!checkoutRoot.mkdirs()) {
    -            logger.warn("Could not create checkout root <" + checkoutRoot
    -                    + ">");
    -            return null;
    -        }
    -
    -        // Now checkoutRoot exists and is a directory.
    -        logger.info("Created checkout root <" + checkoutRoot + ">");
    -        OnDiskCheckoutImpl c = new OnDiskCheckoutImpl(scm, path, pv, checkoutRoot);
    -        return c;
    -    }
    -
    -    /**
    -     * For a project file, return the SCM revision that it refers to.
    -     * 
    -     * @param pf
    -     *            The ProjectFile to look up.
    -     * @return The SCM revision for the project or null if the project file is
    -     *         deleted or otherwise unavailable.
    -     */
    -    private Revision projectFileRevision(ProjectFile pf) {
    -        // Make sure that the file exists in the specified project version
    -        String fileStatus = pf.getState().toString();
    -        if (PathChangeType.valueOf(fileStatus) == PathChangeType.DELETED) {
    -            return null;
    -        }
    -
    -        String projectVersion = pf.getProjectVersion().getRevisionId();
    -        long projectId = pf.getProjectVersion().getProject().getId();
    -        try {
    -            return tds.getAccessor(projectId).getSCMAccessor().newRevision(
    -                    projectVersion);
    -        } catch (InvalidAccessorException e) {
    -            logger.error("Invalid SCM accessor for project "
    -                    + pf.getProjectVersion().getProject().getName() + " "
    -                    + e.getMessage());
    -            return null;
    -        }
    -    }
    -
    -    /**
    -     * Get the File where the given project file will be cached locally by the
    -     * FDS.
    -     * 
    -     * @param pf
    -     *            ProjectFile to look up.
    -     * @param r
    -     *            Revision of the project file; this is a minor optimization, if
    -     *            r is null the revision is retrieved from @p pf anyway.
    -     * @return File for this project file, or null if there is no such file in
    -     *         the given revision.
    -     */
    -    private File projectFileLocal(ProjectFile pf, Revision r) {
    -        Revision pr = null;
    -        if (r == null) {
    -            pr = projectFileRevision(pf);
    -        } else {
    -            pr = r;
    -        }
    -
    -        // Path generation for a "single file checkout"
    -        File checkoutFile = new File(fdsCheckoutRoot
    -                + System.getProperty("file.separator")
    -                + pf.getProjectVersion().getProject().getId()
    -                + System.getProperty("file.separator") + pr.getUniqueId()
    -                + System.getProperty("file.separator") + pf.getFileName());
    -
    -        // TODO: possibly also look in existing checkouts?
    -        return checkoutFile;
    -    }
    -
    -    /**
    -     * For a given project file, return the SCM accessor that can be used to get
    -     * at the file contents.
    -     * 
    -     * @param pf
    -     *            The project file to look up.
    -     * @return The accessor or null on failure.
    -     */
    -    private SCMAccessor projectFileAccessor(ProjectFile pf) {
    -        // Retrieve the project ID
    -        long projectId = pf.getProjectVersion().getProject().getId();
    -
    -        // Get a TDS handle for the selected ProjectFile
    -        try {
    -            return tds.getAccessor(projectId).getSCMAccessor();
    -        } catch (InvalidAccessorException e) {
    -            logger.error("Invalid SCM accessor for project "
    -                    + pf.getProjectVersion().getProject().getName() + " "
    -                    + e.getMessage());
    -            return null;
    -        }
    -    }
    -
    -    /**
    -     * Check whether a checkout can be done
    -     */
    -    private boolean canCheckout(ProjectVersion pv) throws CheckoutException {
    -
    -        long projectId = pv.getProject().getId();
    -
    -        if (!tds.projectExists(projectId)) {
    -            throw new CheckoutException("No such project " + pv.getProject()
    -                    + " to check out.");
    -        }
    -        if (!tds.accessorExists(projectId)) {
    -            throw new CheckoutException("No accessor available for project: "
    -                    + pv.getProject().getName());
    -        }
    -
    -        ProjectAccessor a = tds.getAccessor(projectId);
    -
    -        if (a == null) {
    -            logger.warn("Accessor not available even though it exists.");
    -            throw new CheckoutException("Accessor " + "for project "
    -                    + pv.getProject().getName()
    -                    + " not available even though it exists.");
    -        }
    -
    -        try {
    -            SCMAccessor svn = a.getSCMAccessor();
    -            if (svn == null) {
    -                logger
    -                        .warn("No SCM available for "
    -                                + pv.getProject().getName());
    -                throw new CheckoutException(
    -                        "No SCM accessor available for project "
    -                                + pv.getProject().getName());
    -            }
    -        } catch (InvalidAccessorException e) {
    -            throw new CheckoutException("Invalid SCM accessor for project "
    -                    + pv.getProject().getName() + " " + e.getMessage());
    -        }
    -
    -        return true;
    -    }
    -
    -    // Checkout cache ops
    -    /**
    -     * Atomic get from cache and increment handle count.
    -     */
    -    private synchronized OnDiskCheckout getCheckoutFromCache(ProjectVersion pv) {
    -
    -        if (pv == null || pv.getId() == 0) {
    -            return null;
    -        }
    -
    -        OnDiskCheckout co = checkoutCache.get(cacheKey(pv));
    -
    -        if (co == null)
    -            return null;
    -
    -        checkoutHandles.put(co, checkoutHandles.get(co) + 1);
    -
    -        return co;
    -    }
    -
    -    /**
    -     * Atomic decrement of checkout handle counts.
    -     */
    -    private synchronized void returnCheckout(OnDiskCheckout c) {
    -        if (c == null)
    -            return;
    -
    -        if (checkoutHandles.contains(c))
    -            checkoutHandles.put(c, checkoutHandles.get(c) - 1);
    -    }
    -
    -    /**
    -     * Atomic add checkout to both cache tables
    -     */
    -    private synchronized void addCheckoutToCache(ProjectVersion pv,
    -            OnDiskCheckout c) {
    -        checkoutCache.putIfAbsent(cacheKey(pv), c);
    -        checkoutHandles.putIfAbsent(c, 0);
    -    }
    -
    -    /**
    -     * Atomically check whether the checkout can be updated
    -     */
    -    private synchronized boolean isUpdatable(OnDiskCheckout c) {
    -        if (checkoutHandles.get(c) > 0)
    -            return false;
    -        return true;
    -    }
    -
    -    /**
    -     * Check if there is a checkout for a specific project version.
    -     */
    -    private synchronized boolean cacheContains(ProjectVersion pv) {
    -        if (checkoutCache.keySet().contains(cacheKey(pv)))
    -            return true;
    -        return false;
    -    }
    -
    -    // Cache key ops
    -    /**
    -     * Munge together info from the provided project version to create a unique
    -     * key for indexing cache checkouts.
    -     */
    -    private String cacheKey(ProjectVersion pv) {
    -        return pv.getProject().getName() + "|" + pv.getId() + "|"
    -                + pv.getRevisionId();
    -    }
    -
    -    /**
    -     * Retrieve the project name part of the provided cache key.
    -     */
    -    private String cacheKeyProject(String key) {
    -        if (key == null || key.length() == 0)
    -            return null;
    -
    -        return key.split("|")[0];
    -    }
    -
    -    /**
    -     * Retrieve from the provided cache key and resolve from the DB the
    -     * ProjectVersion object attached to a checkout.
    -     */
    -    private ProjectVersion cacheKeyProjectVersion(String key) {
    -        if (key == null || key.length() == 0)
    -            return null;
    -
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    -
    -        Long id = Long.parseLong(key.split("|")[1]);
    -        return dbs.findObjectById(ProjectVersion.class, id);
    -    }
    -
    -    /**
    -     * Convert between database and SCM revision representations
    -     */
    -    private static Revision projectVersionToRevision(ProjectVersion pv) {
    -        TDSService tds = AlitheiaCore.getInstance().getTDSService();
    -        SCMAccessor scm = null;
    -
    -        if (tds.accessorExists(pv.getProject().getId())) {
    -            scm = (SCMAccessor) tds.getAccessor(pv.getProject().getId());
    -        } else {
    -            return null;
    -        }
    -
    -        return scm.newRevision(pv.getRevisionId());
    -    }
    -
    -    // ===[ INTERFACE METHODS ]===============================================
    -
    -    /** {@inheritDoc} */
    -    public synchronized File getFile(ProjectFile pf) {
    -        Revision projectRevision = projectFileRevision(pf);
    -        if (projectRevision == null) {
    -            return null;
    -        }
    -
    -        File checkoutFile = projectFileLocal(pf, projectRevision);
    -        if (checkoutFile == null) {
    -            return null;
    -        }
    -
    -        SCMAccessor scm = projectFileAccessor(pf);
    -        if (scm == null) {
    -            return null;
    -        }
    -
    -        try {
    -            // Skip the checkout, in case this ProjectFile is already
    -            // available (i.e. retrieved in a previous checkout)
    -            if (!(checkoutFile.exists() && checkoutFile.length() <= 0)) {
    -                // Create the path to the target file if it doesn't exist
    -                if ((checkoutFile.getParentFile() != null)
    -                        && (!checkoutFile.getParentFile().exists())) {
    -                    checkoutFile.getParentFile().mkdirs();
    -                }
    -                // Try to checkout the target file
    -                scm.getFile(pf.getFileName(), projectRevision, checkoutFile);
    -            }
    -
    -            // Make sure that the target file is accessible
    -            if ((checkoutFile.exists()) && (checkoutFile.isFile())
    -                    && (checkoutFile.canRead())) {
    -                return checkoutFile;
    -            }
    -            // returning null here is fine
    -        } catch (InvalidRepositoryException e) {
    -            logger.error("The repository for " + pf.toString()
    -                    + " is invalid: " + e.getMessage());
    -        } catch (InvalidProjectRevisionException e) {
    -            logger.error("The repository for "
    -                    + pf.getProjectVersion().getProject() + " has no revision "
    -                    + projectRevision + ":" + e.getMessage());
    -        } catch (FileNotFoundException e) {
    -            logger.error("File " + pf.toString() + " not found in the given "
    -                    + "repository: " + e.getMessage());
    -        }
    -        return null;
    -    }
    -
    -    /** {@inheritDoc} */
    -    public InputStream getFileContents(ProjectFile pf) {
    -
    -        Revision projectRevision = projectFileRevision(pf);
    -        if (projectRevision == null) {
    -            return null;
    -        }
    -
    -        SCMAccessor scm = projectFileAccessor(pf);
    -        ByteArrayOutputStream buff = new ByteArrayOutputStream();
    -        try {
    -            scm.getFile(pf.getFileName(), projectRevision, buff);
    -        } catch (InvalidProjectRevisionException e) {
    -            logger.error("The repository for " + pf.toString()
    -                    + " is invalid: " + e.getMessage());
    -        } catch (InvalidRepositoryException e) {
    -            logger.error("The repository for "
    -                    + pf.getProjectVersion().getProject() + " has no revision "
    -                    + projectRevision + ":" + e.getMessage());
    -        } catch (FileNotFoundException e) {
    -            logger.error("File " + pf.toString() + " not found in the given "
    -                    + "repository: " + e.getMessage());
    -        }
    -
    -        ByteArrayInputStream contents = new ByteArrayInputStream(buff
    -                .toByteArray());
    -        return contents;
    -    }
    -
    -    /** {@inheritDoc} */
    -    public InMemoryCheckout getInMemoryCheckout(ProjectVersion pv)
    -            throws CheckoutException {
    -        return getInMemoryCheckout(pv, Pattern.compile(".*"));
    -    }
    -
    -    /** {@inheritDoc} */
    -    public InMemoryCheckout getInMemoryCheckout(ProjectVersion pv,
    -            Pattern pattern) throws CheckoutException {
    -
    -        if (!canCheckout(pv)) {
    -            return null;
    -        }
    -
    -        long projectId = pv.getProject().getId();
    -        SCMAccessor svn = null;
    -        try {
    -            svn = tds.getAccessor(projectId).getSCMAccessor();
    -        } catch (InvalidAccessorException e) {
    -            throw new CheckoutException("Invalid SCM accessor for project "
    -                    + pv.getProject().getName() + ": " + e.getMessage());
    -        }
    -        svn.newRevision(pv.getRevisionId());
    -        logger
    -                .info("Finding available checkout for "
    -                        + pv.getProject().getName() + " revision "
    -                        + pv.getRevisionId());
    -
    -        return new InMemoryCheckoutImpl(pv, pattern);
    -    }
    -
    -    /** {@inheritDoc} */
    -    public OnDiskCheckout getCheckout(ProjectVersion pv, String path)
    -            throws CheckoutException {
    -
    -        if (!canCheckout(pv)) {
    -            return null;
    -        }
    -
    -        long projectId = pv.getProject().getId();
    -        SCMAccessor svn = null;
    -        try {
    -            svn = tds.getAccessor(projectId).getSCMAccessor();
    -        } catch (InvalidAccessorException e) {
    -            throw new CheckoutException("Invalid SCM accessor for project "
    -                    + pv.getProject().getName() + ": " + e.getMessage());
    -        }
    -
    -        svn.newRevision(pv.getRevisionId());
    -
    -        logger.info("Finding available checkout for " + pv);
    -        OnDiskCheckout co = getCheckoutFromCache(pv);
    -
    -        if (co != null) {
    -            // Checkout acquired from cache, return it.
    -            return co;
    -        }
    -
    -        // Search for a cached checkout that could be updated
    -        /*Set<String> c = checkoutCache.keySet();
    -        OnDiskCheckoutImpl updatable = null;
    -
    -        for (String s : c) {
    -            if (cacheKeyProject(s).equals(pv.getProject())) {
    -                ProjectVersion cached = cacheKeyProjectVersion(s);
    -                if (cached.lt(pv)) {
    -                    updatable = (OnDiskCheckoutImpl) getCheckoutFromCache(cached);
    -
    -                    if (checkoutHandles.get(updatable) == 1) {
    -                        try {
    -                            updateCheckout(updatable, pv);
    -                        } finally {
    -                            releaseCheckout(updatable);
    -                        }
    -                        return getCheckoutFromCache(pv);
    -                    }
    -                    releaseCheckout(updatable);
    -                    updatable = null;
    -                }
    -            }
    -        }
    -
    -        // No updatable checkout found, create
    -        synchronized (pv) {
    -            if (!cacheContains(pv))
    -                addCheckoutToCache(pv, createCheckout(svn, pv));
    -        } */
    -        //return getCheckoutFromCache(pv);
    -        return createCheckout(svn, pv, path);
    -    }
    -
    -    /** {@inheritDoc} */
    -    public boolean updateCheckout(OnDiskCheckout c, ProjectVersion pv)
    -            throws CheckoutException {
    -
    -        if (c != null) {
    -            return false;
    -        }
    -
    -        // Check if the checkout is held by another client before updating
    -        if (!isUpdatable(c)) {
    -            return false;
    -        }
    -
    -        OnDiskCheckoutImpl cimpl = (OnDiskCheckoutImpl) c;
    -        cimpl.lock();
    -
    -        // Check if an update took place while waiting for the lock to become
    -        // available
    -        if (cimpl.getProjectVersion().gt(pv)) {
    -            logger.error("Error updating checkout. Checkout has been"
    -                    + " already updated to a newer version");
    -            throw new CheckoutException("Checkout already updated");
    -        } else if (cimpl.getProjectVersion().eq(pv)) {
    -            return true;
    -        }
    -
    -        SCMAccessor scm = (SCMAccessor) AlitheiaCore.getInstance()
    -                .getTDSService().getAccessor(pv.getProject().getId());
    -        try {
    -            scm.updateCheckout(cimpl.getRepositoryPath(),
    -                    projectVersionToRevision(cimpl.getProjectVersion()),
    -                    projectVersionToRevision(pv), cimpl.getRoot());
    -            cimpl.setRevision(pv);
    -
    -        } catch (InvalidProjectRevisionException e) {
    -            throw new CheckoutException("Project version " + pv
    -                    + " does not map to an SCM revision. Error was:"
    -                    + e.getMessage());
    -        } catch (InvalidRepositoryException e) {
    -            throw new CheckoutException("Error accessing repository "
    -                    + scm.toString() + ". Error was:" + e.getMessage());
    -        } catch (FileNotFoundException e) {
    -            throw new CheckoutException("Error accessing checkout root. "
    -                    + e.getMessage());
    -        } finally {
    -            cimpl.unlock();
    -        }
    -        return true;
    -    }
    -
    -    /** {@inheritDoc} */
    -    public void releaseCheckout(OnDiskCheckout c) {
    -
    -        /*
    -        if (c == null) {
    -            logger.warn("Attempting to release null checkout");
    -            return;
    -        }
    -
    -        if (!checkoutCache.contains(c)) {
    -            logger.warn("Attempting to release not cached checkout");
    -            return;
    -        }
    -
    -        returnCheckout(c);
    -        */
    -        File root = null;
    -        try {
    -            root = c.getRoot();
    -            FileUtils.deleteRecursive(root);
    -        } catch (Exception e) {
    -            logger.error("Cannot clean up checkout root: " +
    -                    root.getAbsolutePath());
    -        }
    -        c = null;
    -    }
    -
    -    public Timeline getTimeline(StoredProject c) {
    -        return new TimelineImpl(c);
    -    }
    -
    -    public void run() {
    -
    -    }
    -
    -    @Override
    -    public void setInitParams(BundleContext bc, Logger l) {
    -        logger = l;
    -        this.bc = bc;
    -    }
    -
    -    @Override
    -    public void shutDown() {
    -        String s = bc.getProperty("eu.sqooss.fds.cleanupOnExit");
    -
    -        if (s != null && s.equals("true")) {
    -            CleanupThread t = new CleanupThread("FDS cleanup thread");
    -            Runtime.getRuntime().addShutdownHook(t);
    -            logger.info("Registered shutdown cleanup thread");
    -        }
    -    }
    -
    -    @Override
    -    public boolean startUp() {
    -        tds = AlitheiaCore.getInstance().getTDSService();
    -        logger.info("Got TDS service for FDS.");
    -
    -        checkoutCache = new ConcurrentHashMap<String, OnDiskCheckout>();
    -        checkoutHandles = new ConcurrentHashMap<OnDiskCheckout, Integer>();
    -        // Get the checkout root from the properties file.
    -        String s = bc.getProperty("eu.sqooss.fds.root");
    -        if (s == null) {
    -            logger.info("No eu.sqooss.fds.root set, using default /var/tmp/alitheia");
    -            s = "/var/tmp/alitheia";
    -        } else {
    -            logger.info("FDS root directory " + s);
    -        }
    -        fdsCheckoutRoot = new File(s);
    -        randomCheckout = new Random();
    -
    -        return true;
    -    }
    +	/** The logger for the FDS. */
    +	private Logger logger = null;
    +	/** We use the TDS for raw data access. */
    +	private TDSService tds = null;
    +
    +	/**
    +	 * The FDS is configured to place checkouts -- which are the main things
    +	 * that the FDS is supposed to manage -- somewhere in the filesystem. This
    +	 * is the root of those checkouts; underneath here each project has a
    +	 * directory, and then checkouts of that project live under there.
    +	 */
    +	private File fdsCheckoutRoot = null;
    +	/**
    +	 * Checkouts are done in directories with a random prefix; this is done to
    +	 * avoid the suggestion that the checkouts are tied to specific revisions.
    +	 * We generate the random prefixes with this random generator.
    +	 */
    +	private Random randomCheckout = null;
    +
    +	/**
    +	 * Cache checkouts in a live system. The cache will not be re-populated from
    +	 * on disk data if the system is shutdown.
    +	 */
    +	private ConcurrentHashMap<String, OnDiskCheckout> checkoutCache;
    +
    +	/**
    +	 * Number of handles acquired on each cached checkout.
    +	 */
    +	private ConcurrentHashMap<OnDiskCheckout, Integer> checkoutHandles;
    +
    +	private BundleContext bc;
    +
    +	/*
    +	 * The following constants influence the formatting of checkout and project
    +	 * directory names.
    +	 */
    +	/**
    +	 * Project IDs are formatted as decimals (with leading zeroes) of this
    +	 * length; 8 covers the expected range of IDs.
    +	 */
    +	private static final int INT_AS_DECIMAL_LENGTH = 8;
    +	/**
    +	 * Each checkout gets a random hex string prefixed to a guaranteed unique
    +	 * identifier. The length of the prefix is defined here.
    +	 */
    +	private static final int RANDOM_PREFIX_LENGTH = 8;
    +	/**
    +	 * States how many hex digits are needed to express an int.
    +	 */
    +	private static final int INT_AS_HEX_LENGTH = 8;
    +
    +	public FDSServiceImpl() {
    +	}
    +
    +	/**
    +	 * The FDS considers its checkout root to be 'private' and will write all
    +	 * kinds of stuff in there. The checkouts need to be cleaned up on shutdown
    +	 * at the very least, in order to avoid polluting the filesystem with
    +	 * orphaned checkout directories.
    +	 * 
    +	 */
    +	private class CleanupThread extends Thread {
    +
    +		public CleanupThread(String name) {
    +			super(name);
    +		}
    +
    +		public void run() {
    +			System.err.println("Cleaning up " + fdsCheckoutRoot);
    +			logger.info("Cleaning up " + fdsCheckoutRoot);
    +			DiskUtil.rmRf(fdsCheckoutRoot);
    +		}
    +	}
    +
    +	/**
    +	 * Create, for a given SCM accessor, an on disk checkout at a given
    +	 * revision. This assumes that there is not already a checkout for this
    +	 * project in this revision, and uses the SCM itself to do the checkout
    +	 * somewhere underneath the FDS root.
    +	 * 
    +	 * @return
    +	 */
    +	private OnDiskCheckout createCheckout(SCMAccessor scm, ProjectVersion pv,
    +			String path) {
    +		logger.info("Creating new checkout for " + pv);
    +
    +		File projectRoot = new File(fdsCheckoutRoot, pv.getProject().getName());
    +		// It might not exist yet
    +		projectRoot.mkdirs();
    +
    +		// Side effect: throws if the revision is invalid
    +		Revision r = scm.newRevision(pv.getRevisionId());
    +		File checkoutRoot = new File(projectRoot, pv.getRevisionId());
    +
    +		if (checkoutRoot.exists()) {
    +			logger.warn("Checkout root <" + checkoutRoot + "> exists. "
    +					+ "Cleaning up");
    +			FileUtils.deleteRecursive(checkoutRoot);
    +		}
    +		if (!checkoutRoot.mkdirs()) {
    +			logger.warn("Could not create checkout root <" + checkoutRoot + ">");
    +			return null;
    +		}
    +
    +		// Now checkoutRoot exists and is a directory.
    +		logger.info("Created checkout root <" + checkoutRoot + ">");
    +		OnDiskCheckoutImpl c = new OnDiskCheckoutImpl(scm, path, pv,
    +				checkoutRoot);
    +		return c;
    +	}
    +
    +	/**
    +	 * For a project file, return the SCM revision that it refers to.
    +	 * 
    +	 * @param pf
    +	 *            The ProjectFile to look up.
    +	 * @return The SCM revision for the project or null if the project file is
    +	 *         deleted or otherwise unavailable.
    +	 */
    +	private Revision projectFileRevision(ProjectFile pf) {
    +		// Make sure that the file exists in the specified project version
    +		String fileStatus = pf.getState().toString();
    +		if (PathChangeType.valueOf(fileStatus) == PathChangeType.DELETED) {
    +			return null;
    +		}
    +
    +		String projectVersion = pf.getProjectVersion().getRevisionId();
    +		long projectId = pf.getProjectVersion().getProject().getId();
    +		try {
    +			return tds.getAccessor(projectId).getSCMAccessor()
    +					.newRevision(projectVersion);
    +		} catch (InvalidAccessorException e) {
    +			logger.error("Invalid SCM accessor for project "
    +					+ pf.getProjectVersion().getProject().getName() + " "
    +					+ e.getMessage());
    +			return null;
    +		}
    +	}
    +
    +	/**
    +	 * Get the File where the given project file will be cached locally by the
    +	 * FDS.
    +	 * 
    +	 * @param pf
    +	 *            ProjectFile to look up.
    +	 * @param r
    +	 *            Revision of the project file; this is a minor optimization, if
    +	 *            r is null the revision is retrieved from @p pf anyway.
    +	 * @return File for this project file, or null if there is no such file in
    +	 *         the given revision.
    +	 */
    +	private File projectFileLocal(ProjectFile pf, Revision r) {
    +		Revision pr = null;
    +		if (r == null) {
    +			pr = projectFileRevision(pf);
    +		} else {
    +			pr = r;
    +		}
    +
    +		// Path generation for a "single file checkout"
    +		File checkoutFile = new File(fdsCheckoutRoot
    +				+ System.getProperty("file.separator")
    +				+ pf.getProjectVersion().getProject().getId()
    +				+ System.getProperty("file.separator") + pr.getUniqueId()
    +				+ System.getProperty("file.separator") + pf.getFileName());
    +
    +		// TODO: possibly also look in existing checkouts?
    +		return checkoutFile;
    +	}
    +
    +	/**
    +	 * For a given project file, return the SCM accessor that can be used to get
    +	 * at the file contents.
    +	 * 
    +	 * @param pf
    +	 *            The project file to look up.
    +	 * @return The accessor or null on failure.
    +	 */
    +	private SCMAccessor projectFileAccessor(ProjectFile pf) {
    +		// Retrieve the project ID
    +		long projectId = pf.getProjectVersion().getProject().getId();
    +
    +		// Get a TDS handle for the selected ProjectFile
    +		try {
    +			return tds.getAccessor(projectId).getSCMAccessor();
    +		} catch (InvalidAccessorException e) {
    +			logger.error("Invalid SCM accessor for project "
    +					+ pf.getProjectVersion().getProject().getName() + " "
    +					+ e.getMessage());
    +			return null;
    +		}
    +	}
    +
    +	/**
    +	 * Check whether a checkout can be done
    +	 */
    +	private boolean canCheckout(ProjectVersion pv) throws CheckoutException {
    +
    +		long projectId = pv.getProject().getId();
    +
    +		if (!tds.projectExists(projectId)) {
    +			throw new CheckoutException("No such project " + pv.getProject()
    +					+ " to check out.");
    +		}
    +		if (!tds.accessorExists(projectId)) {
    +			throw new CheckoutException("No accessor available for project: "
    +					+ pv.getProject().getName());
    +		}
    +
    +		ProjectAccessor a = tds.getAccessor(projectId);
    +
    +		if (a == null) {
    +			logger.warn("Accessor not available even though it exists.");
    +			throw new CheckoutException("Accessor " + "for project "
    +					+ pv.getProject().getName()
    +					+ " not available even though it exists.");
    +		}
    +
    +		try {
    +			SCMAccessor svn = a.getSCMAccessor();
    +			if (svn == null) {
    +				logger.warn("No SCM available for " + pv.getProject().getName());
    +				throw new CheckoutException(
    +						"No SCM accessor available for project "
    +								+ pv.getProject().getName());
    +			}
    +		} catch (InvalidAccessorException e) {
    +			throw new CheckoutException("Invalid SCM accessor for project "
    +					+ pv.getProject().getName() + " " + e.getMessage());
    +		}
    +
    +		return true;
    +	}
    +
    +	// Checkout cache ops
    +	/**
    +	 * Atomic get from cache and increment handle count.
    +	 */
    +	private synchronized OnDiskCheckout getCheckoutFromCache(ProjectVersion pv) {
    +
    +		if (pv == null || pv.getId() == 0) {
    +			return null;
    +		}
    +
    +		OnDiskCheckout co = checkoutCache.get(cacheKey(pv));
    +
    +		if (co == null)
    +			return null;
    +
    +		checkoutHandles.put(co, checkoutHandles.get(co) + 1);
    +
    +		return co;
    +	}
    +
    +	/**
    +	 * Atomic decrement of checkout handle counts.
    +	 */
    +	private synchronized void returnCheckout(OnDiskCheckout c) {
    +		if (c == null)
    +			return;
    +
    +		if (checkoutHandles.contains(c))
    +			checkoutHandles.put(c, checkoutHandles.get(c) - 1);
    +	}
    +
    +	/**
    +	 * Atomic add checkout to both cache tables
    +	 */
    +	private synchronized void addCheckoutToCache(ProjectVersion pv,
    +			OnDiskCheckout c) {
    +		checkoutCache.putIfAbsent(cacheKey(pv), c);
    +		checkoutHandles.putIfAbsent(c, 0);
    +	}
    +
    +	/**
    +	 * Atomically check whether the checkout can be updated
    +	 */
    +	private synchronized boolean isUpdatable(OnDiskCheckout c) {
    +		if (checkoutHandles.get(c) > 0)
    +			return false;
    +		return true;
    +	}
    +
    +	/**
    +	 * Check if there is a checkout for a specific project version.
    +	 */
    +	private synchronized boolean cacheContains(ProjectVersion pv) {
    +		if (checkoutCache.keySet().contains(cacheKey(pv)))
    +			return true;
    +		return false;
    +	}
    +
    +	// Cache key ops
    +	/**
    +	 * Munge together info from the provided project version to create a unique
    +	 * key for indexing cache checkouts.
    +	 */
    +	private String cacheKey(ProjectVersion pv) {
    +		return pv.getProject().getName() + "|" + pv.getId() + "|"
    +				+ pv.getRevisionId();
    +	}
    +
    +	/**
    +	 * Retrieve the project name part of the provided cache key.
    +	 */
    +	private String cacheKeyProject(String key) {
    +		if (key == null || key.length() == 0)
    +			return null;
    +
    +		return key.split("|")[0];
    +	}
    +
    +	/**
    +	 * Retrieve from the provided cache key and resolve from the DB the
    +	 * ProjectVersion object attached to a checkout.
    +	 */
    +	private ProjectVersion cacheKeyProjectVersion(String key) {
    +		if (key == null || key.length() == 0)
    +			return null;
    +
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
    +
    +		Long id = Long.parseLong(key.split("|")[1]);
    +		return dbs.findObjectById(ProjectVersion.class, id);
    +	}
    +
    +	/**
    +	 * Convert between database and SCM revision representations
    +	 */
    +	private static Revision projectVersionToRevision(ProjectVersion pv) {
    +		TDSService tds = AlitheiaCore.getInstance().getTDSService();
    +		SCMAccessor scm = null;
    +
    +		if (tds.accessorExists(pv.getProject().getId())) {
    +			scm = (SCMAccessor) tds.getAccessor(pv.getProject().getId());
    +		} else {
    +			return null;
    +		}
    +
    +		return scm.newRevision(pv.getRevisionId());
    +	}
    +
    +	// ===[ INTERFACE METHODS ]===============================================
    +
    +	/** {@inheritDoc} */
    +	public synchronized File getFile(ProjectFile pf) {
    +		Revision projectRevision = projectFileRevision(pf);
    +		if (projectRevision == null) {
    +			return null;
    +		}
    +
    +		File checkoutFile = projectFileLocal(pf, projectRevision);
    +		if (checkoutFile == null) {
    +			return null;
    +		}
    +
    +		SCMAccessor scm = projectFileAccessor(pf);
    +		if (scm == null) {
    +			return null;
    +		}
    +
    +		try {
    +			// Skip the checkout, in case this ProjectFile is already
    +			// available (i.e. retrieved in a previous checkout)
    +			if (!(checkoutFile.exists() && checkoutFile.length() <= 0)) {
    +				// Create the path to the target file if it doesn't exist
    +				if ((checkoutFile.getParentFile() != null)
    +						&& (!checkoutFile.getParentFile().exists())) {
    +					checkoutFile.getParentFile().mkdirs();
    +				}
    +				// Try to checkout the target file
    +				scm.getFile(pf.getFileName(), projectRevision, checkoutFile);
    +			}
    +
    +			// Make sure that the target file is accessible
    +			if ((checkoutFile.exists()) && (checkoutFile.isFile())
    +					&& (checkoutFile.canRead())) {
    +				return checkoutFile;
    +			}
    +			// returning null here is fine
    +		} catch (InvalidRepositoryException e) {
    +			logger.error("The repository for " + pf.toString()
    +					+ " is invalid: " + e.getMessage());
    +		} catch (InvalidProjectRevisionException e) {
    +			logger.error("The repository for "
    +					+ pf.getProjectVersion().getProject() + " has no revision "
    +					+ projectRevision + ":" + e.getMessage());
    +		} catch (FileNotFoundException e) {
    +			logger.error("File " + pf.toString() + " not found in the given "
    +					+ "repository: " + e.getMessage());
    +		}
    +		return null;
    +	}
    +
    +	/** {@inheritDoc} */
    +	public InputStream getFileContents(ProjectFile pf) {
    +
    +		Revision projectRevision = projectFileRevision(pf);
    +		if (projectRevision == null) {
    +			return null;
    +		}
    +
    +		SCMAccessor scm = projectFileAccessor(pf);
    +		ByteArrayOutputStream buff = new ByteArrayOutputStream();
    +		try {
    +			scm.getFile(pf.getFileName(), projectRevision, buff);
    +		} catch (InvalidProjectRevisionException e) {
    +			logger.error("The repository for " + pf.toString()
    +					+ " is invalid: " + e.getMessage());
    +		} catch (InvalidRepositoryException e) {
    +			logger.error("The repository for "
    +					+ pf.getProjectVersion().getProject() + " has no revision "
    +					+ projectRevision + ":" + e.getMessage());
    +		} catch (FileNotFoundException e) {
    +			logger.error("File " + pf.toString() + " not found in the given "
    +					+ "repository: " + e.getMessage());
    +		}
    +
    +		ByteArrayInputStream contents = new ByteArrayInputStream(
    +				buff.toByteArray());
    +		return contents;
    +	}
    +
    +	/** {@inheritDoc} */
    +	public InMemoryCheckout getInMemoryCheckout(ProjectVersion pv)
    +			throws CheckoutException {
    +		return getInMemoryCheckout(pv, Pattern.compile(".*"));
    +	}
    +
    +	private SCMAccessor getSCNAccesor(ProjectVersion pv)
    +			throws CheckoutException {
    +		long projectId = pv.getProject().getId();
    +		SCMAccessor svn = null;
    +		try {
    +			svn = tds.getAccessor(projectId).getSCMAccessor();
    +		} catch (InvalidAccessorException e) {
    +			throw new CheckoutException("Invalid SCM accessor for project "
    +					+ pv.getProject().getName() + ": " + e.getMessage());
    +		}
    +
    +		svn.newRevision(pv.getRevisionId());
    +		return svn;
    +	}
    +
    +	/** {@inheritDoc} */
    +	public InMemoryCheckout getInMemoryCheckout(ProjectVersion pv,
    +			Pattern pattern) throws CheckoutException {
    +
    +		if (!canCheckout(pv)) {
    +			return null;
    +		}
    +
    +		getSCNAccesor(pv);
    +
    +		logger.info("Finding available checkout for "
    +				+ pv.getProject().getName() + " revision " + pv.getRevisionId());
    +
    +		return new InMemoryCheckoutImpl(pv, pattern);
    +	}
    +
    +	/** {@inheritDoc} */
    +	public OnDiskCheckout getCheckout(ProjectVersion pv, String path)
    +			throws CheckoutException {
    +		if (!canCheckout(pv)) {
    +			return null;
    +		}
    +
    +		SCMAccessor svn = getSCNAccesor(pv);
    +
    +		logger.info("Finding available checkout for " + pv);
    +		OnDiskCheckout co = getCheckoutFromCache(pv);
    +
    +		if (co != null) {
    +			// Checkout acquired from cache, return it.
    +			return co;
    +		}
    +
    +		return createCheckout(svn, pv, path);
    +	}
    +
    +	/** {@inheritDoc} */
    +	public boolean updateCheckout(OnDiskCheckout c, ProjectVersion pv)
    +			throws CheckoutException {
    +
    +		if (c != null) {
    +			return false;
    +		}
    +
    +		// Check if the checkout is held by another client before updating
    +		if (!isUpdatable(c)) {
    +			return false;
    +		}
    +
    +		OnDiskCheckoutImpl cimpl = (OnDiskCheckoutImpl) c;
    +		cimpl.lock();
    +
    +		// Check if an update took place while waiting for the lock to become
    +		// available
    +		if (cimpl.getProjectVersion().gt(pv)) {
    +			logger.error("Error updating checkout. Checkout has been"
    +					+ " already updated to a newer version");
    +			throw new CheckoutException("Checkout already updated");
    +		} else if (cimpl.getProjectVersion().eq(pv)) {
    +			return true;
    +		}
    +
    +		SCMAccessor scm = (SCMAccessor) AlitheiaCore.getInstance()
    +				.getTDSService().getAccessor(pv.getProject().getId());
    +		try {
    +			scm.updateCheckout(cimpl.getRepositoryPath(),
    +					projectVersionToRevision(cimpl.getProjectVersion()),
    +					projectVersionToRevision(pv), cimpl.getRoot());
    +			cimpl.setRevision(pv);
    +
    +		} catch (InvalidProjectRevisionException e) {
    +			throw new CheckoutException("Project version " + pv
    +					+ " does not map to an SCM revision. Error was:"
    +					+ e.getMessage());
    +		} catch (InvalidRepositoryException e) {
    +			throw new CheckoutException("Error accessing repository "
    +					+ scm.toString() + ". Error was:" + e.getMessage());
    +		} catch (FileNotFoundException e) {
    +			throw new CheckoutException("Error accessing checkout root. "
    +					+ e.getMessage());
    +		} finally {
    +			cimpl.unlock();
    +		}
    +		return true;
    +	}
    +
    +	/** {@inheritDoc} */
    +	public void releaseCheckout(OnDiskCheckout c) {
    +
    +		/*
    +		 * if (c == null) { logger.warn("Attempting to release null checkout");
    +		 * return; }
    +		 * 
    +		 * if (!checkoutCache.contains(c)) {
    +		 * logger.warn("Attempting to release not cached checkout"); return; }
    +		 * 
    +		 * returnCheckout(c);
    +		 */
    +		File root = null;
    +		try {
    +			root = c.getRoot();
    +			FileUtils.deleteRecursive(root);
    +		} catch (Exception e) {
    +			logger.error("Cannot clean up checkout root: "
    +					+ root.getAbsolutePath());
    +		}
    +		c = null;
    +	}
    +
    +	public Timeline getTimeline(StoredProject c) {
    +		return new TimelineImpl(c);
    +	}
    +
    +	public void run() {
    +
    +	}
    +
    +	@Override
    +	public void setInitParams(BundleContext bc, Logger l) {
    +		logger = l;
    +		this.bc = bc;
    +	}
    +
    +	@Override
    +	public void shutDown() {
    +		String s = bc.getProperty("eu.sqooss.fds.cleanupOnExit");
    +
    +		if (s != null && s.equals("true")) {
    +			CleanupThread t = new CleanupThread("FDS cleanup thread");
    +			Runtime.getRuntime().addShutdownHook(t);
    +			logger.info("Registered shutdown cleanup thread");
    +		}
    +	}
    +
    +	@Override
    +	public boolean startUp() {
    +		tds = AlitheiaCore.getInstance().getTDSService();
    +		logger.info("Got TDS service for FDS.");
    +
    +		checkoutCache = new ConcurrentHashMap<String, OnDiskCheckout>();
    +		checkoutHandles = new ConcurrentHashMap<OnDiskCheckout, Integer>();
    +		// Get the checkout root from the properties file.
    +		String s = bc.getProperty("eu.sqooss.fds.root");
    +		if (s == null) {
    +			logger.info("No eu.sqooss.fds.root set, using default /var/tmp/alitheia");
    +			s = "/var/tmp/alitheia";
    +		} else {
    +			logger.info("FDS root directory " + s);
    +		}
    +		fdsCheckoutRoot = new File(s);
    +		randomCheckout = new Random();
    +
    +		return true;
    +	}
     }
     
    -// vi: ai nosi sw=4 ts=4 expandtab
    -
    +// vi: ai nosi sw=4 ts=4 expandtab
    \ No newline at end of file
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/InMemoryCheckoutImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/InMemoryCheckoutImpl.java
    index 1b72274a0..ee79980fa 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/InMemoryCheckoutImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/InMemoryCheckoutImpl.java
    @@ -36,67 +36,86 @@
     import java.util.List;
     import java.util.regex.Pattern;
     
    +import eu.sqooss.service.db.Directory;
     import eu.sqooss.service.db.ProjectFile;
     import eu.sqooss.service.db.ProjectVersion;
     import eu.sqooss.service.fds.InMemoryCheckout;
     import eu.sqooss.service.fds.InMemoryDirectory;
    +import eu.sqooss.service.util.FileUtils;
     
     /**
    - * An implementation of the InMemoryCheckout interface that uses the 
    - * DB service to retrieve file information for a specific version.
    + * An implementation of the InMemoryCheckout interface that uses the DB service
    + * to retrieve file information for a specific version.
      */
     class InMemoryCheckoutImpl implements InMemoryCheckout {
    -   
    -    private ProjectVersion revision;
    -    private InMemoryDirectory root;
    -    private Pattern pattern;
     
    -    InMemoryCheckoutImpl(ProjectVersion pv) {
    -        revision = pv;
    -        pattern = Pattern.compile(".*");
    -    }
    +	private ProjectVersion revision;
    +	private InMemoryDirectory root;
    +	private Pattern pattern;
     
    -    InMemoryCheckoutImpl(ProjectVersion pv, Pattern p) {
    -        revision = pv;
    -        pattern = p;
    -    }
    +	InMemoryCheckoutImpl(ProjectVersion pv) {
    +		revision = pv;
    +		pattern = Pattern.compile(".*");
    +	}
     
    -    protected void createCheckout() {
    -        root = new InMemoryDirectory(this);
    -        
    -        List<ProjectFile> projectFiles = revision.getFiles();
    -        if (projectFiles != null && projectFiles.size() != 0) {
    -            for (ProjectFile f : projectFiles) {
    -                if (pattern.matcher(f.getFileName()).matches()) {
    -                    if (!f.getIsDirectory()) {
    -                        root.createSubDirectory(f.getDir().getPath()).addFile(f.getName());
    -                    } else {
    -                        root.createSubDirectory(f.getFileName());
    -                    }
    -                }
    -            }
    -        }
    -    }
    +	InMemoryCheckoutImpl(ProjectVersion pv, Pattern p) {
    +		revision = pv;
    +		pattern = p;
    +	}
     
    -    /** {@inheritDoc} */
    -    public InMemoryDirectory getRoot() {
    -        if (root == null) 
    -            createCheckout();
    -        return root;
    -    }
    +	protected void createCheckout() {
    +		root = new InMemoryDirectory();
     
    -    /** {@inheritDoc} */
    -    public ProjectFile getFile(String name) {
    -        if (root == null) 
    -            createCheckout();
    -        return root.getFile(name);
    -    }
    +		List<ProjectFile> projectFiles = revision.getFiles();
    +		if (projectFiles != null && projectFiles.size() != 0) {
    +			for (ProjectFile f : projectFiles) {
    +				if (pattern.matcher(f.getFileName()).matches()) {
    +					if (!f.getIsDirectory()) {
    +						root.createSubDirectory(f.getDir().getPath()).addFile(
    +								f.getName());
    +					} else {
    +						root.createSubDirectory(f.getFileName());
    +					}
    +				}
    +			}
    +		}
    +	}
     
    -    /** {@inheritDoc} */
    -    public ProjectVersion getProjectVersion() {
    -        return revision;
    -    }
    -}
    +	/** {@inheritDoc} */
    +	public InMemoryDirectory getRoot() {
    +		if (root == null)
    +			createCheckout();
    +		return root;
    +	}
    +
    +	/** {@inheritDoc} */
    +	public ProjectFile getFile(String name) {
    +		/* Recursively traverse the directories of the provided file path */
    +		if (name.indexOf('/') != -1) {
    +			String pathName = name.substring(0, name.indexOf('/'));
    +			String fileName = name.substring(name.indexOf('/') + 1);
    +			InMemoryDirectory dir = getRoot().getSubdirectoryByName(pathName);
    +			return dir == null ? null : getFile(fileName);
    +		}
    +
    +		return ProjectFile.findFile(getProjectVersion().getProject().getId(),
    +				FileUtils.basename(name), FileUtils.dirname(name),
    +				getProjectVersion().getRevisionId());
    +	}
     
    -// vi: ai nosi sw=4 ts=4 expandtab
    +	/**
    +	 * Returns the list of files this directory contains.
    +	 */
    +	public List<ProjectFile> getFiles() {
    +		return getProjectVersion().getFiles(
    +				Directory.getDirectory(getRoot().getPath(), false),
    +				ProjectVersion.MASK_FILES);
    +	}
    +
    +	/** {@inheritDoc} */
    +	public ProjectVersion getProjectVersion() {
    +		return revision;
    +	}
    +}
     
    +// vi: ai nosi sw=4 ts=4 expandtab
    \ No newline at end of file
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorImpl.java
    index 4487e5202..27920d542 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorImpl.java
    @@ -33,15 +33,29 @@
     
     package eu.sqooss.impl.service.metricactivator;
     
    -import java.util.*;
    +import java.util.ArrayList;
    +import java.util.Collection;
    +import java.util.Collections;
    +import java.util.Comparator;
    +import java.util.HashMap;
    +import java.util.HashSet;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Random;
    +import java.util.Set;
    +import java.util.SortedSet;
    +import java.util.TreeSet;
     import java.util.concurrent.atomic.AtomicLong;
     
    -import eu.sqooss.service.abstractmetric.InvocationOrder;
     import org.osgi.framework.BundleContext;
     
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.service.abstractmetric.AbstractMetric;
     import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.abstractmetric.InvocationOrder;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
    +import eu.sqooss.service.abstractmetric.PluginInfo;
     import eu.sqooss.service.abstractmetric.SchedulerHints;
     import eu.sqooss.service.cluster.ClusterNodeActionException;
     import eu.sqooss.service.cluster.ClusterNodeService;
    @@ -62,9 +76,6 @@
     import eu.sqooss.service.db.ProjectVersion;
     import eu.sqooss.service.db.StoredProject;
     import eu.sqooss.service.logging.Logger;
    -import eu.sqooss.service.metricactivator.MetricActivator;
    -import eu.sqooss.service.pa.PluginAdmin;
    -import eu.sqooss.service.pa.PluginInfo;
     import eu.sqooss.service.scheduler.Job;
     import eu.sqooss.service.scheduler.Scheduler;
     import eu.sqooss.service.scheduler.SchedulerException;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorJob.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorJob.java
    index 8a8c923b4..8d3625d5d 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorJob.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/metricactivator/MetricActivatorJob.java
    @@ -40,12 +40,12 @@
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.service.abstractmetric.AbstractMetric;
     import eu.sqooss.service.abstractmetric.AlreadyProcessingException;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
     import eu.sqooss.service.abstractmetric.MetricMismatchException;
     import eu.sqooss.service.db.DAObject;
     import eu.sqooss.service.db.DBService;
     import eu.sqooss.service.db.Metric;
     import eu.sqooss.service.logging.Logger;
    -import eu.sqooss.service.metricactivator.MetricActivator;
     import eu.sqooss.service.scheduler.Job;
     
     /**
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/pa/PAServiceImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/pa/PAServiceImpl.java
    index 436496aba..95810c18b 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/pa/PAServiceImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/pa/PAServiceImpl.java
    @@ -50,14 +50,14 @@
     
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
    +import eu.sqooss.service.abstractmetric.PluginInfo;
     import eu.sqooss.service.db.DAObject;
     import eu.sqooss.service.db.DBService;
     import eu.sqooss.service.db.Metric;
     import eu.sqooss.service.db.Plugin;
     import eu.sqooss.service.db.PluginConfiguration;
     import eu.sqooss.service.logging.Logger;
    -import eu.sqooss.service.pa.PluginAdmin;
    -import eu.sqooss.service.pa.PluginInfo;
     import eu.sqooss.service.scheduler.Job;
     import eu.sqooss.service.scheduler.Scheduler;
     import eu.sqooss.service.scheduler.SchedulerException;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/scheduler/WorkerThreadImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/scheduler/WorkerThreadImpl.java
    index c5399e7a4..7a805b6dd 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/scheduler/WorkerThreadImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/scheduler/WorkerThreadImpl.java
    @@ -36,7 +36,6 @@
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.service.logging.Logger;
     import eu.sqooss.service.scheduler.Job;
    -import eu.sqooss.service.scheduler.ResumePoint;
     import eu.sqooss.service.scheduler.Scheduler;
     import eu.sqooss.service.scheduler.SchedulerException;
     import eu.sqooss.service.scheduler.WorkerThread;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/ProjectDataAccessorImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/ProjectDataAccessorImpl.java
    index 7b09f091b..698872cc7 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/ProjectDataAccessorImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/ProjectDataAccessorImpl.java
    @@ -36,10 +36,10 @@
     import java.net.URI;
     
     import eu.sqooss.service.logging.Logger;
    -import eu.sqooss.service.tds.InvalidAccessorException;
    -import eu.sqooss.service.tds.ProjectAccessor;
     import eu.sqooss.service.tds.BTSAccessor;
    +import eu.sqooss.service.tds.InvalidAccessorException;
     import eu.sqooss.service.tds.MailAccessor;
    +import eu.sqooss.service.tds.ProjectAccessor;
     import eu.sqooss.service.tds.SCMAccessor;
     import eu.sqooss.service.util.URIUtills;
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/diff/UnifiedDiffParser.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/diff/UnifiedDiffParser.java
    index a2557b5b9..3f1049e50 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/diff/UnifiedDiffParser.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/tds/diff/UnifiedDiffParser.java
    @@ -48,8 +48,8 @@
     
     import eu.sqooss.service.tds.Diff;
     import eu.sqooss.service.tds.DiffChunk;
    -import eu.sqooss.service.tds.Revision;
     import eu.sqooss.service.tds.DiffChunk.DiffOp;
    +import eu.sqooss.service.tds.Revision;
     import eu.sqooss.service.util.FileUtils;
     
     /**
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/updater/UpdaterServiceImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/updater/UpdaterServiceImpl.java
    index 75148b1fe..6a07d45b5 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/updater/UpdaterServiceImpl.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/updater/UpdaterServiceImpl.java
    @@ -47,10 +47,8 @@
     import java.util.concurrent.ConcurrentMap;
     
     import org.osgi.framework.BundleContext;
    -import org.osgi.framework.ServiceReference;
     
     import eu.sqooss.core.AlitheiaCore;
    -import eu.sqooss.service.cluster.ClusterNodeActionException;
     import eu.sqooss.service.cluster.ClusterNodeService;
     import eu.sqooss.service.db.ClusterNode;
     import eu.sqooss.service.db.DBService;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AbstractView.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AbstractView.java
    index f79c95031..12a7001e7 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AbstractView.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AbstractView.java
    @@ -33,7 +33,6 @@
     
     package eu.sqooss.impl.service.webadmin;
     
    -import java.net.URI;
     import java.util.Enumeration;
     import java.util.Locale;
     import java.util.MissingResourceException;
    @@ -47,12 +46,12 @@
     import org.osgi.framework.ServiceReference;
     
     import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.abstractmetric.MetricActivator;
    +import eu.sqooss.service.abstractmetric.PluginAdmin;
     import eu.sqooss.service.cluster.ClusterNodeService;
     import eu.sqooss.service.db.DBService;
     import eu.sqooss.service.logging.LogManager;
     import eu.sqooss.service.logging.Logger;
    -import eu.sqooss.service.metricactivator.MetricActivator;
    -import eu.sqooss.service.pa.PluginAdmin;
     import eu.sqooss.service.scheduler.Scheduler;
     import eu.sqooss.service.tds.TDSService;
     import eu.sqooss.service.updater.UpdaterService;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AdminServlet.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AdminServlet.java
    index bde9ad0e3..0db11fe37 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AdminServlet.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/AdminServlet.java
    @@ -33,21 +33,10 @@
     
     package eu.sqooss.impl.service.webadmin;
     
    -import eu.sqooss.core.AlitheiaCore;
    -import eu.sqooss.impl.service.webadmin.WebAdminRenderer;
    -import eu.sqooss.service.admin.AdminAction;
    -import eu.sqooss.service.admin.AdminService;
    -import eu.sqooss.service.admin.actions.AddProject;
    -import eu.sqooss.service.db.DBService;
    -import eu.sqooss.service.logging.Logger;
    -import eu.sqooss.service.util.Pair;
    -import eu.sqooss.service.webadmin.WebadminService;
    -
    -import java.io.InputStream;
     import java.io.IOException;
    +import java.io.InputStream;
     import java.io.PrintWriter;
     import java.io.StringWriter;
    -
     import java.util.Hashtable;
     import java.util.Locale;
     
    @@ -57,13 +46,20 @@
     import javax.servlet.http.HttpServletRequest;
     import javax.servlet.http.HttpServletResponse;
     
    -import org.apache.velocity.app.VelocityEngine;
     import org.apache.velocity.Template;
     import org.apache.velocity.VelocityContext;
    -
    +import org.apache.velocity.app.VelocityEngine;
     import org.osgi.framework.BundleContext;
     import org.osgi.framework.BundleException;
    -import org.osgi.framework.ServiceReference;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.admin.AdminAction;
    +import eu.sqooss.service.admin.AdminService;
    +import eu.sqooss.service.admin.actions.AddProject;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.util.Pair;
    +import eu.sqooss.service.webadmin.WebadminService;
     
     public class AdminServlet extends HttpServlet {
         private static final long serialVersionUID = 1L;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/PluginsView.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/PluginsView.java
    index 9a582edb4..740dbd786 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/PluginsView.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/PluginsView.java
    @@ -43,12 +43,12 @@
     import org.osgi.framework.BundleContext;
     import org.osgi.framework.Constants;
     
    +import eu.sqooss.service.abstractmetric.PluginInfo;
    +import eu.sqooss.service.abstractmetric.PluginInfo.ConfigurationType;
     import eu.sqooss.service.db.DAObject;
     import eu.sqooss.service.db.Metric;
     import eu.sqooss.service.db.Plugin;
     import eu.sqooss.service.db.PluginConfiguration;
    -import eu.sqooss.service.pa.PluginInfo;
    -import eu.sqooss.service.pa.PluginInfo.ConfigurationType;
     import eu.sqooss.service.util.StringUtils;
     
     public class PluginsView extends AbstractView{
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/ProjectsView.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/ProjectsView.java
    index 2975b36d6..7fb4f971c 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/ProjectsView.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/ProjectsView.java
    @@ -34,8 +34,6 @@
     package eu.sqooss.impl.service.webadmin;
     
     import java.util.Collection;
    -import java.util.HashMap;
    -import java.util.List;
     import java.util.Set;
     
     import javax.servlet.http.HttpServletRequest;
    @@ -45,6 +43,7 @@
     
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
    +import eu.sqooss.service.abstractmetric.PluginInfo;
     import eu.sqooss.service.admin.AdminAction;
     import eu.sqooss.service.admin.AdminService;
     import eu.sqooss.service.admin.actions.AddProject;
    @@ -54,138 +53,142 @@
     import eu.sqooss.service.db.MailMessage;
     import eu.sqooss.service.db.ProjectVersion;
     import eu.sqooss.service.db.StoredProject;
    -import eu.sqooss.service.pa.PluginInfo;
     import eu.sqooss.service.scheduler.SchedulerException;
     import eu.sqooss.service.updater.Updater;
     import eu.sqooss.service.updater.UpdaterService.UpdaterStage;
     
     public class ProjectsView extends AbstractView {
    -    // Script for submitting this page
    -    private static String SUBMIT = "document.projects.submit();";
    -
    -    // Action parameter's values
    -    private static String ACT_REQ_ADD_PROJECT   = "reqAddProject";
    -    private static String ACT_CON_ADD_PROJECT   = "conAddProject";
    -    private static String ACT_REQ_REM_PROJECT   = "reqRemProject";
    -    private static String ACT_CON_REM_PROJECT   = "conRemProject";
    -    private static String ACT_REQ_SHOW_PROJECT  = "conShowProject";
    -    private static String ACT_CON_UPD_ALL       = "conUpdateAll";
    -    private static String ACT_CON_UPD           = "conUpdate";
    -    private static String ACT_CON_UPD_ALL_NODE  = "conUpdateAllOnNode";
    -
    -    // Servlet parameters
    -    private static String REQ_PAR_ACTION        = "reqAction";
    -    private static String REQ_PAR_PROJECT_ID    = "projectId";
    -    private static String REQ_PAR_PRJ_NAME      = "projectName";
    -    private static String REQ_PAR_PRJ_WEB       = "projectHomepage";
    -    private static String REQ_PAR_PRJ_CONT      = "projectContact";
    -    private static String REQ_PAR_PRJ_BUG       = "projectBL";
    -    private static String REQ_PAR_PRJ_MAIL      = "projectML";
    -    private static String REQ_PAR_PRJ_CODE      = "projectSCM";
    -    private static String REQ_PAR_SYNC_PLUGIN   = "reqParSyncPlugin";
    -    private static String REQ_PAR_UPD           = "reqUpd";
    -    
    -    /**
    -     * Instantiates a new projects view.
    -     *
    -     * @param bundlecontext the <code>BundleContext</code> object
    -     * @param vc the <code>VelocityContext</code> object
    -     */
    -    public ProjectsView(BundleContext bundlecontext, VelocityContext vc) {
    -        super(bundlecontext, vc);
    -    }
    -
    -    /**
    -     * Renders the various project's views.
    -     *
    -     * @param req the servlet's request object
    -     *
    -     * @return The HTML presentation of the generated view.
    -     */
    -    public static String render(HttpServletRequest req) {
    -        // Stores the assembled HTML content
    -        StringBuilder b = new StringBuilder("\n");
    -        // Stores the accumulated error messages
    -        StringBuilder e = new StringBuilder();
    -        // Indentation spacer
    -        int in = 6;
    -
    -        // Initialize the resource bundles with the request's locale
    -        initResources(req.getLocale());
    -
    -        // Request values
    -        String reqValAction        = "";
    -        Long   reqValProjectId     = null;
    -
    -        // Selected project
    -        StoredProject selProject = null;
    -
    -        // ===============================================================
    -        // Parse the servlet's request object
    -        // ===============================================================
    -        if (req != null) {
    -            // DEBUG: Dump the servlet's request parameter
    -            if (DEBUG) {
    -                b.append(debugRequest(req));
    -            }
    -
    -            // Retrieve the selected editor's action (if any)
    -            reqValAction = req.getParameter(REQ_PAR_ACTION);
    -            
    -            // Retrieve the selected project's DAO (if any)
    -            reqValProjectId = fromString(req.getParameter(REQ_PAR_PROJECT_ID));
    -            if (reqValProjectId != null) {
    -                selProject = sobjDB.findObjectById(
    -                        StoredProject.class, reqValProjectId);
    -            }
    -            
    -            if (reqValAction == null) {
    -                reqValAction = "";
    -            } else if (reqValAction.equals(ACT_CON_ADD_PROJECT)) {
    -            	selProject = addProject(e, req, in);
    -            } else if (reqValAction.equals(ACT_CON_REM_PROJECT)) {
    -            	selProject = removeProject(e, selProject, in);
    -            } else if (reqValAction.equals(ACT_CON_UPD)) {
    -            	triggerUpdate(e, selProject, in, req.getParameter(REQ_PAR_UPD));
    -            } else if (reqValAction.equals(ACT_CON_UPD_ALL)) {
    -            	triggerAllUpdate(e, selProject, in);
    -            } else if (reqValAction.equals(ACT_CON_UPD_ALL_NODE)) {
    -            	triggerAllUpdateNode(e, selProject, in);
    -            } else {
    -            	// Retrieve the selected plug-in's hash-code
    -        		String reqValSyncPlugin = req.getParameter(REQ_PAR_SYNC_PLUGIN);
    -        		syncPlugin(e, selProject, reqValSyncPlugin);
    -            }
    -        }
    -        createFrom(b, e, selProject, reqValAction , in);
    -        return b.toString();
    -    }
    -  
    -    private static StoredProject addProject(StringBuilder e, HttpServletRequest r, int indent) {
    -        AdminService as = AlitheiaCore.getInstance().getAdminService();
    -    	AdminAction aa = as.create(AddProject.MNEMONIC);
    -    	aa.addArg("scm", r.getParameter(REQ_PAR_PRJ_CODE));
    -    	aa.addArg("name", r.getParameter(REQ_PAR_PRJ_NAME));
    -    	aa.addArg("bts", r.getParameter(REQ_PAR_PRJ_BUG));
    -    	aa.addArg("mail", r.getParameter(REQ_PAR_PRJ_MAIL));
    -    	aa.addArg("web", r.getParameter(REQ_PAR_PRJ_WEB));
    -    	as.execute(aa);
    -    	
    -    	if (aa.hasErrors()) {
    -            vc.put("RESULTS", aa.errors());
    -            return null;
    -    	} else { 
    -            vc.put("RESULTS", aa.results());
    -            return StoredProject.getProjectByName(r.getParameter(REQ_PAR_PRJ_NAME));
    -    	}
    -    }
    -    
    -    // ---------------------------------------------------------------
    -    // Remove project
    -    // ---------------------------------------------------------------
    -    private static StoredProject removeProject(StringBuilder e, 
    -    		StoredProject selProject, int indent) {
    -    	if (selProject != null) {
    +	// Script for submitting this page
    +	private static String SUBMIT = "document.projects.submit();";
    +
    +	// Action parameter's values
    +	private static String ACT_REQ_ADD_PROJECT = "reqAddProject";
    +	private static String ACT_CON_ADD_PROJECT = "conAddProject";
    +	private static String ACT_REQ_REM_PROJECT = "reqRemProject";
    +	private static String ACT_CON_REM_PROJECT = "conRemProject";
    +	private static String ACT_REQ_SHOW_PROJECT = "conShowProject";
    +	private static String ACT_CON_UPD_ALL = "conUpdateAll";
    +	private static String ACT_CON_UPD = "conUpdate";
    +	private static String ACT_CON_UPD_ALL_NODE = "conUpdateAllOnNode";
    +
    +	// Servlet parameters
    +	private static String REQ_PAR_ACTION = "reqAction";
    +	private static String REQ_PAR_PROJECT_ID = "projectId";
    +	private static String REQ_PAR_PRJ_NAME = "projectName";
    +	private static String REQ_PAR_PRJ_WEB = "projectHomepage";
    +	private static String REQ_PAR_PRJ_CONT = "projectContact";
    +	private static String REQ_PAR_PRJ_BUG = "projectBL";
    +	private static String REQ_PAR_PRJ_MAIL = "projectML";
    +	private static String REQ_PAR_PRJ_CODE = "projectSCM";
    +	private static String REQ_PAR_SYNC_PLUGIN = "reqParSyncPlugin";
    +	private static String REQ_PAR_UPD = "reqUpd";
    +
    +	/**
    +	 * Instantiates a new projects view.
    +	 *
    +	 * @param bundlecontext
    +	 *            the <code>BundleContext</code> object
    +	 * @param vc
    +	 *            the <code>VelocityContext</code> object
    +	 */
    +	public ProjectsView(BundleContext bundlecontext, VelocityContext vc) {
    +		super(bundlecontext, vc);
    +	}
    +
    +	/**
    +	 * Renders the various project's views.
    +	 *
    +	 * @param req
    +	 *            the servlet's request object
    +	 *
    +	 * @return The HTML presentation of the generated view.
    +	 */
    +	public static String render(HttpServletRequest req) {
    +		// Stores the assembled HTML content
    +		StringBuilder b = new StringBuilder("\n");
    +		// Stores the accumulated error messages
    +		StringBuilder e = new StringBuilder();
    +		// Indentation spacer
    +		int in = 6;
    +
    +		// Initialize the resource bundles with the request's locale
    +		initResources(req.getLocale());
    +
    +		// Request values
    +		String reqValAction = "";
    +		Long reqValProjectId = null;
    +
    +		// Selected project
    +		StoredProject selProject = null;
    +
    +		// ===============================================================
    +		// Parse the servlet's request object
    +		// ===============================================================
    +		if (req != null) {
    +			// DEBUG: Dump the servlet's request parameter
    +			if (DEBUG) {
    +				b.append(debugRequest(req));
    +			}
    +
    +			// Retrieve the selected editor's action (if any)
    +			reqValAction = req.getParameter(REQ_PAR_ACTION);
    +
    +			// Retrieve the selected project's DAO (if any)
    +			reqValProjectId = fromString(req.getParameter(REQ_PAR_PROJECT_ID));
    +			if (reqValProjectId != null) {
    +				selProject = sobjDB.findObjectById(StoredProject.class,
    +						reqValProjectId);
    +			}
    +
    +			if (reqValAction == null) {
    +				reqValAction = "";
    +			} else if (reqValAction.equals(ACT_CON_ADD_PROJECT)) {
    +				selProject = addProject(e, req, in);
    +			} else if (reqValAction.equals(ACT_CON_REM_PROJECT)) {
    +				selProject = removeProject(e, selProject, in);
    +			} else if (reqValAction.equals(ACT_CON_UPD)) {
    +				triggerUpdate(e, selProject, in, req.getParameter(REQ_PAR_UPD));
    +			} else if (reqValAction.equals(ACT_CON_UPD_ALL)) {
    +				triggerAllUpdate(e, selProject, in);
    +			} else if (reqValAction.equals(ACT_CON_UPD_ALL_NODE)) {
    +				triggerAllUpdateNode(e, selProject, in);
    +			} else {
    +				// Retrieve the selected plug-in's hash-code
    +				String reqValSyncPlugin = req.getParameter(REQ_PAR_SYNC_PLUGIN);
    +				syncPlugin(e, selProject, reqValSyncPlugin);
    +			}
    +		}
    +		createFrom(b, e, selProject, reqValAction, in);
    +		return b.toString();
    +	}
    +
    +	private static StoredProject addProject(StringBuilder e,
    +			HttpServletRequest r, int indent) {
    +		AdminService as = AlitheiaCore.getInstance().getAdminService();
    +		AdminAction aa = as.create(AddProject.MNEMONIC);
    +		aa.addArg("scm", r.getParameter(REQ_PAR_PRJ_CODE));
    +		aa.addArg("name", r.getParameter(REQ_PAR_PRJ_NAME));
    +		aa.addArg("bts", r.getParameter(REQ_PAR_PRJ_BUG));
    +		aa.addArg("mail", r.getParameter(REQ_PAR_PRJ_MAIL));
    +		aa.addArg("web", r.getParameter(REQ_PAR_PRJ_WEB));
    +		as.execute(aa);
    +
    +		if (aa.hasErrors()) {
    +			vc.put("RESULTS", aa.errors());
    +			return null;
    +		} else {
    +			vc.put("RESULTS", aa.results());
    +			return StoredProject.getProjectByName(r
    +					.getParameter(REQ_PAR_PRJ_NAME));
    +		}
    +	}
    +
    +	// ---------------------------------------------------------------
    +	// Remove project
    +	// ---------------------------------------------------------------
    +	private static StoredProject removeProject(StringBuilder e,
    +			StoredProject selProject, int indent) {
    +		if (selProject != null) {
     			// Deleting large projects in the foreground is
     			// very slow
     			ProjectDeleteJob pdj = new ProjectDeleteJob(sobjCore, selProject);
    @@ -198,8 +201,8 @@ private static StoredProject removeProject(StringBuilder e,
     		} else {
     			e.append(sp(indent) + getErr("e0034") + "<br/>\n");
     		}
    -    	return selProject;
    -    }
    +		return selProject;
    +	}
     
     	// ---------------------------------------------------------------
     	// Trigger an update
    @@ -213,10 +216,10 @@ private static void triggerUpdate(StringBuilder e,
     		as.execute(aa);
     
     		if (aa.hasErrors()) {
    -            vc.put("RESULTS", aa.errors());
    -        } else { 
    -            vc.put("RESULTS", aa.results());
    -        }
    +			vc.put("RESULTS", aa.errors());
    +		} else {
    +			vc.put("RESULTS", aa.results());
    +		}
     	}
     
     	// ---------------------------------------------------------------
    @@ -224,34 +227,35 @@ private static void triggerUpdate(StringBuilder e,
     	// ---------------------------------------------------------------
     	private static void triggerAllUpdate(StringBuilder e,
     			StoredProject selProject, int indent) {
    -	    AdminService as = AlitheiaCore.getInstance().getAdminService();
    -        AdminAction aa = as.create(UpdateProject.MNEMONIC);
    -        aa.addArg("project", selProject.getId());
    -        as.execute(aa);
    -
    -        if (aa.hasErrors()) {
    -            vc.put("RESULTS", aa.errors());
    -        } else { 
    -            vc.put("RESULTS", aa.results());
    -        }
    +		AdminService as = AlitheiaCore.getInstance().getAdminService();
    +		AdminAction aa = as.create(UpdateProject.MNEMONIC);
    +		aa.addArg("project", selProject.getId());
    +		as.execute(aa);
    +
    +		if (aa.hasErrors()) {
    +			vc.put("RESULTS", aa.errors());
    +		} else {
    +			vc.put("RESULTS", aa.results());
    +		}
     	}
    -	
    +
     	// ---------------------------------------------------------------
     	// Trigger update on all resources on all projects of a node
     	// ---------------------------------------------------------------
    -    private static void triggerAllUpdateNode(StringBuilder e,
    +	private static void triggerAllUpdateNode(StringBuilder e,
     			StoredProject selProject, int in) {
     		Set<StoredProject> projectList = ClusterNode.thisNode().getProjects();
    -		
    +
     		for (StoredProject project : projectList) {
     			triggerAllUpdate(e, project, in);
     		}
     	}
    -	
    +
     	// ---------------------------------------------------------------
     	// Trigger synchronize on the selected plug-in for that project
     	// ---------------------------------------------------------------
    -    private static void syncPlugin(StringBuilder e, StoredProject selProject, String reqValSyncPlugin) {
    +	private static void syncPlugin(StringBuilder e, StoredProject selProject,
    +			String reqValSyncPlugin) {
     		if ((reqValSyncPlugin != null) && (selProject != null)) {
     			PluginInfo pInfo = sobjPA.getPluginInfo(reqValSyncPlugin);
     			if (pInfo != null) {
    @@ -263,414 +267,391 @@ private static void syncPlugin(StringBuilder e, StoredProject selProject, String
     				}
     			}
     		}
    -    }
    -    
    -    private static void createFrom(StringBuilder b, StringBuilder e, 
    -    		StoredProject selProject, String reqValAction, int in) {
    -
    -        // ===============================================================
    -        // Create the form
    -        // ===============================================================
    -        b.append(sp(in) + "<form id=\"projects\""
    -                + " name=\"projects\""
    -                + " method=\"post\""
    -                + " action=\"/projects\">\n");
    -
    -        // ===============================================================
    -        // Display the accumulated error messages (if any)
    -        // ===============================================================
    -        b.append(errorFieldset(e, ++in));
    -
    -        // Get the complete list of projects stored in the SQO-OSS framework
    -        Set<StoredProject> projects = ClusterNode.thisNode().getProjects();
    -        Collection<PluginInfo> metrics = sobjPA.listPlugins();
    -
    -        // ===================================================================
    -        // "Show project info" view
    -        // ===================================================================
    -        if ((reqValAction.equals(ACT_REQ_SHOW_PROJECT))
    -                && (selProject != null)) {
    -            // Create the field-set
    -            b.append(sp(in++) + "<fieldset>\n");
    -            b.append(sp(in) + "<legend>"
    -                    + "Project information"
    -                    + "</legend>\n");
    -            b.append(sp(in++) + "<table class=\"borderless\">\n");
    -            // Create the input fields
    -            b.append(normalInfoRow(
    -                    "Project name", selProject.getName(), in));
    -            b.append(normalInfoRow(
    -                    "Homepage", selProject.getWebsiteUrl(), in));
    -            b.append(normalInfoRow(
    -                    "Contact e-mail", selProject.getContactUrl(), in));
    -            b.append(normalInfoRow(
    -                    "Bug database", selProject.getBtsUrl(), in));
    -            b.append(normalInfoRow(
    -                    "Mailing list", selProject.getMailUrl(), in));
    -            b.append(normalInfoRow(
    -                    "Source code", selProject.getScmUrl(), in));
    -
    -            //------------------------------------------------------------
    -            // Tool-bar
    -            //------------------------------------------------------------
    -            b.append(sp(in++) + "<tr>\n");
    -            b.append(sp(in++)
    -                    + "<td colspan=\"2\" class=\"borderless\">\n");
    -            // Back button
    -            b.append(sp(in) + "<input type=\"button\""
    -                    + " class=\"install\""
    -                    + " style=\"width: 100px;\""
    -                    + " value=\"" + getLbl("btn_back") + "\""
    -                    + " onclick=\"javascript:"
    -                    + SUBMIT + "\">\n");
    -            b.append(sp(--in) + "</td>\n");
    -            b.append(sp(--in) + "</tr>\n");
    -            b.append(sp(--in) + "</table>\n");
    -            b.append(sp(--in) + "</fieldset>\n");
    -        }
    -        // ===================================================================
    -        // "Add project" editor
    -        // ===================================================================
    -        else if (reqValAction.equals(ACT_REQ_ADD_PROJECT)) {
    -            // Create the field-set
    -            b.append(sp(in++) + "<table class=\"borderless\" width='100%'>\n");
    -            // Create the input fields
    -            b.append(normalInputRow(
    -                    "Project name", REQ_PAR_PRJ_NAME, "", in));
    -            b.append(normalInputRow(
    -                    "Homepage", REQ_PAR_PRJ_WEB, "", in));
    -            b.append(normalInputRow(
    -                    "Contact e-mail", REQ_PAR_PRJ_CONT, "", in));
    -            b.append(normalInputRow(
    -                    "Bug database", REQ_PAR_PRJ_BUG, "", in));
    -            b.append(normalInputRow(
    -                    "Mailing list", REQ_PAR_PRJ_MAIL, "", in));
    -            b.append(normalInputRow(
    -                    "Source code", REQ_PAR_PRJ_CODE, "", in));
    -
    -            //------------------------------------------------------------
    -            // Tool-bar
    -            //------------------------------------------------------------
    -            b.append(sp(in++) + "<tr>\n");
    -            b.append(sp(in++)
    -                    + "<td colspan=\"2\" class=\"borderless\">\n");
    -            // Apply button
    -            b.append(sp(in) + "<input type=\"button\""
    -                    + " class=\"install\""
    -                    + " style=\"width: 100px;\""
    -                    + " value=\"" + getLbl("project_add") + "\""
    -                    + " onclick=\"javascript:"
    -                    + "document.getElementById('"
    -                    + REQ_PAR_ACTION + "').value='"
    -                    + ACT_CON_ADD_PROJECT + "';"
    -                    + SUBMIT + "\">\n");
    -            // Cancel button
    -            b.append(sp(in) + "<input type=\"button\""
    -                    + " class=\"install\""
    -                    + " style=\"width: 100px;\""
    -                    + " value=\"" + getLbl("cancel") + "\""
    -                    + " onclick=\"javascript:"
    -                    + SUBMIT + "\">\n");
    -            b.append(sp(--in) + "</td>\n");
    -            b.append(sp(--in) + "</tr>\n");
    -            b.append(sp(--in) + "</table>\n");
    -        }
    -        // ===================================================================
    -        // "Delete project" confirmation view
    -        // ===================================================================
    -        else if ((reqValAction.equals(ACT_REQ_REM_PROJECT))
    -                && (selProject != null)) {
    -            b.append(sp(in++) + "<fieldset>\n");
    -            b.append(sp(in) + "<legend>" + getLbl("l0059")
    -                    + ": " + selProject.getName()
    -                    + "</legend>\n");
    -            b.append(sp(in++) + "<table class=\"borderless\">");
    -            // Confirmation message
    -            b.append(sp(in++) + "<tr>\n");
    -            b.append(sp(in) + "<td class=\"borderless\">"
    -                    + "<b>" + getMsg("delete_project") + "</b>"
    -                    + "</td>\n");
    -
    -            b.append(sp(--in) + "</tr>\n");
    -            //------------------------------------------------------------
    -            // Tool-bar
    -            //------------------------------------------------------------
    -            b.append(sp(in++) + "<tr>\n");
    -            b.append(sp(in++)
    -                    + "<td class=\"borderless\">\n");
    -            // Confirm button
    -            b.append(sp(in) + "<input type=\"button\""
    -                    + " class=\"install\""
    -                    + " style=\"width: 100px;\""
    -                    + " value=\"" + getLbl("l0006") + "\""
    -                    + " onclick=\"javascript:"
    -                    + "document.getElementById('"
    -                    + REQ_PAR_ACTION + "').value='"
    -                    + ACT_CON_REM_PROJECT + "';"
    -                    + SUBMIT + "\">\n");
    -            // Cancel button
    -            b.append(sp(in) + "<input type=\"button\""
    -                    + " class=\"install\""
    -                    + " style=\"width: 100px;\""
    -                    + " value=\"" + getLbl("l0004") + "\""
    -                    + " onclick=\"javascript:"
    -                    + SUBMIT + "\">\n");
    -            b.append(sp(--in) + "</td>\n");
    -            b.append(sp(--in) + "</tr>\n");
    -            b.append(sp(--in) + "</table>");
    -            b.append(sp(in) + "</fieldset>\n");
    -        }
    -        // ===================================================================
    -        // Projects list view
    -        // ===================================================================
    -        else {
    -            addHeaderRow(b,in);
    -
    -            if (projects.isEmpty()) {
    -                b.append(sp(in++) + "<tr>\n");
    -                b.append(sp(in) + "<td colspan=\"6\" class=\"noattr\">\n"
    -                        + getMsg("no_projects")
    -                        + "</td>\n");
    -                b.append(sp(--in) + "</tr>\n");
    -            }
    -            else {
    -                //------------------------------------------------------------
    -                // Create the content rows
    -                //------------------------------------------------------------
    -                b.append(sp(in++) + "<tbody>\n");
    -                for (StoredProject nextPrj : projects) {
    -                    boolean selected = false;
    -                    if ((selProject != null)
    -                            && (selProject.getId() == nextPrj.getId())) {
    -                        selected = true;
    -                    }
    -                    b.append(sp(in++) + "<tr class=\""
    -                            + ((selected) ? "selected" : "edit") + "\""
    -                            + " onclick=\"javascript:"
    -                            + "document.getElementById('"
    -                            + REQ_PAR_PROJECT_ID + "').value='"
    -                            + ((selected) ? "" : nextPrj.getId())
    -                            + "';"
    -                            + SUBMIT + "\">\n");
    -                    // Project Id
    -                    b.append(sp(in) + "<td class=\"trans\">"
    -                            + nextPrj.getId()
    -                            + "</td>\n");
    -                    // Project name
    -                    b.append(sp(in) + "<td class=\"trans\">"
    -                            + ((selected)
    -                                    ? "<input type=\"button\""
    -                                        + " class=\"install\""
    -                                        + " style=\"width: 100px;\""
    -                                        + " value=\""
    -                                        + getLbl("btn_info")
    -                                        + "\""
    -                                        + " onclick=\"javascript:"
    -                                        + "document.getElementById('"
    -                                        + REQ_PAR_ACTION + "').value='" 
    -                                        + ACT_REQ_SHOW_PROJECT + "';"
    -                                        + SUBMIT + "\">"
    -                                    : "<img src=\"/edit.png\""
    -                                        + " alt=\"[Edit]\"/>")
    -                            + "&nbsp;"
    -                            + nextPrj.getName()
    -                            + "</td>\n");
    -                    // Last project version
    -                    String lastVersion = getLbl("l0051");
    -                    ProjectVersion v = ProjectVersion.getLastProjectVersion(nextPrj);
    -                    if (v != null) {
    -                        lastVersion = String.valueOf(v.getSequence()) + "(" + v.getRevisionId() + ")";
    -                    }
    -                    b.append(sp(in) + "<td class=\"trans\">"
    -                            + lastVersion
    -                            + "</td>\n");
    -                    // Date of the last known email
    -                    MailMessage mm = MailMessage.getLatestMailMessage(nextPrj);
    -                    b.append(sp(in) + "<td class=\"trans\">"
    -                            + ((mm == null)?getLbl("l0051"):mm.getSendDate())
    -                            + "</td>\n");
    -                    // ID of the last known bug entry
    -                    Bug bug = Bug.getLastUpdate(nextPrj);
    -                    b.append(sp(in) + "<td class=\"trans\">"
    -                            + ((bug == null)?getLbl("l0051"):bug.getBugID())
    -                            + "</td>\n");
    -                    // Evaluation state
    -                    String evalState = getLbl("project_not_evaluated");
    -                    if (nextPrj.isEvaluated()) {
    -                    	evalState = getLbl("project_is_evaluated");
    -                    }
    -                    b.append(sp(in) + "<td class=\"trans\">"
    -                            + evalState
    -                            + "</td>\n");
    -                    
    -                    // Cluster node
    -                    String nodename = null;
    -                    if (null != nextPrj.getClusternode()) {
    -                        nodename = nextPrj.getClusternode().getName();
    -                    } else {
    -                        nodename = "(local)";
    -                    }
    -                    b.append(sp(in) + "<td class=\"trans\">" + nodename + "</td>\n");
    -                    b.append(sp(--in) + "</tr>\n");
    -                    if ((selected) && (metrics.isEmpty() == false)) {
    -                        showLastAppliedVersion(nextPrj, metrics, b);
    -                    }
    -                }
    -            }
    -            //----------------------------------------------------------------
    -            // Tool-bar
    -            //----------------------------------------------------------------
    -            addToolBar(selProject,b,in);
    -
    -            //----------------------------------------------------------------
    -            // Close the table
    -            //----------------------------------------------------------------
    -            b.append(sp(--in) + "</tbody>\n");
    -            b.append(sp(--in) + "</table>\n");
    -            b.append(sp(--in) + "</fieldset>\n");
    -        }
    -
    -        // ===============================================================
    -        // INPUT FIELDS
    -        // ===============================================================
    -        addHiddenFields(selProject,b,in);
    -
    -        // ===============================================================
    -        // Close the form
    -        // ===============================================================
    -        b.append(sp(--in) + "</form>\n");
    -    }
    -
    -
    -    private static void addHiddenFields(StoredProject selProject,
    -            StringBuilder b,
    -            long in) {
    -        // "Action type" input field
    -        b.append(sp(in) + "<input type='hidden' id='" + REQ_PAR_ACTION + 
    -                "' name='" + REQ_PAR_ACTION + "' value=''>\n");
    -        // "Project Id" input field
    -        b.append(sp(in) + "<input type='hidden' id='" + REQ_PAR_PROJECT_ID +
    -                "' name='" + REQ_PAR_PROJECT_ID +
    -                "' value='" + ((selProject != null) ? selProject.getId() : "") +
    -                "'>\n");
    -        // "Plug-in hashcode" input field
    -        b.append(sp(in) + "<input type='hidden' id='" + REQ_PAR_SYNC_PLUGIN +
    -                "' name='" + REQ_PAR_SYNC_PLUGIN + 
    -                "' value=''>\n");
    -    }
    -    
    -    private static void addToolBar(StoredProject selProject,
    -            StringBuilder b,
    -            long in) {
    -        b.append(sp(in++) + "<tr class=\"subhead\">\n");
    -        b.append(sp(in++) + "<td>View</td><td colspan=\"6\">\n");
    -        // Refresh button
    -        b.append(sp(in) + "<input type=\"button\"" + " class=\"install\"" + " style=\"width: 100px;\"" + " value=\"" + getLbl("l0008") + "\"" + " onclick=\"javascript:" + "window.location='/projects" + ((selProject != null)
    -                ? "?" + REQ_PAR_PROJECT_ID + "=" + selProject.getId()
    -                : "") + "';\"" + ">");
    -        b.append("</td></tr><tr class=\"subhead\"><td>Manage</td><td colspan='6'>\n");
    -        // Add project button
    -        b.append(sp(in) + "<input type=\"button\"" + " class=\"install\"" + " style=\"width: 100px;\"" + " value=\"" + getLbl("add_project") + "\"" + " onclick=\"javascript:" + "document.getElementById('" + REQ_PAR_ACTION + "').value='" + ACT_REQ_ADD_PROJECT + "';" + SUBMIT + "\">\n");
    -        // Remove project button
    -        b.append(sp(in) + "<input type=\"button\"" + " class=\"install\"" + " style=\"width: 100px;\"" + " value=\"" + getLbl("l0059") + "\"" + " onclick=\"javascript:" + "document.getElementById('" + REQ_PAR_ACTION + "').value='" + ACT_REQ_REM_PROJECT + "';" + SUBMIT + "\"" + ((selProject != null) ? "" : " disabled") + ">");
    -        b.append("</td></tr><tr class='subhead'><td>Update</td><td colspan='4'>\n");
    -        
    -        if (selProject != null) {
    -            b.append(sp(in) + "<select name=\"" + REQ_PAR_UPD + "\" id=\"" + REQ_PAR_UPD + "\" " + ((selProject != null) ? "" : " disabled=\"disabled\"") + ">\n");
    -            b.append(sp(in) + "<optgroup label=\"Import Stage\">");
    -            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.IMPORT)) {
    -                b.append("<option value=\"").append(u.mnem()).append("\">").append(u.descr()).append("</option>");
    -            }
    -            b.append(sp(in) + "</optgroup>");
    -            b.append(sp(in) + "<optgroup label=\"Parse Stage\">");
    -            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.PARSE)) {
    -                b.append("<option value=\"").append(u.mnem()).append("\">").append(u.descr()).append("</option>");
    -            }
    -            b.append(sp(in) + "</optgroup>");
    -            b.append(sp(in) + "<optgroup label=\"Inference Stage\">");
    -            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.INFERENCE)) {
    -                b.append("<option value=\"").append(u.mnem()).append("\">").append(u.descr()).append("</option>");
    -            }
    -            b.append(sp(in) + "</optgroup>");
    -            b.append(sp(in) + "<optgroup label=\"Default Stage\">");
    -            for (Updater u : sobjUpdater.getUpdaters(selProject, UpdaterStage.DEFAULT)) {
    -                b.append("<option value=\"").append(u.mnem()).append("\">").append(u.descr()).append("</option>");
    -            }
    -            b.append(sp(in) + "</optgroup>");
    -            b.append(sp(in) + "</select>");
    -        }
    -
    -        // Trigger updater
    -        b.append(sp(in) + "<input type=\"button\" class=\"install\" value=\"Run Updater\" onclick=\"javascript:document.getElementById('" + REQ_PAR_ACTION + "').value='" + ACT_CON_UPD + "';" + SUBMIT + "\"" + ((selProject != null)? "" : " disabled") + ">\n");
    -        // Trigger all updates
    -        b.append(sp(in) + "<input type=\"button\"" + " class=\"install\"" + " value=\"Run All Updaters\" onclick=\"javascript:document.getElementById('" + REQ_PAR_ACTION + "').value='" + ACT_CON_UPD_ALL + "';" + SUBMIT + "\"" + (((selProject != null))
    -                ? "" : " disabled") + ">\n");
    -        b.append(sp(--in) + "</td>\n");
    -        b.append(sp(--in) + "<td colspan=\"2\" align=\"right\">\n");
    -     // Trigger updates on host
    -        b.append(sp(in) + "<input type=\"button\"" + " class=\"install\" value=\"Update all on "+ sobjClusterNode.getClusterNodeName() +"\"" + " onclick=\"javascript:" + "document.getElementById('" + REQ_PAR_ACTION + "').value='" + ACT_CON_UPD_ALL_NODE + "';" + SUBMIT + "\">\n");
    -        b.append(sp(--in) + "</td>\n");
    -        b.append(sp(--in) + "</tr>\n");
    -    }
    -    
    -    private static void showLastAppliedVersion(
    -            StoredProject project,
    -            Collection<PluginInfo> metrics,
    -            StringBuilder b) {
    -        for(PluginInfo m : metrics) {
    -            if (m.installed) {
    -                b.append("<tr>\n");
    -                b.append(sp(1) + "<td colspan=\"7\""
    -                        + " class=\"noattr\">\n"
    -                        + "<input type=\"button\""
    -                        + " class=\"install\""
    -                        + " style=\"width: 100px;\""
    -                        + " value=\"Synchronise\""
    -                        + " onclick=\"javascript:"
    -                        + "document.getElementById('"
    -                        + REQ_PAR_SYNC_PLUGIN + "').value='"
    -                        + m.getHashcode() + "';"
    -                        + SUBMIT + "\""
    -                        + ">"
    -                        + "&nbsp;"
    -                        + m.getPluginName()
    -                        + "</td>\n");
    -                b.append("</tr>\n");
    -            }
    -        }
    -    }
    -
    -    private static void addHeaderRow(StringBuilder b, long in) {
    -        //----------------------------------------------------------------
    -        // Create the header row
    -        //----------------------------------------------------------------
    -        b.append(sp(in++) + "<table>\n");
    -        b.append(sp(in++) + "<thead>\n");
    -        b.append(sp(in++) + "<tr class=\"head\">\n");
    -        b.append(sp(in) + "<td class='head'  style='width: 10%;'>"
    -                + getLbl("l0066")
    -                + "</td>\n");
    -        b.append(sp(in) + "<td class='head' style='width: 35%;'>"
    -                + getLbl("l0067")
    -                + "</td>\n");
    -        b.append(sp(in) + "<td class='head' style='width: 15%;'>"
    -                + getLbl("l0068")
    -                + "</td>\n");
    -        b.append(sp(in) + "<td class='head' style='width: 15%;'>"
    -                + getLbl("l0069")
    -                + "</td>\n");
    -        b.append(sp(in) + "<td class='head' style='width: 15%;'>"
    -                + getLbl("l0070")
    -                + "</td>\n");
    -        b.append(sp(in) + "<td class='head' style='width: 10%;'>"
    -                + getLbl("l0071")
    -                + "</td>\n");
    -        b.append(sp(in) + "<td class='head' style='width: 10%;'>"
    -                + getLbl("l0073")
    -                + "</td>\n");
    -        b.append(sp(--in) + "</tr>\n");
    -        b.append(sp(--in) + "</thead>\n");
    -    }
    +	}
    +
    +	private static void createFrom(StringBuilder b, StringBuilder e,
    +			StoredProject selProject, String reqValAction, int in) {
    +
    +		// ===============================================================
    +		// Create the form
    +		// ===============================================================
    +		b.append(sp(in) + "<form id=\"projects\"" + " name=\"projects\""
    +				+ " method=\"post\"" + " action=\"/projects\">\n");
    +
    +		// ===============================================================
    +		// Display the accumulated error messages (if any)
    +		// ===============================================================
    +		b.append(errorFieldset(e, ++in));
    +
    +		// Get the complete list of projects stored in the SQO-OSS framework
    +		Set<StoredProject> projects = ClusterNode.thisNode().getProjects();
    +		Collection<PluginInfo> metrics = sobjPA.listPlugins();
    +
    +		// ===================================================================
    +		// "Show project info" view
    +		// ===================================================================
    +		if ((reqValAction.equals(ACT_REQ_SHOW_PROJECT)) && (selProject != null)) {
    +			// Create the field-set
    +			b.append(sp(in++) + "<fieldset>\n");
    +			b.append(sp(in) + "<legend>" + "Project information"
    +					+ "</legend>\n");
    +			b.append(sp(in++) + "<table class=\"borderless\">\n");
    +			// Create the input fields
    +			b.append(normalInfoRow("Project name", selProject.getName(), in));
    +			b.append(normalInfoRow("Homepage", selProject.getWebsiteUrl(), in));
    +			b.append(normalInfoRow("Contact e-mail",
    +					selProject.getContactUrl(), in));
    +			b.append(normalInfoRow("Bug database", selProject.getBtsUrl(), in));
    +			b.append(normalInfoRow("Mailing list", selProject.getMailUrl(), in));
    +			b.append(normalInfoRow("Source code", selProject.getScmUrl(), in));
    +
    +			// ------------------------------------------------------------
    +			// Tool-bar
    +			// ------------------------------------------------------------
    +			b.append(sp(in++) + "<tr>\n");
    +			b.append(sp(in++) + "<td colspan=\"2\" class=\"borderless\">\n");
    +			// Back button
    +			b.append(sp(in) + "<input type=\"button\"" + " class=\"install\""
    +					+ " style=\"width: 100px;\"" + " value=\""
    +					+ getLbl("btn_back") + "\"" + " onclick=\"javascript:"
    +					+ SUBMIT + "\">\n");
    +			b.append(sp(--in) + "</td>\n");
    +			b.append(sp(--in) + "</tr>\n");
    +			b.append(sp(--in) + "</table>\n");
    +			b.append(sp(--in) + "</fieldset>\n");
    +		}
    +		// ===================================================================
    +		// "Add project" editor
    +		// ===================================================================
    +		else if (reqValAction.equals(ACT_REQ_ADD_PROJECT)) {
    +			// Create the field-set
    +			b.append(sp(in++) + "<table class=\"borderless\" width='100%'>\n");
    +			// Create the input fields
    +			b.append(normalInputRow("Project name", REQ_PAR_PRJ_NAME, "", in));
    +			b.append(normalInputRow("Homepage", REQ_PAR_PRJ_WEB, "", in));
    +			b.append(normalInputRow("Contact e-mail", REQ_PAR_PRJ_CONT, "", in));
    +			b.append(normalInputRow("Bug database", REQ_PAR_PRJ_BUG, "", in));
    +			b.append(normalInputRow("Mailing list", REQ_PAR_PRJ_MAIL, "", in));
    +			b.append(normalInputRow("Source code", REQ_PAR_PRJ_CODE, "", in));
    +
    +			// ------------------------------------------------------------
    +			// Tool-bar
    +			// ------------------------------------------------------------
    +			b.append(sp(in++) + "<tr>\n");
    +			b.append(sp(in++) + "<td colspan=\"2\" class=\"borderless\">\n");
    +
    +			// Apply button
    +
    +			in = addButtonSet(b, in, "project_add", ACT_CON_ADD_PROJECT,
    +					"cancel");
    +			b.append("\n");
    +
    +		}
    +		// ===================================================================
    +		// "Delete project" confirmation view
    +		// ===================================================================
    +		else if ((reqValAction.equals(ACT_REQ_REM_PROJECT))
    +				&& (selProject != null)) {
    +			b.append(sp(in++) + "<fieldset>\n");
    +			b.append(sp(in) + "<legend>" + getLbl("l0059") + ": "
    +					+ selProject.getName() + "</legend>\n");
    +			b.append(sp(in++) + "<table class=\"borderless\">");
    +			// Confirmation message
    +			b.append(sp(in++) + "<tr>\n");
    +			b.append(sp(in) + "<td class=\"borderless\">" + "<b>"
    +					+ getMsg("delete_project") + "</b>" + "</td>\n");
    +
    +			b.append(sp(--in) + "</tr>\n");
    +			// ------------------------------------------------------------
    +			// Tool-bar
    +			// ------------------------------------------------------------
    +			b.append(sp(in++) + "<tr>\n");
    +			b.append(sp(in++) + "<td class=\"borderless\">\n");
    +
    +			// Confirm button
    +			in = addButtonSet(b, in, "l0006", ACT_CON_REM_PROJECT, "l0004");
    +			b.append(sp(in) + "</fieldset>\n");
    +		}
    +		// ===================================================================
    +		// Projects list view
    +		// ===================================================================
    +		else {
    +			addHeaderRow(b, in);
    +
    +			if (projects.isEmpty()) {
    +				b.append(sp(in++) + "<tr>\n");
    +				b.append(sp(in) + "<td colspan=\"6\" class=\"noattr\">\n"
    +						+ getMsg("no_projects") + "</td>\n");
    +				b.append(sp(--in) + "</tr>\n");
    +			} else {
    +				// ------------------------------------------------------------
    +				// Create the content rows
    +				// ------------------------------------------------------------
    +				b.append(sp(in++) + "<tbody>\n");
    +				for (StoredProject nextPrj : projects) {
    +					boolean selected = false;
    +					if ((selProject != null)
    +							&& (selProject.getId() == nextPrj.getId())) {
    +						selected = true;
    +					}
    +					b.append(sp(in++) + "<tr class=\""
    +							+ ((selected) ? "selected" : "edit") + "\""
    +							+ " onclick=\"javascript:"
    +							+ "document.getElementById('" + REQ_PAR_PROJECT_ID
    +							+ "').value='"
    +							+ ((selected) ? "" : nextPrj.getId()) + "';"
    +							+ SUBMIT + "\">\n");
    +					// Project Id
    +					b.append(sp(in) + "<td class=\"trans\">" + nextPrj.getId()
    +							+ "</td>\n");
    +					// Project name
    +					b.append(sp(in)
    +							+ "<td class=\"trans\">"
    +							+ ((selected) ? "<input type=\"button\""
    +									+ " class=\"install\""
    +									+ " style=\"width: 100px;\"" + " value=\""
    +									+ getLbl("btn_info") + "\""
    +									+ " onclick=\"javascript:"
    +									+ "document.getElementById('"
    +									+ REQ_PAR_ACTION + "').value='"
    +									+ ACT_REQ_SHOW_PROJECT + "';" + SUBMIT
    +									+ "\">" : "<img src=\"/edit.png\""
    +									+ " alt=\"[Edit]\"/>") + "&nbsp;"
    +							+ nextPrj.getName() + "</td>\n");
    +					// Last project version
    +					String lastVersion = getLbl("l0051");
    +					ProjectVersion v = ProjectVersion
    +							.getLastProjectVersion(nextPrj);
    +					if (v != null) {
    +						lastVersion = String.valueOf(v.getSequence()) + "("
    +								+ v.getRevisionId() + ")";
    +					}
    +					b.append(sp(in) + "<td class=\"trans\">" + lastVersion
    +							+ "</td>\n");
    +					// Date of the last known email
    +					MailMessage mm = MailMessage.getLatestMailMessage(nextPrj);
    +					b.append(sp(in)
    +							+ "<td class=\"trans\">"
    +							+ ((mm == null) ? getLbl("l0051") : mm
    +									.getSendDate()) + "</td>\n");
    +					// ID of the last known bug entry
    +					Bug bug = Bug.getLastUpdate(nextPrj);
    +					b.append(sp(in)
    +							+ "<td class=\"trans\">"
    +							+ ((bug == null) ? getLbl("l0051") : bug.getBugID())
    +							+ "</td>\n");
    +					// Evaluation state
    +					String evalState = getLbl("project_not_evaluated");
    +					if (nextPrj.isEvaluated()) {
    +						evalState = getLbl("project_is_evaluated");
    +					}
    +					b.append(sp(in) + "<td class=\"trans\">" + evalState
    +							+ "</td>\n");
    +
    +					// Cluster node
    +					String nodename = null;
    +					if (null != nextPrj.getClusternode()) {
    +						nodename = nextPrj.getClusternode().getName();
    +					} else {
    +						nodename = "(local)";
    +					}
    +					b.append(sp(in) + "<td class=\"trans\">" + nodename
    +							+ "</td>\n");
    +					b.append(sp(--in) + "</tr>\n");
    +					if ((selected) && (metrics.isEmpty() == false)) {
    +						showLastAppliedVersion(nextPrj, metrics, b);
    +					}
    +				}
    +			}
    +			// ----------------------------------------------------------------
    +			// Tool-bar
    +			// ----------------------------------------------------------------
    +			addToolBar(selProject, b, in);
    +
    +			// ----------------------------------------------------------------
    +			// Close the table
    +			// ----------------------------------------------------------------
    +			b.append(sp(--in) + "</tbody>\n");
    +			b.append(sp(--in) + "</table>\n");
    +			b.append(sp(--in) + "</fieldset>\n");
    +		}
    +
    +		// ===============================================================
    +		// INPUT FIELDS
    +		// ===============================================================
    +		addHiddenFields(selProject, b, in);
    +
    +		// ===============================================================
    +		// Close the form
    +		// ===============================================================
    +		b.append(sp(--in) + "</form>\n");
    +	}
    +
    +	private static int addButtonSet(StringBuilder b, int in, String label1,
    +			String act, String label2) {
    +		b.append(sp(in) + "<input type=\"button\"" + " class=\"install\""
    +				+ " style=\"width: 100px;\"" + " value=\"" + getLbl(label1)
    +				+ "\"" + " onclick=\"javascript:" + "document.getElementById('"
    +				+ REQ_PAR_ACTION + "').value='" + act + "';" + SUBMIT + "\">\n");
    +		// Cancel button
    +		b.append(sp(in) + "<input type=\"button\"" + " class=\"install\""
    +				+ " style=\"width: 100px;\"" + " value=\"" + getLbl(label2)
    +				+ "\"" + " onclick=\"javascript:" + SUBMIT + "\">\n");
    +		b.append(sp(--in) + "</td>\n");
    +		b.append(sp(--in) + "</tr>\n");
    +		b.append(sp(--in) + "</table>");
    +		return in;
    +	}
    +
    +	private static void addHiddenFields(StoredProject selProject,
    +			StringBuilder b, long in) {
    +		// "Action type" input field
    +		b.append(sp(in) + "<input type='hidden' id='" + REQ_PAR_ACTION
    +				+ "' name='" + REQ_PAR_ACTION + "' value=''>\n");
    +		// "Project Id" input field
    +		b.append(sp(in) + "<input type='hidden' id='" + REQ_PAR_PROJECT_ID
    +				+ "' name='" + REQ_PAR_PROJECT_ID + "' value='"
    +				+ ((selProject != null) ? selProject.getId() : "") + "'>\n");
    +		// "Plug-in hashcode" input field
    +		b.append(sp(in) + "<input type='hidden' id='" + REQ_PAR_SYNC_PLUGIN
    +				+ "' name='" + REQ_PAR_SYNC_PLUGIN + "' value=''>\n");
    +	}
    +
    +	private static void addToolBar(StoredProject selProject, StringBuilder b,
    +			long in) {
    +		b.append(sp(in++) + "<tr class=\"subhead\">\n");
    +		b.append(sp(in++) + "<td>View</td><td colspan=\"6\">\n");
    +		// Refresh button
    +		b.append(sp(in)
    +				+ "<input type=\"button\""
    +				+ " class=\"install\""
    +				+ " style=\"width: 100px;\""
    +				+ " value=\""
    +				+ getLbl("l0008")
    +				+ "\""
    +				+ " onclick=\"javascript:"
    +				+ "window.location='/projects"
    +				+ ((selProject != null) ? "?" + REQ_PAR_PROJECT_ID + "="
    +						+ selProject.getId() : "") + "';\"" + ">");
    +		b.append("</td></tr><tr class=\"subhead\"><td>Manage</td><td colspan='6'>\n");
    +		// Add project button
    +		b.append(sp(in) + "<input type=\"button\"" + " class=\"install\""
    +				+ " style=\"width: 100px;\"" + " value=\""
    +				+ getLbl("add_project") + "\"" + " onclick=\"javascript:"
    +				+ "document.getElementById('" + REQ_PAR_ACTION + "').value='"
    +				+ ACT_REQ_ADD_PROJECT + "';" + SUBMIT + "\">\n");
    +		// Remove project button
    +		b.append(sp(in) + "<input type=\"button\"" + " class=\"install\""
    +				+ " style=\"width: 100px;\"" + " value=\"" + getLbl("l0059")
    +				+ "\"" + " onclick=\"javascript:" + "document.getElementById('"
    +				+ REQ_PAR_ACTION + "').value='" + ACT_REQ_REM_PROJECT + "';"
    +				+ SUBMIT + "\"" + ((selProject != null) ? "" : " disabled")
    +				+ ">");
    +		b.append("</td></tr><tr class='subhead'><td>Update</td><td colspan='4'>\n");
    +
    +		if (selProject != null) {
    +			b.append(sp(in) + "<select name=\"" + REQ_PAR_UPD + "\" id=\""
    +					+ REQ_PAR_UPD + "\" "
    +					+ ((selProject != null) ? "" : " disabled=\"disabled\"")
    +					+ ">\n");
    +			b.append(sp(in) + "<optgroup label=\"Import Stage\">");
    +			for (Updater u : sobjUpdater.getUpdaters(selProject,
    +					UpdaterStage.IMPORT)) {
    +				b.append("<option value=\"").append(u.mnem()).append("\">")
    +						.append(u.descr()).append("</option>");
    +			}
    +			b.append(sp(in) + "</optgroup>");
    +			b.append(sp(in) + "<optgroup label=\"Parse Stage\">");
    +			for (Updater u : sobjUpdater.getUpdaters(selProject,
    +					UpdaterStage.PARSE)) {
    +				b.append("<option value=\"").append(u.mnem()).append("\">")
    +						.append(u.descr()).append("</option>");
    +			}
    +			b.append(sp(in) + "</optgroup>");
    +			b.append(sp(in) + "<optgroup label=\"Inference Stage\">");
    +			for (Updater u : sobjUpdater.getUpdaters(selProject,
    +					UpdaterStage.INFERENCE)) {
    +				b.append("<option value=\"").append(u.mnem()).append("\">")
    +						.append(u.descr()).append("</option>");
    +			}
    +			b.append(sp(in) + "</optgroup>");
    +			b.append(sp(in) + "<optgroup label=\"Default Stage\">");
    +			for (Updater u : sobjUpdater.getUpdaters(selProject,
    +					UpdaterStage.DEFAULT)) {
    +				b.append("<option value=\"").append(u.mnem()).append("\">")
    +						.append(u.descr()).append("</option>");
    +			}
    +			b.append(sp(in) + "</optgroup>");
    +			b.append(sp(in) + "</select>");
    +		}
    +
    +		// Trigger updater
    +		b.append(sp(in)
    +				+ "<input type=\"button\" class=\"install\" value=\"Run Updater\" onclick=\"javascript:document.getElementById('"
    +				+ REQ_PAR_ACTION + "').value='" + ACT_CON_UPD + "';" + SUBMIT
    +				+ "\"" + ((selProject != null) ? "" : " disabled") + ">\n");
    +		// Trigger all updates
    +		b.append(sp(in)
    +				+ "<input type=\"button\""
    +				+ " class=\"install\""
    +				+ " value=\"Run All Updaters\" onclick=\"javascript:document.getElementById('"
    +				+ REQ_PAR_ACTION + "').value='" + ACT_CON_UPD_ALL + "';"
    +				+ SUBMIT + "\"" + (((selProject != null)) ? "" : " disabled")
    +				+ ">\n");
    +		b.append(sp(--in) + "</td>\n");
    +		b.append(sp(--in) + "<td colspan=\"2\" align=\"right\">\n");
    +		// Trigger updates on host
    +		b.append(sp(in) + "<input type=\"button\""
    +				+ " class=\"install\" value=\"Update all on "
    +				+ sobjClusterNode.getClusterNodeName() + "\""
    +				+ " onclick=\"javascript:" + "document.getElementById('"
    +				+ REQ_PAR_ACTION + "').value='" + ACT_CON_UPD_ALL_NODE + "';"
    +				+ SUBMIT + "\">\n");
    +		b.append(sp(--in) + "</td>\n");
    +		b.append(sp(--in) + "</tr>\n");
    +	}
    +
    +	private static void showLastAppliedVersion(StoredProject project,
    +			Collection<PluginInfo> metrics, StringBuilder b) {
    +		for (PluginInfo m : metrics) {
    +			if (m.installed) {
    +				b.append("<tr>\n");
    +				b.append(sp(1) + "<td colspan=\"7\"" + " class=\"noattr\">\n"
    +						+ "<input type=\"button\"" + " class=\"install\""
    +						+ " style=\"width: 100px;\"" + " value=\"Synchronise\""
    +						+ " onclick=\"javascript:"
    +						+ "document.getElementById('" + REQ_PAR_SYNC_PLUGIN
    +						+ "').value='" + m.getHashcode() + "';" + SUBMIT + "\""
    +						+ ">" + "&nbsp;" + m.getPluginName() + "</td>\n");
    +				b.append("</tr>\n");
    +			}
    +		}
    +	}
    +
    +	private static void addHeaderRow(StringBuilder b, long in) {
    +		// ----------------------------------------------------------------
    +		// Create the header row
    +		// ----------------------------------------------------------------
    +		b.append(sp(in++) + "<table>\n");
    +		b.append(sp(in++) + "<thead>\n");
    +		b.append(sp(in++) + "<tr class=\"head\">\n");
    +		b.append(sp(in) + "<td class='head'  style='width: 10%;'>"
    +				+ getLbl("l0066") + "</td>\n");
    +		b.append(sp(in) + "<td class='head' style='width: 35%;'>"
    +				+ getLbl("l0067") + "</td>\n");
    +		b.append(sp(in) + "<td class='head' style='width: 15%;'>"
    +				+ getLbl("l0068") + "</td>\n");
    +		b.append(sp(in) + "<td class='head' style='width: 15%;'>"
    +				+ getLbl("l0069") + "</td>\n");
    +		b.append(sp(in) + "<td class='head' style='width: 15%;'>"
    +				+ getLbl("l0070") + "</td>\n");
    +		b.append(sp(in) + "<td class='head' style='width: 10%;'>"
    +				+ getLbl("l0071") + "</td>\n");
    +		b.append(sp(in) + "<td class='head' style='width: 10%;'>"
    +				+ getLbl("l0073") + "</td>\n");
    +		b.append(sp(--in) + "</tr>\n");
    +		b.append(sp(--in) + "</thead>\n");
    +	}
     }
     
     // vi: ai nosi sw=4 ts=4 expandtab
    diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/WebAdminRenderer.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/WebAdminRenderer.java
    index 9c5a1daea..3d5b4eb75 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/WebAdminRenderer.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/webadmin/WebAdminRenderer.java
    @@ -36,6 +36,7 @@
     import java.util.Date;
     import java.util.HashMap;
     import java.util.List;
    +import java.util.Map;
     
     import org.apache.velocity.VelocityContext;
     import org.osgi.framework.BundleContext;
    @@ -44,224 +45,216 @@
     import eu.sqooss.service.util.StringUtils;
     
     /**
    - * The WebAdminRender class provides functions for rendering content
    - * to be displayed within the WebAdmin interface.
    + * The WebAdminRender class provides functions for rendering content to be
    + * displayed within the WebAdmin interface.
      *
      * @author, Paul J. Adams <paul.adams@siriusit.co.uk>
      * @author, Boryan Yotov <b.yotov@prosyst.com>
      */
    -public class WebAdminRenderer  extends AbstractView {
    -    /**
    -     * Represents the system time at which the WebAdminRender (and
    -     * thus the system) was started. This is required for the system
    -     * uptime display.
    -     */
    -    private static long startTime = new Date().getTime();
    +public class WebAdminRenderer extends AbstractView {
    +	/**
    +	 * Represents the system time at which the WebAdminRender (and thus the
    +	 * system) was started. This is required for the system uptime display.
    +	 */
    +	private static long startTime = new Date().getTime();
     
    -    public WebAdminRenderer(BundleContext bundlecontext, VelocityContext vc) {
    -        super(bundlecontext, vc);
    -    }
    +	public WebAdminRenderer(BundleContext bundlecontext, VelocityContext vc) {
    +		super(bundlecontext, vc);
    +	}
     
    -    /**
    -     * Creates and HTML table displaying the details of all the jobs
    -     * that have failed whilst the system has been up
    -     *
    -     * @return a String representing the HTML table
    -     */
    -    public static String renderJobFailStats() {
    -        StringBuilder result = new StringBuilder();
    -        HashMap<String,Integer> fjobs = sobjSched.getSchedulerStats().getFailedJobTypes();
    -        result.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n");
    -        result.append("\t<thead>\n");
    -        result.append("\t\t<tr>\n");
    -        result.append("\t\t\t<td>Job Type</td>\n");
    -        result.append("\t\t\t<td>Num Jobs Failed</td>\n");
    -        result.append("\t\t</tr>\n");
    -        result.append("\t</thead>\n");
    -        result.append("\t<tbody>\n");
    +	/**
    +	 * Creates and HTML table displaying the details of all the jobs that have
    +	 * failed whilst the system has been up
    +	 *
    +	 * @return a String representing the HTML table
    +	 */
    +	public static String renderJobFailStats() {
    +		HashMap<String, Integer> fjobs = sobjSched.getSchedulerStats()
    +				.getFailedJobTypes();
     
    -        String[] jobfailures = fjobs.keySet().toArray(new String[1]);
    -        for(String key : jobfailures) {
    -            result.append("\t\t<tr>\n\t\t\t<td>");
    -            result.append(key==null ? "No failures" : key);
    -            result.append("</td>\n\t\t\t<td>");
    -            result.append(key==null ? "&nbsp;" : fjobs.get(key));
    -            result.append("\t\t\t</td>\n\t\t</tr>");
    -        }
    -        result.append("\t</tbody>\n");
    -        result.append("</table>");
    -        return result.toString();
    -    }
    +		StringBuilder result = tableHead("Failed");
    +		tableBody(fjobs, result);
    +		return result.toString();
    +	}
     
    -    /**
    -     * Creates and HTML table with information about the jobs that
    -     * failed and the recorded exceptions
    -     * @return
    -     */
    -    public static String renderFailedJobs() {
    -        StringBuilder result = new StringBuilder();
    -        Job[] jobs = sobjSched.getFailedQueue();
    -        result.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n");
    -        result.append("\t<thead>\n");
    -        result.append("\t\t<tr>\n");
    -        result.append("\t\t\t<td>Job Type</td>\n");
    -        result.append("\t\t\t<td>Exception type</td>\n");
    -        result.append("\t\t\t<td>Exception text</td>\n");
    -        result.append("\t\t\t<td>Exception backtrace</td>\n");
    -        result.append("\t\t</tr>\n");
    -        result.append("\t</thead>\n");
    -        result.append("\t<tbody>\n");
    +	/**
    +	 * Creates and HTML table with information about the jobs that failed and
    +	 * the recorded exceptions
    +	 * 
    +	 * @return
    +	 */
    +	public static String renderFailedJobs() {
    +		StringBuilder result = new StringBuilder();
    +		Job[] jobs = sobjSched.getFailedQueue();
    +		result.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n");
    +		result.append("\t<thead>\n");
    +		result.append("\t\t<tr>\n");
    +		result.append("\t\t\t<td>Job Type</td>\n");
    +		result.append("\t\t\t<td>Exception type</td>\n");
    +		result.append("\t\t\t<td>Exception text</td>\n");
    +		result.append("\t\t\t<td>Exception backtrace</td>\n");
    +		result.append("\t\t</tr>\n");
    +		result.append("\t</thead>\n");
    +		result.append("\t<tbody>\n");
     
    -        if ((jobs != null) && (jobs.length > 0)) {
    -            for(Job j: jobs) {
    -                if (j == null) continue;
    -                result.append("\t\t<tr>\n\t\t\t<td>");
    -                if (j.getClass() != null) {
    -                    try {
    -                        //result.append(j.getClass().getPackage().getName());
    -                        //result.append(". " + j.getClass().getSimpleName());
    -			result.append(j.toString());
    -                    }
    -                    catch (NullPointerException ex) {
    -                        result.append("<b>NA<b>");
    -                    }
    -                }
    -                else {
    -                    result.append("<b>NA<b>");
    -                }
    -                result.append("</td>\n\t\t\t<td>");
    -                Exception e = j.getErrorException();
    -                if (e != null) {
    -                    try {
    -                        result.append(e.getClass().getPackage().getName());
    -                        result.append(". " + e.getClass().getSimpleName());
    -                    }
    -                    catch (NullPointerException ex) {
    -                        result.append("<b>NA<b>");
    -                    }
    -                }
    -                else {
    -                    result.append("<b>NA</b>");
    -                }
    -                result.append("</td>\n\t\t\t<td>");
    -                try {
    -                    result.append(e.getMessage());
    -                }
    -                catch (NullPointerException ex) {
    -                    result.append("<b>NA<b>");
    -                }
    -                result.append("</td>\n\t\t\t<td>");
    -                if ((e != null)
    -                        && (e.getStackTrace() != null)) {
    -                    for(StackTraceElement m: e.getStackTrace()) {
    -                        if (m == null) continue;
    -                        result.append(m.getClassName());
    -                        result.append(". ");
    -                        result.append(m.getMethodName());
    -                        result.append("(), (");
    -                        result.append(m.getFileName());
    -                        result.append(":");
    -                        result.append(m.getLineNumber());
    -                        result.append(")<br/>");
    -                    }
    -                }
    -                else {
    -                    result.append("<b>NA</b>");
    -                }
    -                result.append("\t\t\t</td>\n\t\t</tr>");
    -            }
    -        }
    -        else {
    -            result.append ("<tr><td colspan=\"4\">No failed jobs.</td></tr>");
    -        }
    -        result.append("\t</tbody>\n");
    -        result.append("</table>");
    +		if ((jobs != null) && (jobs.length > 0)) {
    +			for (Job j : jobs) {
    +				if (j == null)
    +					continue;
    +				result.append("\t\t<tr>\n\t\t\t<td>");
    +				if (j.getClass() != null) {
    +					try {
    +						// result.append(j.getClass().getPackage().getName());
    +						// result.append(". " + j.getClass().getSimpleName());
    +						result.append(j.toString());
    +					} catch (NullPointerException ex) {
    +						result.append("<b>NA<b>");
    +					}
    +				} else {
    +					result.append("<b>NA<b>");
    +				}
    +				result.append("</td>\n\t\t\t<td>");
    +				Exception e = j.getErrorException();
    +				if (e != null) {
    +					try {
    +						result.append(e.getClass().getPackage().getName());
    +						result.append(". " + e.getClass().getSimpleName());
    +					} catch (NullPointerException ex) {
    +						result.append("<b>NA<b>");
    +					}
    +				} else {
    +					result.append("<b>NA</b>");
    +				}
    +				result.append("</td>\n\t\t\t<td>");
    +				try {
    +					result.append(e.getMessage());
    +				} catch (NullPointerException ex) {
    +					result.append("<b>NA<b>");
    +				}
    +				result.append("</td>\n\t\t\t<td>");
    +				if ((e != null) && (e.getStackTrace() != null)) {
    +					for (StackTraceElement m : e.getStackTrace()) {
    +						if (m == null)
    +							continue;
    +						result.append(m.getClassName());
    +						result.append(". ");
    +						result.append(m.getMethodName());
    +						result.append("(), (");
    +						result.append(m.getFileName());
    +						result.append(":");
    +						result.append(m.getLineNumber());
    +						result.append(")<br/>");
    +					}
    +				} else {
    +					result.append("<b>NA</b>");
    +				}
    +				result.append("\t\t\t</td>\n\t\t</tr>");
    +			}
    +		} else {
    +			result.append("<tr><td colspan=\"4\">No failed jobs.</td></tr>");
    +		}
    +		result.append("\t</tbody>\n");
    +		result.append("</table>");
     
    -        return result.toString();
    -    }
    +		return result.toString();
    +	}
     
    -    /**
    -     * Creates an HTML unordered list displaying the contents of the current system log
    -     *
    -     * @return a String representing the HTML unordered list items
    -     */
    -    public static String renderLogs() {
    -        String[] names = sobjLogManager.getRecentEntries();
    +	/**
    +	 * Creates an HTML unordered list displaying the contents of the current
    +	 * system log
    +	 *
    +	 * @return a String representing the HTML unordered list items
    +	 */
    +	public static String renderLogs() {
    +		String[] names = sobjLogManager.getRecentEntries();
     
    -        if ((names != null) && (names.length > 0)) {
    -            StringBuilder b = new StringBuilder();
    -            for (String s : names) {
    -                b.append("\t\t\t\t\t<li>" + StringUtils.makeXHTMLSafe(s) + "</li>\n");
    -            }
    +		if ((names != null) && (names.length > 0)) {
    +			StringBuilder b = new StringBuilder();
    +			for (String s : names) {
    +				b.append("\t\t\t\t\t<li>" + StringUtils.makeXHTMLSafe(s)
    +						+ "</li>\n");
    +			}
     
    -            return b.toString();
    -        } else {
    -            return "\t\t\t\t\t<li>&lt;none&gt;</li>\n";
    -        }
    -    }
    +			return b.toString();
    +		} else {
    +			return "\t\t\t\t\t<li>&lt;none&gt;</li>\n";
    +		}
    +	}
     
    -    /**
    -     * Returns a string representing the uptime of the Alitheia core
    -     * in dd:hh:mm:ss format
    -     */
    -    public static String getUptime() {
    -        long remainder;
    -        long currentTime = new Date().getTime();
    -        long timeRunning = currentTime - startTime;
    +	/**
    +	 * Returns a string representing the uptime of the Alitheia core in
    +	 * dd:hh:mm:ss format
    +	 */
    +	public static String getUptime() {
    +		long remainder;
    +		long currentTime = new Date().getTime();
    +		long timeRunning = currentTime - startTime;
     
    -        // Get the elapsed time in days, hours, mins, secs
    -        int days = new Long(timeRunning / 86400000).intValue();
    -        remainder = timeRunning % 86400000;
    -        int hours = new Long(remainder / 3600000).intValue();
    -        remainder = remainder % 3600000;
    -        int mins = new Long(remainder / 60000).intValue();
    -        remainder = remainder % 60000;
    -        int secs = new Long(remainder / 1000).intValue();
    +		// Get the elapsed time in days, hours, mins, secs
    +		int days = new Long(timeRunning / 86400000).intValue();
    +		remainder = timeRunning % 86400000;
    +		int hours = new Long(remainder / 3600000).intValue();
    +		remainder = remainder % 3600000;
    +		int mins = new Long(remainder / 60000).intValue();
    +		remainder = remainder % 60000;
    +		int secs = new Long(remainder / 1000).intValue();
     
    -        return String.format("%d:%02d:%02d:%02d", days, hours, mins, secs);
    -    }
    -    
    +		return String.format("%d:%02d:%02d:%02d", days, hours, mins, secs);
    +	}
     
    -    public static String renderJobWaitStats() {
    -        StringBuilder result = new StringBuilder();
    -        HashMap<String,Integer> wjobs = sobjSched.getSchedulerStats().getWaitingJobTypes();
    -        result.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n");
    -        result.append("\t<thead>\n");
    -        result.append("\t\t<tr>\n");
    -        result.append("\t\t\t<td>Job Type</td>\n");
    -        result.append("\t\t\t<td>Num Jobs Waiting</td>\n");
    -        result.append("\t\t</tr>\n");
    -        result.append("\t</thead>\n");
    -        result.append("\t<tbody>\n");
    +	public static String renderJobWaitStats() {
    +		HashMap<String, Integer> wjobs = sobjSched.getSchedulerStats()
    +				.getWaitingJobTypes();
     
    -        String[] jobfailures = wjobs.keySet().toArray(new String[1]);
    -        for(String key : jobfailures) {
    -            result.append("\t\t<tr>\n\t\t\t<td>");
    -            result.append(key==null ? "No failures" : key);
    -            result.append("</td>\n\t\t\t<td>");
    -            result.append(key==null ? "&nbsp;" : wjobs.get(key));
    -            result.append("\t\t\t</td>\n\t\t</tr>");
    -        }
    -        result.append("\t</tbody>\n");
    -        result.append("</table>");
    -        return result.toString();
    -    }
    +		StringBuilder result = tableHead("Waiting");
    +		tableBody(wjobs, result);
     
    -    public static String renderJobRunStats() {
    -        StringBuilder result = new StringBuilder();
    -        List<String> rjobs = sobjSched.getSchedulerStats().getRunJobs();
    -        if (rjobs.size() == 0) {
    -            return "No running jobs";
    -        }
    -        result.append("<ul>\n");
    -        for(String s : rjobs) {
    -            result.append("\t<li>");
    -            result.append(s);
    -            result.append("\t</li>\n");
    -        }
    -        result.append("</ul>\n");
    -        return result.toString();
    -    }
    +		return result.toString();
    +	}
    +
    +	public static StringBuilder tableHead(String type) {
    +		StringBuilder result = new StringBuilder();
    +		result.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n");
    +		result.append("\t<thead>\n");
    +		result.append("\t\t<tr>\n");
    +		result.append("\t\t\t<td>Job Type</td>\n");
    +		result.append("\t\t\t<td>Num Jobs ");
    +		result.append(type);
    +		result.append("</td>\n");
    +		result.append("\t\t</tr>\n");
    +		result.append("\t</thead>\n");
    +		result.append("\t<tbody>\n");
    +		return result;
    +	}
    +
    +	public static void tableBody(Map<String, Integer> map, StringBuilder output) {
    +		String[] jobfailures = map.keySet().toArray(new String[1]);
    +		for (String key : jobfailures) {
    +			output.append("\t\t<tr>\n\t\t\t<td>");
    +			output.append(key == null ? "No failures" : key);
    +			output.append("</td>\n\t\t\t<td>");
    +			output.append(key == null ? "&nbsp;" : map.get(key));
    +			output.append("\t\t\t</td>\n\t\t</tr>");
    +		}
    +		output.append("\t</tbody>\n");
    +		output.append("</table>");
    +	}
    +
    +	public static String renderJobRunStats() {
    +		StringBuilder result = new StringBuilder();
    +		List<String> rjobs = sobjSched.getSchedulerStats().getRunJobs();
    +		if (rjobs.size() == 0) {
    +			return "No running jobs";
    +		}
    +		result.append("<ul>\n");
    +		for (String s : rjobs) {
    +			result.append("\t<li>");
    +			result.append(s);
    +			result.append("\t</li>\n");
    +		}
    +		result.append("</ul>\n");
    +		return result.toString();
    +	}
     }
     
    -//vi: ai nosi sw=4 ts=4 expandtab
    +// vi: ai nosi sw=4 ts=4 expandtab
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AbstractMetric.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AbstractMetric.java
    index 73df1f9fb..f6849aa3d 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AbstractMetric.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AbstractMetric.java
    @@ -65,6 +65,7 @@
     import eu.sqooss.service.db.Metric;
     import eu.sqooss.service.db.MetricMeasurement;
     import eu.sqooss.service.db.MetricType;
    +import eu.sqooss.service.db.MetricType.Type;
     import eu.sqooss.service.db.NameSpaceMeasurement;
     import eu.sqooss.service.db.Plugin;
     import eu.sqooss.service.db.PluginConfiguration;
    @@ -72,12 +73,7 @@
     import eu.sqooss.service.db.ProjectVersionMeasurement;
     import eu.sqooss.service.db.StoredProject;
     import eu.sqooss.service.db.StoredProjectMeasurement;
    -import eu.sqooss.service.db.MetricType.Type;
     import eu.sqooss.service.logging.Logger;
    -import eu.sqooss.service.metricactivator.MetricActivationException;
    -import eu.sqooss.service.metricactivator.MetricActivator;
    -import eu.sqooss.service.pa.PluginAdmin;
    -import eu.sqooss.service.pa.PluginInfo;
     import eu.sqooss.service.scheduler.Job;
     import eu.sqooss.service.util.Pair;
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AlitheiaPlugin.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AlitheiaPlugin.java
    index 9d55e94ab..7fc198986 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AlitheiaPlugin.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/AlitheiaPlugin.java
    @@ -44,7 +44,6 @@
     import eu.sqooss.service.db.MetricType;
     import eu.sqooss.service.db.PluginConfiguration;
     import eu.sqooss.service.db.StoredProject;
    -import eu.sqooss.service.metricactivator.MetricActivationException;
     import eu.sqooss.service.scheduler.Job;
     
     /**
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/metricactivator/MetricActivationException.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/MetricActivationException.java
    similarity index 70%
    rename from alitheia/core/src/main/java/eu/sqooss/service/metricactivator/MetricActivationException.java
    rename to alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/MetricActivationException.java
    index b94024557..5f2d8bb9e 100755
    --- a/alitheia/core/src/main/java/eu/sqooss/service/metricactivator/MetricActivationException.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/MetricActivationException.java
    @@ -1,4 +1,4 @@
    -package eu.sqooss.service.metricactivator;
    +package eu.sqooss.service.abstractmetric;
     
     public class MetricActivationException extends Exception {
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/metricactivator/MetricActivator.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/MetricActivator.java
    similarity index 97%
    rename from alitheia/core/src/main/java/eu/sqooss/service/metricactivator/MetricActivator.java
    rename to alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/MetricActivator.java
    index 9a5bba12d..2e250ccb1 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/metricactivator/MetricActivator.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/MetricActivator.java
    @@ -31,10 +31,9 @@
      *
      */
     
    -package eu.sqooss.service.metricactivator;
    +package eu.sqooss.service.abstractmetric;
     
     import eu.sqooss.core.AlitheiaCoreService;
    -import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
     import eu.sqooss.service.db.DAObject;
     import eu.sqooss.service.db.StoredProject;
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/pa/PluginAdmin.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginAdmin.java
    similarity index 98%
    rename from alitheia/core/src/main/java/eu/sqooss/service/pa/PluginAdmin.java
    rename to alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginAdmin.java
    index 597170e5c..b0f04623c 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/pa/PluginAdmin.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginAdmin.java
    @@ -31,13 +31,12 @@
      *
      */
     
    -package eu.sqooss.service.pa;
    +package eu.sqooss.service.abstractmetric;
     
     import java.util.Collection;
     import java.util.List;
     
     import eu.sqooss.core.AlitheiaCoreService;
    -import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
     import eu.sqooss.service.db.DAObject;
     
     /**
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginAnnotationProcessor.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginAnnotationProcessor.java
    index 0cdd78db4..eb68b9674 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginAnnotationProcessor.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginAnnotationProcessor.java
    @@ -35,7 +35,6 @@
     import java.util.HashSet;
     import java.util.Set;
     
    -import javax.tools.Diagnostic.Kind;
     import javax.annotation.processing.AbstractProcessor;
     import javax.annotation.processing.ProcessingEnvironment;
     import javax.annotation.processing.RoundEnvironment;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/pa/PluginInfo.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginInfo.java
    similarity index 99%
    rename from alitheia/core/src/main/java/eu/sqooss/service/pa/PluginInfo.java
    rename to alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginInfo.java
    index 6ea33d4f5..69ab61540 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/pa/PluginInfo.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/PluginInfo.java
    @@ -31,7 +31,7 @@
      *
      */
     
    -package eu.sqooss.service.pa;
    +package eu.sqooss.service.abstractmetric;
     
     import java.util.HashSet;
     import java.util.Iterator;
    @@ -40,7 +40,6 @@
     import org.osgi.framework.Constants;
     import org.osgi.framework.ServiceReference;
     
    -import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
     import eu.sqooss.service.db.DAObject;
     import eu.sqooss.service.db.DBService;
     import eu.sqooss.service.db.Plugin;
    @@ -380,7 +379,6 @@ else if (type.equals(ConfigurationType.DOUBLE.toString())) {
             newParam.setType(type);
             newParam.setValue(value);
             Plugin p = Plugin.getPluginByHashcode(hashcode);
    -        newParam.setPlugin(p);
             return p.getConfigurations().add(newParam);
     }
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/SchedulerHints.java b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/SchedulerHints.java
    index cb83e8391..6ac844a91 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/SchedulerHints.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/abstractmetric/SchedulerHints.java
    @@ -33,6 +33,13 @@
     
     package eu.sqooss.service.abstractmetric;
     
    +import static eu.sqooss.service.abstractmetric.InvocationOrder.OLDFIRST;
    +import static java.lang.annotation.ElementType.TYPE;
    +import static java.lang.annotation.RetentionPolicy.RUNTIME;
    +
    +import java.lang.annotation.Retention;
    +import java.lang.annotation.Target;
    +
     import eu.sqooss.service.db.Bug;
     import eu.sqooss.service.db.DAObject;
     import eu.sqooss.service.db.EncapsulationUnit;
    @@ -41,18 +48,11 @@
     import eu.sqooss.service.db.MailingList;
     import eu.sqooss.service.db.MailingListThread;
     import eu.sqooss.service.db.NameSpace;
    -import eu.sqooss.service.db.ProjectFile;
     import eu.sqooss.service.db.ProjectDirectory;
    +import eu.sqooss.service.db.ProjectFile;
     import eu.sqooss.service.db.ProjectVersion;
     import eu.sqooss.service.db.StoredProject;
     
    -import java.lang.annotation.Retention;
    -import java.lang.annotation.Target;
    -
    -import static eu.sqooss.service.abstractmetric.InvocationOrder.OLDFIRST;
    -import static java.lang.annotation.ElementType.TYPE;
    -import static java.lang.annotation.RetentionPolicy.RUNTIME;
    -
     @Target({TYPE})
     @Retention(RUNTIME)
     public @interface SchedulerHints {
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/admin/actions/AddProject.java b/alitheia/core/src/main/java/eu/sqooss/service/admin/actions/AddProject.java
    index 16dbe459b..5fe200b9d 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/admin/actions/AddProject.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/admin/actions/AddProject.java
    @@ -10,7 +10,6 @@
     import eu.sqooss.service.admin.AdminActionBase;
     import eu.sqooss.service.db.ClusterNode;
     import eu.sqooss.service.db.ConfigOption;
    -import eu.sqooss.service.db.ConfigurationOption;
     import eu.sqooss.service.db.DBService;
     import eu.sqooss.service.db.StoredProject;
     import eu.sqooss.service.tds.BTSAccessor;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/cluster/ClusterNodeService.java b/alitheia/core/src/main/java/eu/sqooss/service/cluster/ClusterNodeService.java
    index 9519843b7..b68a74b20 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/cluster/ClusterNodeService.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/cluster/ClusterNodeService.java
    @@ -35,8 +35,8 @@
     
     
     import eu.sqooss.core.AlitheiaCoreService;
    -import eu.sqooss.service.db.StoredProject;
     import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.StoredProject;
     
     /**
      * The clusternode service is the gateway in Alitheia to control the clusternode
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/Bug.java b/alitheia/core/src/main/java/eu/sqooss/service/db/Bug.java
    index 78b67dad8..6e876f771 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/Bug.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/Bug.java
    @@ -48,8 +48,8 @@
     import javax.persistence.Id;
     import javax.persistence.JoinColumn;
     import javax.persistence.ManyToOne;
    -import javax.persistence.Table;
     import javax.persistence.OneToMany;
    +import javax.persistence.Table;
     import javax.xml.bind.annotation.XmlElement;
     
     import eu.sqooss.core.AlitheiaCore;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/BugReportMessage.java b/alitheia/core/src/main/java/eu/sqooss/service/db/BugReportMessage.java
    index ead30d314..9ac788503 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/BugReportMessage.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/BugReportMessage.java
    @@ -35,8 +35,8 @@
     
     import java.util.Date;
     
    -import javax.persistence.Column;
     import javax.persistence.CascadeType;
    +import javax.persistence.Column;
     import javax.persistence.Entity;
     import javax.persistence.FetchType;
     import javax.persistence.GeneratedValue;
    @@ -47,8 +47,6 @@
     import javax.persistence.Table;
     import javax.xml.bind.annotation.XmlElement;
     
    -import eu.sqooss.service.db.DAObject;
    -
     /**
      * This class represents the primary data associated with a bug report
      */
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/ClusterNode.java b/alitheia/core/src/main/java/eu/sqooss/service/db/ClusterNode.java
    index 1439add8e..eafb1f0ff 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/ClusterNode.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/ClusterNode.java
    @@ -33,9 +33,9 @@
     
     package eu.sqooss.service.db;
     
    -import java.util.Map;
     import java.util.HashMap;
     import java.util.List;
    +import java.util.Map;
     import java.util.Set;
     
     import javax.persistence.CascadeType;
    @@ -51,7 +51,6 @@
     import javax.xml.bind.annotation.XmlRootElement;
     
     import eu.sqooss.core.AlitheiaCore;
    -import eu.sqooss.service.db.DAObject;
     
     /**
      * A node in a Alitheia Core cluster installation
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/DBService.java b/alitheia/core/src/main/java/eu/sqooss/service/db/DBService.java
    index bb63dcd9b..075f90684 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/DBService.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/DBService.java
    @@ -33,10 +33,6 @@
     
     package eu.sqooss.service.db;
     
    -import eu.sqooss.core.AlitheiaCoreService;
    -import eu.sqooss.service.db.DAObject;
    -import eu.sqooss.service.logging.Logger;
    -
     import java.sql.SQLException;
     import java.util.Collection;
     import java.util.List;
    @@ -44,6 +40,9 @@
     
     import org.hibernate.QueryException;
     
    +import eu.sqooss.core.AlitheiaCoreService;
    +import eu.sqooss.service.logging.Logger;
    +
     
     /**
      * This is the service providing access to the Alitheia Database,
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/Developer.java b/alitheia/core/src/main/java/eu/sqooss/service/db/Developer.java
    index 26f99af02..c93ab9f7c 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/Developer.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/Developer.java
    @@ -36,8 +36,8 @@
     import java.util.HashMap;
     import java.util.HashSet;
     import java.util.List;
    -import java.util.Set;
     import java.util.Map;
    +import java.util.Set;
     
     import javax.persistence.CascadeType;
     import javax.persistence.Column;
    @@ -56,7 +56,6 @@
     import org.apache.commons.codec.digest.DigestUtils;
     
     import eu.sqooss.core.AlitheiaCore;
    -import eu.sqooss.service.db.DAObject;
     
     /**
      * A DAObject representing a developer belonging to a project.
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/Directory.java b/alitheia/core/src/main/java/eu/sqooss/service/db/Directory.java
    index d84e09068..ae17bc3f8 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/Directory.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/Directory.java
    @@ -35,8 +35,8 @@
     
     import java.util.HashMap;
     import java.util.List;
    -import java.util.Set;
     import java.util.Map;
    +import java.util.Set;
     
     import javax.persistence.Column;
     import javax.persistence.Entity;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/Plugin.java b/alitheia/core/src/main/java/eu/sqooss/service/db/Plugin.java
    index a1529a2df..162233a5c 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/Plugin.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/Plugin.java
    @@ -35,7 +35,6 @@
     
     import java.util.Date;
     import java.util.HashMap;
    -import java.util.HashSet;
     import java.util.List;
     import java.util.Set;
     
    @@ -51,172 +50,216 @@
     import eu.sqooss.core.AlitheiaCore;
     
     /**
    - * Instances of this class represent data related to Alitheia Core
    - * plugins, stored in the database
    + * Instances of this class represent data related to Alitheia Core plugins,
    + * stored in the database
      * 
      * @assoc 1 - n PluginConfiguration
      * @assoc 1 - n Metric
      */
     @Entity
    -@Table(name="PLUGIN")
    +@Table(name = "PLUGIN")
     public class Plugin extends DAObject {
    -	
    +
     	@Id
    -	@GeneratedValue(strategy=GenerationType.AUTO)
    -	@Column(name="PLUGIN_ID")
    -	private long id; 
    +	@GeneratedValue(strategy = GenerationType.AUTO)
    +	@Column(name = "PLUGIN_ID")
    +	private long id;
    +
    +	/**
    +	 * the name of the plugin
    +	 */
    +	@Column(name = "NAME")
    +	private String name;
    +
    +	/**
    +	 * A representation of date on which the plugin was installed into the
    +	 * ALitheia Core
    +	 */
    +	@Column(name = "INSTALL_DATE")
    +	private Date installdate;
    +
    +	/**
    +	 * The version number of this plugin
    +	 */
    +	@Column(name = "VERSION")
    +	private String version;
    +
    +	/**
    +	 * A description of the plugin and the metrics provided
    +	 */
    +	@Column(name = "DESCRIPTION")
    +	private String description;
     
     	/**
    -     * the name of the plugin
    -     */
    -	@Column(name="NAME")
    -    private String name; 
    -
    -    /**
    -     * A representation of date on which the plugin was installed into
    -     * the ALitheia Core
    -     */
    -	@Column(name="INSTALL_DATE")
    -    private Date installdate; 
    -    
    -    /**
    -     * The version number of this plugin
    -     */
    -	@Column(name="VERSION")
    -    private String version; 
    -
    -    /**
    -     * A description of the plugin and the metrics provided
    -     */
    -	@Column(name="DESCRIPTION")
    -    private String description; 
    -
    -    /**
    -     * Denotes if the metric is active as well as being installed
    -     */
    -	@Column(name="IS_ACTIVE")
    -    private boolean active;
    -
    -    /**
    -     * A hashcode representing the plugin bundle to ensure a unique
    -     * identifier
    -     */
    -	@Column(name="HASHCODE")
    -    private String hashcode;
    -
    -    /**
    -     * A list of all configuration entries for this plugin
    -     */
    -	@OneToMany(mappedBy="plugin", cascade=CascadeType.ALL, orphanRemoval = true)
    -    private Set<PluginConfiguration> configurations;
    -    
    -    /**
    -     * A list of all supported metrics for this plugin
    -     */
    -	@OneToMany(mappedBy="plugin", cascade=CascadeType.ALL, orphanRemoval = true)
    -    private Set<Metric> supportedMetrics;
    -    
    -    public long getId() {
    +	 * Denotes if the metric is active as well as being installed
    +	 */
    +	@Column(name = "IS_ACTIVE")
    +	private boolean active;
    +
    +	/**
    +	 * A hashcode representing the plugin bundle to ensure a unique identifier
    +	 */
    +	@Column(name = "HASHCODE")
    +	private String hashcode;
    +
    +	/**
    +	 * A list of all configuration entries for this plugin
    +	 */
    +	@OneToMany(mappedBy = "plugin", cascade = CascadeType.ALL, orphanRemoval = true)
    +	private Set<PluginConfiguration> configurations;
    +
    +	/**
    +	 * A list of all supported metrics for this plugin
    +	 */
    +	@OneToMany(mappedBy = "plugin", cascade = CascadeType.ALL, orphanRemoval = true)
    +	private Set<Metric> supportedMetrics;
    +
    +	public long getId() {
     		return id;
     	}
     
     	public void setId(long id) {
     		this.id = id;
     	}
    -    
    -    public String getName() {
    -        return name;
    -    }
    -
    -    public void setName(String name) {
    -        this.name = name;
    -    }
    -
    -    public Date getInstalldate() {
    -        return installdate;
    -    }
    -
    -    public void setInstalldate(Date installdate) {
    -        this.installdate = installdate;
    -    }
    -    
    -    public String getVersion() {
    -        return version;
    -    }
    -
    -    public void setVersion(String version) {
    -        this.version = version;
    -    }
    -
    -    public String getDescription() {
    -        return description;
    -    }
    -
    -    public void setDescription(String description) {
    -        this.description = description;
    -    }
    -
    -    public boolean isActive() {
    -        return active;
    -    }
    -
    -    public void setActive(boolean active) {
    -        this.active = active;
    -    }
    -    
    -    public String getHashcode() {
    -        return hashcode;
    -    }
    -
    -    public void setHashcode(String hashcode) {
    -        this.hashcode = hashcode;
    -    }
    -    
    -    public Set<PluginConfiguration> getConfigurations() {
    -        return configurations;
    -    }
    -
    -    public void setConfigurations(Set<PluginConfiguration> configurations) {
    -        this.configurations = configurations;
    -    }
    -
    -    public Set<Metric> getSupportedMetrics() {
    -        return supportedMetrics;
    -    }
    -
    -    public void setSupportedMetrics(Set<Metric> supportedMetrics) {
    -        this.supportedMetrics = supportedMetrics;
    -    }
    -
    -    public static List<Plugin> getPluginByName(String name) {
    -        DBService db = AlitheiaCore.getInstance().getDBService();
    -        HashMap<String, Object> s = new HashMap<String, Object>();
    -        s.put("name", name);
    -        return db.findObjectsByProperties(Plugin.class, s);
    -    }
    -        
    -    /**
    -     * Get Plugin by hashcode
    -     * 
    -     * @param hashcode
    -     *                The object's hashcode for the plugin class that implements
    -     *                the
    -     *                {@link eu.sqooss.service.abstractmetric.AlitheiaPlugin}
    -     *                interface
    -     * @return A Plugin object if the hashcode was found in the DB; null
    -     *         otherwise
    -     */
    -    public static Plugin getPluginByHashcode(String hashcode) {
    -        DBService db = AlitheiaCore.getInstance().getDBService();
    -        HashMap<String, Object> s = new HashMap<String, Object>();
    -        s.put("hashcode", hashcode);
    -        List<Plugin> l = db.findObjectsByProperties(Plugin.class, s); 
    -        if (!l.isEmpty())
    -            return l.get(0);
    -        
    -        return null;
    -    }
    +
    +	public String getName() {
    +		return name;
    +	}
    +
    +	public void setName(String name) {
    +		this.name = name;
    +	}
    +
    +	public Date getInstalldate() {
    +		return installdate;
    +	}
    +
    +	public void setInstalldate(Date installdate) {
    +		this.installdate = installdate;
    +	}
    +
    +	public String getVersion() {
    +		return version;
    +	}
    +
    +	public void setVersion(String version) {
    +		this.version = version;
    +	}
    +
    +	public String getDescription() {
    +		return description;
    +	}
    +
    +	public void setDescription(String description) {
    +		this.description = description;
    +	}
    +
    +	public boolean isActive() {
    +		return active;
    +	}
    +
    +	public void setActive(boolean active) {
    +		this.active = active;
    +	}
    +
    +	public String getHashcode() {
    +		return hashcode;
    +	}
    +
    +	public void setHashcode(String hashcode) {
    +		this.hashcode = hashcode;
    +	}
    +
    +	public Set<PluginConfiguration> getConfigurations() {
    +		return configurations;
    +	}
    +
    +	public void setConfigurations(Set<PluginConfiguration> configurations) {
    +		this.configurations = configurations;
    +	}
    +
    +	public Set<Metric> getSupportedMetrics() {
    +		return supportedMetrics;
    +	}
    +
    +	public void setSupportedMetrics(Set<Metric> supportedMetrics) {
    +		this.supportedMetrics = supportedMetrics;
    +	}
    +
    +	/**
    +	 * Get a PluginConfiguration entry DAO or null in
    +	 */
    +	public PluginConfiguration getConfigurationEntry(
    +			HashMap<String, Object> names) {
    +		DBService db = AlitheiaCore.getInstance().getDBService();
    +
    +		names.put("plugin", this);
    +
    +		List<PluginConfiguration> l = db.findObjectsByProperties(
    +				PluginConfiguration.class, names);
    +
    +		if (l.isEmpty()) {
    +			return null;
    +		}
    +
    +		return l.get(0);
    +	}
    +
    +	/**
    +	 * Update a configuration entry. If the entry is found and updated
    +	 * successfully true will be returned. If not found or the update fails,
    +	 * false will be returned.
    +	 */
    +	public boolean updConfigurationEntry(HashMap<String, Object> names) {
    +		DBService db = AlitheiaCore.getInstance().getDBService();
    +		PluginConfiguration pc = getConfigurationEntry(names);
    +
    +		if (pc == null) {
    +			return false;
    +		}
    +
    +		HashMap<String, Object> s = new HashMap<String, Object>();
    +
    +		names.put("plugin", this);
    +
    +		List<PluginConfiguration> l = db.findObjectsByProperties(
    +				PluginConfiguration.class, s);
    +
    +		if (l.isEmpty()) {
    +			return false;
    +		}
    +
    +		return true;
    +	}
    +
    +	public static List<Plugin> getPluginByName(String name) {
    +		DBService db = AlitheiaCore.getInstance().getDBService();
    +		HashMap<String, Object> s = new HashMap<String, Object>();
    +		s.put("name", name);
    +		return db.findObjectsByProperties(Plugin.class, s);
    +	}
    +
    +	/**
    +	 * Get Plugin by hashcode
    +	 * 
    +	 * @param hashcode
    +	 *            The object's hashcode for the plugin class that implements the
    +	 *            {@link eu.sqooss.service.abstractmetric.AlitheiaPlugin}
    +	 *            interface
    +	 * @return A Plugin object if the hashcode was found in the DB; null
    +	 *         otherwise
    +	 */
    +	public static Plugin getPluginByHashcode(String hashcode) {
    +		DBService db = AlitheiaCore.getInstance().getDBService();
    +		HashMap<String, Object> s = new HashMap<String, Object>();
    +		s.put("hashcode", hashcode);
    +		List<Plugin> l = db.findObjectsByProperties(Plugin.class, s);
    +		if (!l.isEmpty())
    +			return l.get(0);
    +
    +		return null;
    +	}
     }
     
    -//vi: ai nosi sw=4 ts=4 expandtab
    +// vi: ai nosi sw=4 ts=4 expandtab
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/PluginConfiguration.java b/alitheia/core/src/main/java/eu/sqooss/service/db/PluginConfiguration.java
    index 5456f9885..b4e19416c 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/PluginConfiguration.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/PluginConfiguration.java
    @@ -98,10 +98,6 @@ public void setType(String type) {
             this.type = type;
         }
     
    -    public Plugin getPlugin() {
    -        return plugin;
    -    }
    -
         public void setPlugin(Plugin p) {
             this.plugin = p;
         }
    @@ -122,46 +118,4 @@ public void setMsg(String msg) {
             this.msg = msg;
         }
         
    -    /**
    -     * Get a PluginConfiguration entry DAO or null in 
    -     */
    -    public static PluginConfiguration getConfigurationEntry(Plugin p, HashMap<String, Object> names) {
    -        DBService db = AlitheiaCore.getInstance().getDBService();
    -        
    -        names.put("plugin", p);
    -                
    -        List<PluginConfiguration> l = db.findObjectsByProperties(PluginConfiguration.class, names);
    -        
    -        if(l.isEmpty()) {
    -            return null;
    -        }
    -        
    -        return l.get(0);
    -    }
    -    
    -    /**
    -     * Update a configuration entry. If the entry is found and updated 
    -     * successfully true will be returned. If not found or the update 
    -     * fails, false will be returned.
    -     */
    -    public static boolean updConfigurationEntry(Plugin p, HashMap<String, Object> names) {
    -        DBService db = AlitheiaCore.getInstance().getDBService();
    -        PluginConfiguration pc = getConfigurationEntry(p, names);
    -        
    -        if (pc == null) {
    -            return false;
    -        }
    -        
    -        HashMap<String, Object> s = new HashMap<String, Object>();
    -        
    -        names.put("plugin", p);
    -        
    -        List<PluginConfiguration> l = db.findObjectsByProperties(PluginConfiguration.class, s);
    -        
    -        if (l.isEmpty()) {
    -            return false;
    -        }
    -        
    -        return true;
    -    }
     }
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java b/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java
    index f32cebc48..a599e2a5f 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java
    @@ -33,7 +33,6 @@
     package eu.sqooss.service.db;
     
     import java.util.ArrayList;
    -import java.util.Arrays;
     import java.util.Collections;
     import java.util.Date;
     import java.util.HashMap;
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/StoredProject.java b/alitheia/core/src/main/java/eu/sqooss/service/db/StoredProject.java
    index bb9a794d9..9ca84fdbb 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/StoredProject.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/StoredProject.java
    @@ -58,10 +58,9 @@
     import eu.sqooss.service.db.BugStatus.Status;
     
     /**
    - * This class represents a project that Alitheia "knows about".
    - * These projects are the ones that are examined by the cruncher.
    - * Basically, if the cruncher is operating on a project, there
    - * has to be a record of this type in the system.
    + * This class represents a project that Alitheia "knows about". These projects
    + * are the ones that are examined by the cruncher. Basically, if the cruncher is
    + * operating on a project, there has to be a record of this type in the system.
      * 
      * @assoc 1 - n Bug
      * @assoc 1 - n MailingList
    @@ -71,418 +70,467 @@
      * @assoc 1 - n Branch
      * @assoc "m defines\r" - "n\n\n" ConfigurationOption
      */
    -@XmlRootElement(name="project")
    +@XmlRootElement(name = "project")
     @Entity
    -@Table(name="STORED_PROJECT")
    +@Table(name = "STORED_PROJECT")
     public class StoredProject extends DAObject {
     
     	@Id
    -	@GeneratedValue(strategy=GenerationType.AUTO)
    -	@Column(name="PROJECT_ID")
    +	@GeneratedValue(strategy = GenerationType.AUTO)
    +	@Column(name = "PROJECT_ID")
     	@XmlElement
     	private long id;
     
     	@XmlElement
    -	@Column(name="PROJECT_NAME")
    +	@Column(name = "PROJECT_NAME")
     	private String name;
    -	
    -    /**
    -     * The versions that this project contains
    -     */
    -    @OneToMany(fetch=FetchType.LAZY, mappedBy="project", cascade=CascadeType.ALL)
    -    private List<ProjectVersion> projectVersions;
    -    
    -    @OneToMany(fetch=FetchType.LAZY, mappedBy="storedProject", cascade=CascadeType.ALL)
    -    private Set<Developer> developers;
    -    
    -    @OneToMany(fetch=FetchType.LAZY, mappedBy="storedProject", cascade=CascadeType.ALL)
    -    private Set<MailingList> mailingLists;
    -    
    -    @OneToMany(fetch=FetchType.LAZY, mappedBy="storedProject", cascade=CascadeType.ALL)
    -    private Set<StoredProjectMeasurement> measurements;
    -    
    -    @OneToMany(fetch=FetchType.LAZY, mappedBy="project", cascade=CascadeType.ALL)
    +
    +	/**
    +	 * The versions that this project contains
    +	 */
    +	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project", cascade = CascadeType.ALL)
    +	private List<ProjectVersion> projectVersions;
    +
    +	@OneToMany(fetch = FetchType.LAZY, mappedBy = "storedProject", cascade = CascadeType.ALL)
    +	private Set<Developer> developers;
    +
    +	@OneToMany(fetch = FetchType.LAZY, mappedBy = "storedProject", cascade = CascadeType.ALL)
    +	private Set<MailingList> mailingLists;
    +
    +	@OneToMany(fetch = FetchType.LAZY, mappedBy = "storedProject", cascade = CascadeType.ALL)
    +	private Set<StoredProjectMeasurement> measurements;
    +
    +	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project", cascade = CascadeType.ALL)
     	private Set<Bug> bugs;
     
    -    @OneToMany(fetch=FetchType.LAZY, mappedBy="project", cascade=CascadeType.ALL)
    +	@OneToMany(fetch = FetchType.LAZY, mappedBy = "project", cascade = CascadeType.ALL)
     	private Set<StoredProjectConfig> configOpts;
    -   
    -    @ManyToOne(fetch=FetchType.LAZY, optional = true)
    -    @JoinColumn(name="CLUSTERNODE_ID")
    -    private ClusterNode clusternode;
    -	
    -    @OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="project")
    +
    +	@ManyToOne(fetch = FetchType.LAZY, optional = true)
    +	@JoinColumn(name = "CLUSTERNODE_ID")
    +	private ClusterNode clusternode;
    +
    +	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "project")
     	private Set<Branch> branches;
     
    -    public StoredProject() {}
    -    
    -    public StoredProject(String name) {
    -        this.name = name;
    -    }
    -    
    -    public long getId() {
    +	public StoredProject() {
    +	}
    +
    +	public StoredProject(String name) {
    +		this.name = name;
    +	}
    +
    +	public long getId() {
     		return id;
     	}
     
     	public void setId(long id) {
     		this.id = id;
     	}
    -    
    -    public String getName() {
    -        return name;
    -    }
     
    -    public void setName(String name) {
    -        this.name = name;
    -    }
    +	public String getName() {
    +		return name;
    +	}
     
    -    public String getWebsiteUrl() {
    -        return getConfigValue(ConfigOption.PROJECT_WEBSITE.getName());
    -    }
    +	public void setName(String name) {
    +		this.name = name;
    +	}
     
    -    public void setWebsiteUrl(String url) {
    -    	addConfig(ConfigOption.PROJECT_WEBSITE, url);
    -    }
    +	public String getWebsiteUrl() {
    +		return getConfigValue(ConfigOption.PROJECT_WEBSITE.getName());
    +	}
     
    -    public String getContactUrl() {
    -    	return getConfigValue(ConfigOption.PROJECT_CONTACT.getName());
    -    }
    +	public void setWebsiteUrl(String url) {
    +		addConfig(ConfigOption.PROJECT_WEBSITE, url);
    +	}
     
    -    public void setContactUrl(String url) {
    -    	addConfig(ConfigOption.PROJECT_CONTACT, url);
    -    }
    +	public String getContactUrl() {
    +		return getConfigValue(ConfigOption.PROJECT_CONTACT.getName());
    +	}
     
    -    public String getBtsUrl() {
    -    	return getConfigValue(ConfigOption.PROJECT_BTS_URL.getName());
    -    }
    +	public void setContactUrl(String url) {
    +		addConfig(ConfigOption.PROJECT_CONTACT, url);
    +	}
     
    -    public void setBtsUrl(String url) {
    -    	addConfig(ConfigOption.PROJECT_BTS_URL, url);
    -    }
    +	public String getBtsUrl() {
    +		return getConfigValue(ConfigOption.PROJECT_BTS_URL.getName());
    +	}
     
    -    public String getScmUrl() {
    -    	return getConfigValue(ConfigOption.PROJECT_SCM_URL.getName());
    -    }
    +	public void setBtsUrl(String url) {
    +		addConfig(ConfigOption.PROJECT_BTS_URL, url);
    +	}
     
    -    public void setScmUrl(String url) {
    -    	addConfig(ConfigOption.PROJECT_SCM_URL, url);
    -    }
    +	public String getScmUrl() {
    +		return getConfigValue(ConfigOption.PROJECT_SCM_URL.getName());
    +	}
     
    -    public String getMailUrl() {
    -    	return getConfigValue(ConfigOption.PROJECT_ML_URL.getName());
    -    }
    +	public void setScmUrl(String url) {
    +		addConfig(ConfigOption.PROJECT_SCM_URL, url);
    +	}
     
    -    public void setMailUrl(String url) {
    -    	addConfig(ConfigOption.PROJECT_ML_URL, url);
    -    }
    -    
    -    public List<ProjectVersion> getProjectVersions() {
    -        return projectVersions;
    -    }
    +	public String getMailUrl() {
    +		return getConfigValue(ConfigOption.PROJECT_ML_URL.getName());
    +	}
     
    -    public List<ProjectVersion> getTaggedVersions() {
    -        return Tag.getTaggedVersions(this);
    -    }
    -    
    -    public void setProjectVersions(List<ProjectVersion> projectVersions) {
    -        this.projectVersions = projectVersions;
    -    }
    +	public void setMailUrl(String url) {
    +		addConfig(ConfigOption.PROJECT_ML_URL, url);
    +	}
     
    -    public Set<Developer> getDevelopers() {
    -        return developers;
    -    }
    +	public List<ProjectVersion> getProjectVersions() {
    +		return projectVersions;
    +	}
     
    -    public void setDevelopers(Set<Developer> developers) {
    -        this.developers = developers;
    -    }
    +    public ProjectVersion getProjectVersionForNamedTag(String tagName) {
    +        DBService dbs = AlitheiaCore.getInstance().getDBService();
     
    -    public Set<MailingList> getMailingLists() {
    -        return mailingLists;
    -    }
    +        String paramTagName = "tagname";
    +        String paramProject = "project_id";
     
    -    public void setMailingLists(Set<MailingList> mailingLists) {
    -        this.mailingLists = mailingLists;
    -    }
    +        String query = "select pv " 
    +                + " from ProjectVersion pv, Tag t "
    +                + " where t.projectVersion = pv " 
    +                + " and t.name = :" + paramTagName 
    +                + " and pv.project =:" + paramProject;
     
    -    public Set<StoredProjectMeasurement> getMeasurements() {
    -        return measurements;
    -    }
    +        Map<String, Object> parameters = new HashMap<String, Object>();
    +        parameters.put(paramTagName, tagName);
    +        parameters.put(paramProject, this);
     
    -    public void setMeasurements(Set<StoredProjectMeasurement> measurements) {
    -        this.measurements = measurements;
    -    }
    +        List<?> projectVersions = dbs.doHQL(query, parameters, 1);
     
    -    public Set<StoredProjectConfig> getConfigOpts() {
    -        return configOpts;
    +        if (projectVersions == null || projectVersions.size() == 0) {
    +            return null;
    +        } else {
    +            return (ProjectVersion) projectVersions.get(0);
    +        }
         }
    +	
    +	public List<ProjectVersion> getTaggedVersions() {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
     
    -    public void setConfigOpts(Set<StoredProjectConfig> configOpts) {
    -        this.configOpts = configOpts;
    -    }
    +		String paramProject = "project_id";
     
    -    public void setClusternode (ClusterNode assignment) {
    -        this.clusternode = assignment;
    -    }
    +		String query = "select pv " + " from ProjectVersion pv, Tag t "
    +				+ " where t.projectVersion = pv " + " and pv.project =:"
    +				+ paramProject;
     
    -    public ClusterNode getClusternode() {
    -        return clusternode;
    -    }
    -    
    -    public void setBranches(Set<Branch> branches) {
    +		Map<String, Object> parameters = new HashMap<String, Object>();
    +		parameters.put(paramProject, this);
    +
    +		return (List<ProjectVersion>) dbs.doHQL(query, parameters);
    +
    +	}
    +
    +	public void setProjectVersions(List<ProjectVersion> projectVersions) {
    +		this.projectVersions = projectVersions;
    +	}
    +
    +	public Set<Developer> getDevelopers() {
    +		return developers;
    +	}
    +
    +	public void setDevelopers(Set<Developer> developers) {
    +		this.developers = developers;
    +	}
    +
    +	public Set<MailingList> getMailingLists() {
    +		return mailingLists;
    +	}
    +
    +	public void setMailingLists(Set<MailingList> mailingLists) {
    +		this.mailingLists = mailingLists;
    +	}
    +
    +	public Set<StoredProjectMeasurement> getMeasurements() {
    +		return measurements;
    +	}
    +
    +	public void setMeasurements(Set<StoredProjectMeasurement> measurements) {
    +		this.measurements = measurements;
    +	}
    +
    +	public Set<StoredProjectConfig> getConfigOpts() {
    +		return configOpts;
    +	}
    +
    +	public void setConfigOpts(Set<StoredProjectConfig> configOpts) {
    +		this.configOpts = configOpts;
    +	}
    +
    +	public void setClusternode(ClusterNode assignment) {
    +		this.clusternode = assignment;
    +	}
    +
    +	public ClusterNode getClusternode() {
    +		return clusternode;
    +	}
    +
    +	public void setBranches(Set<Branch> branches) {
     		this.branches = branches;
     	}
     
     	public Set<Branch> getBranches() {
     		return branches;
     	}
    -	
    -    public Set<Bug> getBugs() {
    -        return bugs;
    -    }
     
    -    public void setBugs(Set<Bug> bugs) {
    -        this.bugs = bugs;
    -    } 
    -    
    -    /**
    -     * Get the first (in an arbitrary definition of order) value for
    -     * a configuration option.  
    -     * @param key The {@link ConfigOption} to look the value for
    -     * @return The configuration value or null, if the option is not set
    -     */
    -    public String getConfigValue (ConfigOption key) {
    -    	return getConfigValue(key.getName());
    -    }
    -    
    -    /**
    -     * Get the first (in an arbitrary definition of order) value for
    -     * a configuration option.  
    -     * @param key The key to retrieve a value for
    -     * @return The configuration value or null, if the option is not set
    -     */
    -    public String getConfigValue (String key) {
    -    	List<String> values = getConfigValues(key);
    -    	if (values.isEmpty())
    -    		return null;
    -    	return values.get(0);
    -    }
    -    
    -    /**
    -     * Get the values for a project configuration entry.
    -     * @param co The {@link ConfigOption} to look the value for
    -     * @return A list of values for the provided configuration option 
    -     */
    -    public List<String> getConfigValues (ConfigOption co) {
    -    	return getConfigValues(co.getName());
    -    }
    -    
    -    /** 
    -     * Get the values for a project configuration entry.
    -     * 
    -     * @param key The key whose value we want to retrieve
    -     */
    -    public List<String> getConfigValues (String key) {
    -    	ConfigurationOption co = ConfigurationOption.fromKey(key);
    -    	
    -    	if (co == null)
    -    		return Collections.emptyList();
    -    	
    -    	return co.getValues(this);
    -    }
    -    
    -    /**
    +	public Set<Bug> getBugs() {
    +		return bugs;
    +	}
    +
    +	public void setBugs(Set<Bug> bugs) {
    +		this.bugs = bugs;
    +	}
    +
    +	/**
    +	 * Get the first (in an arbitrary definition of order) value for a
    +	 * configuration option.
    +	 * 
    +	 * @param key
    +	 *            The {@link ConfigOption} to look the value for
    +	 * @return The configuration value or null, if the option is not set
    +	 */
    +	public String getConfigValue(ConfigOption key) {
    +		return getConfigValue(key.getName());
    +	}
    +
    +	/**
    +	 * Get the first (in an arbitrary definition of order) value for a
    +	 * configuration option.
    +	 * 
    +	 * @param key
    +	 *            The key to retrieve a value for
    +	 * @return The configuration value or null, if the option is not set
    +	 */
    +	public String getConfigValue(String key) {
    +		List<String> values = getConfigValues(key);
    +		if (values.isEmpty())
    +			return null;
    +		return values.get(0);
    +	}
    +
    +	/**
    +	 * Get the values for a project configuration entry.
    +	 * 
    +	 * @param co
    +	 *            The {@link ConfigOption} to look the value for
    +	 * @return A list of values for the provided configuration option
    +	 */
    +	public List<String> getConfigValues(ConfigOption co) {
    +		return getConfigValues(co.getName());
    +	}
    +
    +	/**
    +	 * Get the values for a project configuration entry.
    +	 * 
    +	 * @param key
    +	 *            The key whose value we want to retrieve
    +	 */
    +	public List<String> getConfigValues(String key) {
    +		ConfigurationOption co = ConfigurationOption.fromKey(key);
    +
    +		if (co == null)
    +			return Collections.emptyList();
    +
    +		return co.getValues(this);
    +	}
    +
    +	/**
     	 * Set the value for a project configuration key. If the key does not exist
     	 * in the configuration key table, it will be created with and empty
     	 * description. The schema allows multiple values per key, so there is no
     	 * need to encode multiple key values in a single configuration entry.
     	 * 
    -	 * @param key The key to set the value for
    -	 * @param value The value to be set 
    +	 * @param key
    +	 *            The key to set the value for
    +	 * @param value
    +	 *            The value to be set
     	 */
    -    public void setConfigValue (String key, String value) {
    -    	updateConfigValue(null, key, value, true);
    -    }
    -    
    -    
    -    /**
    +	public void setConfigValue(String key, String value) {
    +		updateConfigValue(null, key, value, true);
    +	}
    +
    +	/**
     	 * Append a value to a project configuration key. If the key does not exist
     	 * in the configuration key table, it will be created with and empty
     	 * description. The schema allows multiple values per key, so there is no
     	 * need to encode multiple key values in a single configuration entry.
     	 * 
    -	 * @param key The key to set the value for
    -	 * @param value The value to be set 
    +	 * @param key
    +	 *            The key to set the value for
    +	 * @param value
    +	 *            The value to be set
     	 */
    -    public void addConfigValue(String key, String value) {
    -    	updateConfigValue(null, key, value, false);
    -    }
    -    
    -    /**
    +	public void addConfigValue(String key, String value) {
    +		updateConfigValue(null, key, value, false);
    +	}
    +
    +	/**
     	 * Append a value to a project configuration option. If the configuration
     	 * option does not exist in the database, it will be created. The schema
     	 * allows multiple values per key, so there is no need to encode multiple
     	 * key values in a single configuration entry.
     	 * 
    -	 * @param co The configuration option to store a value for
    -	 * @param value The value to set to the configuration option
    +	 * @param co
    +	 *            The configuration option to store a value for
    +	 * @param value
    +	 *            The value to set to the configuration option
     	 */
     	public void addConfig(ConfigOption co, String value) {
     		updateConfigValue(co, null, value, false);
     	}
    -    
    -    private void updateConfigValue (ConfigOption configOpt, String key, 
    -    		String value, boolean update) {
    -    	DBService dbs = AlitheiaCore.getInstance().getDBService();
    -    	ConfigurationOption co = null;
    -    	
    -    	if (configOpt == null) {
    -    		co = ConfigurationOption.fromKey(key);
    -    	
    -    		if (co == null) {
    -    			co = new ConfigurationOption(key, "");
    -    			dbs.addRecord(co);
    -    		}
    -    	} else {
    -    		co = ConfigurationOption.fromKey(configOpt.getName());
    -        	
    -    		if (co == null) {
    -    			co = new ConfigurationOption(configOpt.getName(), 
    -    					configOpt.getDesc());
    -    			dbs.addRecord(co);
    -    		}
    -    	}
    -    	
    -    	List<String> values = new ArrayList<String>();
    -    	values.add(value);
    -    	co.setValues(this, values, update);
    -    }
     
    -    //================================================================
    -    // Static table information accessors
    -    //================================================================
    -    
    -
    -    /**
    -     * Convenience method to retrieve a stored project from the
    -     * database by name; this is different from the constructor
    -     * that takes a name parameter. This method actually searches
    -     * the database, whereas the constructor makes a new project
    -     * with the given name.
    -     * 
    -     * @param name Name of the project to search for
    -     * @return StoredProject object or null if not found
    -     */
    -    public static StoredProject getProjectByName(String name) {
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    +	private void updateConfigValue(ConfigOption configOpt, String key,
    +			String value, boolean update) {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
    +		ConfigurationOption co = null;
    +
    +		if (configOpt == null) {
    +			co = ConfigurationOption.fromKey(key);
    +
    +			if (co == null) {
    +				co = new ConfigurationOption(key, "");
    +				dbs.addRecord(co);
    +			}
    +		} else {
    +			co = ConfigurationOption.fromKey(configOpt.getName());
    +
    +			if (co == null) {
    +				co = new ConfigurationOption(configOpt.getName(),
    +						configOpt.getDesc());
    +				dbs.addRecord(co);
    +			}
    +		}
    +
    +		List<String> values = new ArrayList<String>();
    +		values.add(value);
    +		co.setValues(this, values, update);
    +	}
     
    -        Map<String,Object> parameterMap = new HashMap<String,Object>();
    -        parameterMap.put("name",name);
    -        List<StoredProject> prList = dbs.findObjectsByProperties(StoredProject.class, parameterMap);
    -        return (prList == null || prList.isEmpty()) ? null : prList.get(0);
    -    }
    +	// ================================================================
    +	// Static table information accessors
    +	// ================================================================
     
    -    /**
    -     * Count the total number of projects in the database.
    -     * 
    -     * @return number of stored projects in the database
    -     */
    -    public static int getProjectCount() {
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    -        List<?> l = dbs.doHQL("SELECT COUNT(*) FROM StoredProject");
    -        if ((l == null) || (l.size() < 1)) {
    -            return 0;
    -        }
    -        Long i = (Long) l.get(0);
    -        return i.intValue();
    -    }
    +	/**
    +	 * Convenience method to retrieve a stored project from the database by
    +	 * name; this is different from the constructor that takes a name parameter.
    +	 * This method actually searches the database, whereas the constructor makes
    +	 * a new project with the given name.
    +	 * 
    +	 * @param name
    +	 *            Name of the project to search for
    +	 * @return StoredProject object or null if not found
    +	 */
    +	public static StoredProject getProjectByName(String name) {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
    +
    +		Map<String, Object> parameterMap = new HashMap<String, Object>();
    +		parameterMap.put("name", name);
    +		List<StoredProject> prList = dbs.findObjectsByProperties(
    +				StoredProject.class, parameterMap);
    +		return (prList == null || prList.isEmpty()) ? null : prList.get(0);
    +	}
     
    -    /**
    -     * Returns the total number of versions for the project with the given Id.
    -     *
    -     * @param projectId - the project's identifier
    -     *
    -     * @return The total number of version for that project.
    -     */
    -    public long getVersionsCount() {
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    +	/**
    +	 * Count the total number of projects in the database.
    +	 * 
    +	 * @return number of stored projects in the database
    +	 */
    +	public static int getProjectCount() {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
    +		List<?> l = dbs.doHQL("SELECT COUNT(*) FROM StoredProject");
    +		if ((l == null) || (l.size() < 1)) {
    +			return 0;
    +		}
    +		Long i = (Long) l.get(0);
    +		return i.intValue();
    +	}
     
    -        Map<String,Object> parameterMap = new HashMap<String,Object>();
    -        parameterMap.put("pid", this.getId());
    -        List<?> pvList = dbs.doHQL("select count(*)"
    -                + " from ProjectVersion pv"
    -                + " where pv.project.id=:pid",
    -                parameterMap);
    +	/**
    +	 * Returns the total number of versions for the project with the given Id.
    +	 *
    +	 * @param projectId
    +	 *            - the project's identifier
    +	 *
    +	 * @return The total number of version for that project.
    +	 */
    +	public long getVersionsCount() {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
     
    -        return (pvList == null || pvList.isEmpty()) ? 0 : (Long) pvList.get(0);
    -    }
    +		Map<String, Object> parameterMap = new HashMap<String, Object>();
    +		parameterMap.put("pid", this.getId());
    +		List<?> pvList = dbs.doHQL("select count(*)"
    +				+ " from ProjectVersion pv" + " where pv.project.id=:pid",
    +				parameterMap);
     
    -    /**
    -     * Returns the total number of mails which belong to the project with the
    -     * given Id.
    -     *
    -     * @param projectId - the project's identifier
    -     *
    -     * @return The total number of mails associated with that project.
    -     */
    -    public long getMailsCount() {
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    +		return (pvList == null || pvList.isEmpty()) ? 0 : (Long) pvList.get(0);
    +	}
     
    -        Map<String,Object> parameterMap = new HashMap<String,Object>();
    -        parameterMap.put("pid", this.getId());
    -        List<?> res = dbs.doHQL("select count(*)"
    -                + " from MailMessage mm, MailingList ml"
    -                + " where ml.storedProject.id=:pid"
    -                + " and mm.list.id=ml.id",
    -                parameterMap);
    +	/**
    +	 * Returns the total number of mails which belong to the project with the
    +	 * given Id.
    +	 *
    +	 * @param projectId
    +	 *            - the project's identifier
    +	 *
    +	 * @return The total number of mails associated with that project.
    +	 */
    +	public long getMailsCount() {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
     
    -        return (res == null || res.isEmpty()) ? 0 : (Long) res.get(0);
    -    }
    +		Map<String, Object> parameterMap = new HashMap<String, Object>();
    +		parameterMap.put("pid", this.getId());
    +		List<?> res = dbs.doHQL("select count(*)"
    +				+ " from MailMessage mm, MailingList ml"
    +				+ " where ml.storedProject.id=:pid" + " and mm.list.id=ml.id",
    +				parameterMap);
     
    -    /**
    -     * Returns the total number of bugs which belong to the project with the
    -     * given Id.
    -     *
    -     * @return The total number of bugs associated with that project.
    -     */
    -    public long getBugsCount() {
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    +		return (res == null || res.isEmpty()) ? 0 : (Long) res.get(0);
    +	}
     
    -        Map<String,Object> parameterMap = new HashMap<String,Object>();
    -        parameterMap.put("pid", this.getId());
    -        List<?> res = dbs.doHQL("select count(*)"
    -                + " from Bug bg"
    -                + " where bg.project.id=:pid"
    -                + " and bg.status.status='" + Status.NEW + "'",
    -                parameterMap);
    +	/**
    +	 * Returns the total number of bugs which belong to the project with the
    +	 * given Id.
    +	 *
    +	 * @return The total number of bugs associated with that project.
    +	 */
    +	public long getBugsCount() {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
     
    -        return (res == null || res.isEmpty()) ? 0 : (Long) res.get(0);
    -    }
    -    
    -    /**
    -     * Check whether any metric has run on the given project.
    -     * @return
    -     */
    -    public boolean isEvaluated() {
    -    	DBService dbs = AlitheiaCore.getInstance().getDBService();
    -    	for (Metric m : Metric.getAllMetrics()) {
    -    		if (m.isEvaluated(this))
    -    			return true;
    -    	}
    -    	return false;
    -    }
    +		Map<String, Object> parameterMap = new HashMap<String, Object>();
    +		parameterMap.put("pid", this.getId());
    +		List<?> res = dbs.doHQL("select count(*)" + " from Bug bg"
    +				+ " where bg.project.id=:pid" + " and bg.status.status='"
    +				+ Status.NEW + "'", parameterMap);
     
    -    @Override
    -    public String toString() {
    -        return getName();
    -    }
    -    
    -    public boolean equals(Object obj) {
    +		return (res == null || res.isEmpty()) ? 0 : (Long) res.get(0);
    +	}
    +
    +	/**
    +	 * Check whether any metric has run on the given project.
    +	 * 
    +	 * @return
    +	 */
    +	public boolean isEvaluated() {
    +		DBService dbs = AlitheiaCore.getInstance().getDBService();
    +		for (Metric m : Metric.getAllMetrics()) {
    +			if (m.isEvaluated(this))
    +				return true;
    +		}
    +		return false;
    +	}
    +
    +	@Override
    +	public String toString() {
    +		return getName();
    +	}
    +
    +	public boolean equals(Object obj) {
     		if (this == obj)
     			return true;
     		if ((obj == null) || (obj.getClass() != this.getClass()))
     			return false;
     		StoredProject test = (StoredProject) obj;
    -		return  (name != null && name.equals(test.name));
    +		return (name != null && name.equals(test.name));
     	}
     
     	public int hashCode() {
    @@ -492,5 +540,4 @@ public int hashCode() {
     	}
     }
     
    -// vi: ai nosi sw=4 ts=4 expandtab
    -
    +// vi: ai nosi sw=4 ts=4 expandtab
    \ No newline at end of file
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/Tag.java b/alitheia/core/src/main/java/eu/sqooss/service/db/Tag.java
    index 95d4a59e3..a54adefb0 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/db/Tag.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/Tag.java
    @@ -33,10 +33,6 @@
     
     package eu.sqooss.service.db;
     
    -import java.util.HashMap;
    -import java.util.List;
    -import java.util.Map;
    -
     import javax.persistence.Column;
     import javax.persistence.Entity;
     import javax.persistence.FetchType;
    @@ -48,9 +44,6 @@
     import javax.persistence.Table;
     import javax.xml.bind.annotation.XmlElement;
     
    -import eu.sqooss.core.AlitheiaCore;
    -import eu.sqooss.service.db.DAObject;
    -
     /**
      * Instances of this class represent the data of an SVN tag for a
      * project, as stored in the database
    @@ -111,49 +104,6 @@ public void setName(String name) {
             this.name = name;
         }
     
    -    public static ProjectVersion getProjectVersionForNamedTag(String tagName,
    -            StoredProject sp) {
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    -
    -        String paramTagName = "tagname";
    -        String paramProject = "project_id";
    -
    -        String query = "select pv " 
    -                + " from ProjectVersion pv, Tag t "
    -                + " where t.projectVersion = pv " 
    -                + " and t.name = :" + paramTagName 
    -                + " and pv.project =:" + paramProject;
    -
    -        Map<String, Object> parameters = new HashMap<String, Object>();
    -        parameters.put(paramTagName, tagName);
    -        parameters.put(paramProject, sp);
    -
    -        List<?> projectVersions = dbs.doHQL(query, parameters, 1);
    -
    -        if (projectVersions == null || projectVersions.size() == 0) {
    -            return null;
    -        } else {
    -            return (ProjectVersion) projectVersions.get(0);
    -        }
    -    }
    -    
    -    public static List<ProjectVersion> getTaggedVersions(StoredProject sp) {
    -        DBService dbs = AlitheiaCore.getInstance().getDBService();
    -
    -        String paramProject = "project_id";
    -
    -        String query = "select pv " 
    -                + " from ProjectVersion pv, Tag t "
    -                + " where t.projectVersion = pv " 
    -                + " and pv.project =:" + paramProject;
    -
    -        Map<String, Object> parameters = new HashMap<String, Object>();
    -        parameters.put(paramProject, sp);
    -
    -        return (List<ProjectVersion>) dbs.doHQL(query, parameters);
    -
    -    }
    -
         @Override
         public String toString() {
             return "<Tag: " + name + " from version "
    @@ -161,5 +111,4 @@ public String toString() {
         }
     }
     
    -// vi: ai nosi sw=4 ts=4 expandtab
    -
    +// vi: ai nosi sw=4 ts=4 expandtab
    \ No newline at end of file
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/fds/FileTypeMatcher.java b/alitheia/core/src/main/java/eu/sqooss/service/fds/FileTypeMatcher.java
    index 6ed3c6493..8cc584116 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/fds/FileTypeMatcher.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/fds/FileTypeMatcher.java
    @@ -33,7 +33,6 @@
     
     package eu.sqooss.service.fds;
     
    -import java.lang.StringBuffer;
     import java.util.HashMap;
     import java.util.regex.Pattern;
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryCheckout.java b/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryCheckout.java
    index 0d98ef6f3..fa43ca7da 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryCheckout.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryCheckout.java
    @@ -78,5 +78,4 @@ public interface InMemoryCheckout {
         public ProjectFile getFile(String name);
     }
     
    -// vi: ai nosi sw=4 ts=4 expandtab
    -
    +// vi: ai nosi sw=4 ts=4 expandtab
    \ No newline at end of file
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryDirectory.java b/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryDirectory.java
    index d8344b814..843a45fd8 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryDirectory.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/fds/InMemoryDirectory.java
    @@ -33,15 +33,9 @@
     
     package eu.sqooss.service.fds;
     
    -import java.util.ArrayList;
     import java.util.LinkedList;
     import java.util.List;
     
    -import eu.sqooss.service.db.Directory;
    -import eu.sqooss.service.db.ProjectFile;
    -import eu.sqooss.service.db.ProjectVersion;
    -import eu.sqooss.service.util.FileUtils;
    -
     /**
      * An InMemoryDirectory object represents part of an in-memory
      * checkout. InMemoryDirectory objects hang together in a tree
    @@ -51,7 +45,7 @@
      */
     public class InMemoryDirectory {
         
    -    private InMemoryCheckout checkout;
    +    //private InMemoryCheckout checkout;
         private InMemoryDirectory parentDirectory;
        
         private String name;
    @@ -70,11 +64,6 @@ public InMemoryDirectory(String name) {
             this.name = name;
         }
         
    -    public InMemoryDirectory(InMemoryCheckout checkout) {
    -        this("");
    -        this.checkout = checkout;
    -    }
    -    
         public InMemoryDirectory(InMemoryDirectory parent, String name) {
             this(name);
             this.parentDirectory = parent;
    @@ -110,13 +99,6 @@ public String getPath() {
         public InMemoryDirectory getParentDirectory() {
             return parentDirectory;
         }
    -    
    -    /**
    -     * Returns the checkout this directory belongs to.
    -     */
    -    public InMemoryCheckout getCheckout() {
    -        return checkout == null ? parentDirectory.getCheckout() : checkout;
    -    }
     
         /**
          * Returns the list of subdirectories this directory has.
    @@ -125,41 +107,6 @@ public List<InMemoryDirectory> getSubDirectories() {
             return directories;
         }
     
    -    /**
    -     * Returns one file living in this directory or below.
    -     * @param name The filename relative to this directory.
    -     * @return A reference to a ProjectFile
    -     */
    -    public ProjectFile getFile(String name) {
    -
    -        /*Recursively traverse the directories of the provided file path*/
    -        if (name.indexOf('/') != -1 ) {
    -            String pathName = name.substring(0, name.indexOf('/'));
    -            String fileName = name.substring(name.indexOf('/') + 1);
    -            InMemoryDirectory dir = getSubdirectoryByName(pathName);
    -            return dir == null ? null : dir.getFile(fileName);
    -        }
    -
    -        return ProjectFile.findFile(
    -                getCheckout().getProjectVersion().getProject().getId(),
    -                FileUtils.basename(name), 
    -                FileUtils.dirname(name),
    -                getCheckout().getProjectVersion().getRevisionId());
    -
    -    }
    -    
    -    /**
    -     * Returns the list of files this directory contains.
    -     */
    -    public List<ProjectFile> getFiles() {
    -        @SuppressWarnings("unused")
    -        ArrayList<ProjectFile> result = new ArrayList<ProjectFile>(files.size());
    -        
    -        return getCheckout().getProjectVersion().getFiles(
    -                Directory.getDirectory(getPath(), false), 
    -                ProjectVersion.MASK_FILES);
    -    }
    -
         public List<String> getFileNames() {
             return this.files;
         }
    @@ -189,7 +136,7 @@ public boolean pathExists(String path) {
             }
     
             //Dir found, search files for matching file name
    -        if (dir.getFiles().contains(file)) {
    +        if (dir.getFileNames().contains(file)) {
                 return true;
             }
             
    @@ -332,4 +279,4 @@ public String toString() {
         }
     }
     
    -// vi: ai nosi sw=4 ts=4 expandtab
    +// vi: ai nosi sw=4 ts=4 expandtab
    \ No newline at end of file
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/scheduler/Job.java b/alitheia/core/src/main/java/eu/sqooss/service/scheduler/Job.java
    index 62e9745cc..714337a2e 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/scheduler/Job.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/scheduler/Job.java
    @@ -36,17 +36,12 @@
     import java.util.ArrayList;
     import java.util.Collections;
     import java.util.Iterator;
    -import java.util.List;
     import java.util.LinkedList;
    -
    -import java.lang.Comparable;
    -import java.lang.InterruptedException;
    +import java.util.List;
     
     import eu.sqooss.core.AlitheiaCore;
    -import eu.sqooss.service.util.Pair;
    -
     import eu.sqooss.service.db.DBService;
    -import eu.sqooss.service.scheduler.SchedulerException;
    +import eu.sqooss.service.util.Pair;
     
     /**
      * Abstract base class for all jobs running by the scheduler.
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/scheduler/SchedulerStats.java b/alitheia/core/src/main/java/eu/sqooss/service/scheduler/SchedulerStats.java
    index f4b9a1beb..9eba86778 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/scheduler/SchedulerStats.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/scheduler/SchedulerStats.java
    @@ -38,139 +38,138 @@
     import java.util.List;
     import java.util.Vector;
     
    -import org.apache.commons.collections.list.SynchronizedList;
    -
     public class SchedulerStats {
    -    // the number of jobs currently in the scheduler
    -    private long totalJobs = 0;
    -    // the number of jobs which were finished
    -    private long finishedJobs = 0;
    -    // the number of jobs currently waiting
    -    private long waitingJobs = 0;
    -    // the number of jobs currently running
    -    private long runningJobs = 0;
    -    // the total number of threads available for scheduling
    -    private long workerThreads = 0;
    -    // the number of threads being idle at the moment
    -    private long idleWorkerThreads = 0;
    -    // the number of jobs which failed
    -    private long failedJobs = 0;
    -    //Classname->Failed Jobs 
    -    private HashMap<String, Integer> failedJobTypes = new HashMap<String, Integer>();
    -    //Classname->Num jobs waiting
    -    private HashMap<String, Integer> waitingJobTypes = new HashMap<String, Integer>();
    -    //Running jobs
    -    private List<Job> runJobs = new Vector<Job>();
    -    
    -    public synchronized void incTotalJobs() {
    -        totalJobs++;
    -    }
    -
    -    public synchronized void decTotalJobs() {
    -        totalJobs--;
    -    }
    -   
    -    public synchronized void incFinishedJobs() {
    -        finishedJobs++;
    -    }
    -    
    -    public synchronized void incWorkerThreads() {
    -        workerThreads++;
    -    }
    -    
    -    public synchronized void decWorkerThreads() {
    -        workerThreads--;
    -    }
    -    
    -    public synchronized void incIdleWorkerThreads() {
    -        idleWorkerThreads++;
    -    }
    -    
    -    public synchronized void decIdleWorkerThreads() {
    -        idleWorkerThreads--;
    -    }
    -    
    -    public synchronized void addFailedJob(String classname) {
    -        this.failedJobs++;
    -        if (failedJobTypes.containsKey(classname))
    -            failedJobTypes.put(classname, (failedJobTypes.get(classname) + 1));
    -        else
    -            failedJobTypes.put(classname, 1);
    -    }
    -
    -    public synchronized void addWaitingJob(String classname) {
    -        this.waitingJobs++;
    -        if (waitingJobTypes.containsKey(classname))
    -            waitingJobTypes.put(classname, (waitingJobTypes.get(classname) + 1));
    -        else
    -            waitingJobTypes.put(classname, 1);
    -    }
    -    
    -    public synchronized void removeWaitingJob(String classname) {
    -        this.waitingJobs --;
    -        if (waitingJobTypes.containsKey(classname)) {
    -            int jobs = waitingJobTypes.get(classname) - 1;
    -            if (jobs == 0) {
    -                waitingJobTypes.remove(classname);
    -            }
    -            
    -            waitingJobTypes.put(classname, jobs);
    -        }
    -    }
    - 
    -    public synchronized void addRunJob(Job j) {
    -        this.runningJobs++;
    -        this.runJobs.add(j);
    -    }
    -    
    -    public synchronized void removeRunJob(Job j) {
    -        this.runningJobs--;
    -        this.runJobs.remove(j);
    -    }
    -    
    -    public long getTotalJobs() {
    -        return totalJobs;
    -    }
    -
    -    public long getWaitingJobs() {
    -        return waitingJobs;
    -    }
    -
    -    public long getFinishedJobs() {
    -        return finishedJobs;
    -    }
    -
    -    public long getRunningJobs() {
    -        return runningJobs;
    -    }
    -
    -    public long getWorkerThreads() {
    -        return workerThreads;
    -    }
    -
    -    public long getIdleWorkerThreads() {
    -        return idleWorkerThreads;
    -    }
    -
    -    public long getFailedJobs() {
    -        return failedJobs;
    -    }
    -    
    -    public HashMap<String, Integer> getFailedJobTypes() {
    -        return failedJobTypes;
    -    }
    -    
    -    public HashMap<String, Integer> getWaitingJobTypes() {
    -        return waitingJobTypes;
    -    }
    -    
    -    public synchronized List<String> getRunJobs() {
    -        Job[] jobs = new Job[runJobs.size()];
    -        runJobs.toArray(jobs);
    -        List<String> jobDescr = new ArrayList<String>();
    -        for (Job j : jobs) {
    -            jobDescr.add(j.toString());
    -        }
    -        return jobDescr;
    -    }
    +	// the number of jobs currently in the scheduler
    +	private long totalJobs = 0;
    +	// the number of jobs which were finished
    +	private long finishedJobs = 0;
    +	// the number of jobs currently waiting
    +	private long waitingJobs = 0;
    +	// the number of jobs currently running
    +	private long runningJobs = 0;
    +	// the total number of threads available for scheduling
    +	private long workerThreads = 0;
    +	// the number of threads being idle at the moment
    +	private long idleWorkerThreads = 0;
    +	// the number of jobs which failed
    +	private long failedJobs = 0;
    +	// Classname->Failed Jobs
    +	private HashMap<String, Integer> failedJobTypes = new HashMap<String, Integer>();
    +	// Classname->Num jobs waiting
    +	private HashMap<String, Integer> waitingJobTypes = new HashMap<String, Integer>();
    +	// Running jobs
    +	private List<Job> runJobs = new Vector<Job>();
    +
    +	public synchronized void incTotalJobs() {
    +		totalJobs++;
    +	}
    +
    +	public synchronized void decTotalJobs() {
    +		totalJobs--;
    +	}
    +
    +	public synchronized void incFinishedJobs() {
    +		finishedJobs++;
    +	}
    +
    +	public synchronized void incWorkerThreads() {
    +		workerThreads++;
    +	}
    +
    +	public synchronized void decWorkerThreads() {
    +		workerThreads--;
    +	}
    +
    +	public synchronized void incIdleWorkerThreads() {
    +		idleWorkerThreads++;
    +	}
    +
    +	public synchronized void decIdleWorkerThreads() {
    +		idleWorkerThreads--;
    +	}
    +
    +	public synchronized void addFailedJob(String classname) {
    +		this.failedJobs++;
    +		if (failedJobTypes.containsKey(classname))
    +			failedJobTypes.put(classname, (failedJobTypes.get(classname) + 1));
    +		else
    +			failedJobTypes.put(classname, 1);
    +	}
    +
    +	public synchronized void addWaitingJob(String classname) {
    +		this.waitingJobs++;
    +		if (waitingJobTypes.containsKey(classname))
    +			waitingJobTypes
    +					.put(classname, (waitingJobTypes.get(classname) + 1));
    +		else
    +			waitingJobTypes.put(classname, 1);
    +	}
    +
    +	public synchronized void removeWaitingJob(String classname) {
    +		if (waitingJobTypes.containsKey(classname)) {
    +			this.waitingJobs--;
    +			int jobs = waitingJobTypes.get(classname) - 1;
    +			if (jobs <= 0) {
    +				waitingJobTypes.remove(classname);
    +			} else {
    +				waitingJobTypes.put(classname, jobs);
    +			}
    +		}
    +	}
    +
    +	public synchronized void addRunJob(Job j) {
    +		this.runningJobs++;
    +		this.runJobs.add(j);
    +	}
    +
    +	public synchronized void removeRunJob(Job j) {
    +		this.runningJobs--;
    +		this.runJobs.remove(j);
    +	}
    +
    +	public long getTotalJobs() {
    +		return totalJobs;
    +	}
    +
    +	public long getWaitingJobs() {
    +		return waitingJobs;
    +	}
    +
    +	public long getFinishedJobs() {
    +		return finishedJobs;
    +	}
    +
    +	public long getRunningJobs() {
    +		return runningJobs;
    +	}
    +
    +	public long getWorkerThreads() {
    +		return workerThreads;
    +	}
    +
    +	public long getIdleWorkerThreads() {
    +		return idleWorkerThreads;
    +	}
    +
    +	public long getFailedJobs() {
    +		return failedJobs;
    +	}
    +
    +	public HashMap<String, Integer> getFailedJobTypes() {
    +		return failedJobTypes;
    +	}
    +
    +	public HashMap<String, Integer> getWaitingJobTypes() {
    +		return waitingJobTypes;
    +	}
    +
    +	public synchronized List<String> getRunJobs() {
    +		Job[] jobs = new Job[runJobs.size()];
    +		runJobs.toArray(jobs);
    +		List<String> jobDescr = new ArrayList<String>();
    +		for (Job j : jobs) {
    +			jobDescr.add(j.toString());
    +		}
    +		return jobDescr;
    +	}
     }
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/tds/AccessorException.java b/alitheia/core/src/main/java/eu/sqooss/service/tds/AccessorException.java
    index 6b05cee96..9ad94f7b4 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/tds/AccessorException.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/tds/AccessorException.java
    @@ -33,7 +33,6 @@
     
     package eu.sqooss.service.tds;
     
    -import eu.sqooss.service.tds.TDSException;
     
     /**
      * This exception indicates that an error occurred during accessor
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/tds/InvalidRepositoryException.java b/alitheia/core/src/main/java/eu/sqooss/service/tds/InvalidRepositoryException.java
    index 2c6036523..425a67097 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/tds/InvalidRepositoryException.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/tds/InvalidRepositoryException.java
    @@ -33,7 +33,6 @@
     
     package eu.sqooss.service.tds;
     
    -import eu.sqooss.service.tds.TDSException;
     
     /**
      * This exception indicates that the repository is invalid for
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/tds/MailAccessor.java b/alitheia/core/src/main/java/eu/sqooss/service/tds/MailAccessor.java
    index 5260b868e..b63b85e2d 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/tds/MailAccessor.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/tds/MailAccessor.java
    @@ -33,10 +33,10 @@
     
     package eu.sqooss.service.tds;
     
    +import java.io.FileNotFoundException;
     import java.util.Date;
     import java.util.List;
     
    -import java.io.FileNotFoundException;
     import javax.mail.internet.MimeMessage;
     
     /**
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/tds/TDSService.java b/alitheia/core/src/main/java/eu/sqooss/service/tds/TDSService.java
    index 53a22820b..99bbc2d6f 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/tds/TDSService.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/tds/TDSService.java
    @@ -34,7 +34,6 @@
     package eu.sqooss.service.tds;
     
     import eu.sqooss.core.AlitheiaCoreService;
    -import eu.sqooss.service.tds.DataAccessor;
     
     /**
      * The TDS service interface provides a way to retrieve and configure project
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterService.java b/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterService.java
    index ff494e919..a09132163 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterService.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterService.java
    @@ -29,12 +29,12 @@
      */
     package eu.sqooss.service.updater;
     
    -import java.util.List;
     import java.util.Set;
     
     import eu.sqooss.core.AlitheiaCoreService;
     import eu.sqooss.service.db.StoredProject;
     import eu.sqooss.service.tds.TDSService;
    +import eu.sqooss.service.updater.UpdaterService.UpdaterStage;
     
     /**
      * The updater service is the gateway in Alitheia core to tell the system that
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/util/BundleActivatorBase.java b/alitheia/core/src/main/java/eu/sqooss/service/util/BundleActivatorBase.java
    index 3073d9c76..8d541523e 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/util/BundleActivatorBase.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/util/BundleActivatorBase.java
    @@ -40,8 +40,8 @@
     import org.osgi.framework.ServiceListener;
     import org.osgi.framework.ServiceReference;
     
    -import eu.sqooss.service.logging.Logger;
     import eu.sqooss.service.logging.LogManager;
    +import eu.sqooss.service.logging.Logger;
     
     /**
      * This class provides the base functionality for the activation of an
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/util/FileUtils.java b/alitheia/core/src/main/java/eu/sqooss/service/util/FileUtils.java
    index e002390a4..42ef28eeb 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/util/FileUtils.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/util/FileUtils.java
    @@ -33,8 +33,19 @@
     
     package eu.sqooss.service.util;
     
    -import java.io.*;
    -import java.util.*;
    +import java.io.ByteArrayOutputStream;
    +import java.io.File;
    +import java.io.FileInputStream;
    +import java.io.FileOutputStream;
    +import java.io.IOException;
    +import java.io.InputStream;
    +import java.io.OutputStream;
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.Comparator;
    +import java.util.HashSet;
    +import java.util.List;
    +import java.util.Set;
     import java.util.regex.Matcher;
     import java.util.regex.Pattern;
     
    diff --git a/alitheia/core/src/main/java/eu/sqooss/service/util/Pair.java b/alitheia/core/src/main/java/eu/sqooss/service/util/Pair.java
    index 5cca25ab6..4bedffd34 100644
    --- a/alitheia/core/src/main/java/eu/sqooss/service/util/Pair.java
    +++ b/alitheia/core/src/main/java/eu/sqooss/service/util/Pair.java
    @@ -33,7 +33,6 @@
     
     package eu.sqooss.service.util;
     
    -import java.lang.Comparable;
     
     /**
      * This class is a container for an object pair.
    diff --git a/alitheia/core/src/test/java/eu/sqooss/admin/test/AdminServiceImplTest.java b/alitheia/core/src/test/java/eu/sqooss/admin/AdminServiceImplTest.java
    similarity index 95%
    rename from alitheia/core/src/test/java/eu/sqooss/admin/test/AdminServiceImplTest.java
    rename to alitheia/core/src/test/java/eu/sqooss/admin/AdminServiceImplTest.java
    index 9edc33bc6..b1f7661ac 100644
    --- a/alitheia/core/src/test/java/eu/sqooss/admin/test/AdminServiceImplTest.java
    +++ b/alitheia/core/src/test/java/eu/sqooss/admin/AdminServiceImplTest.java
    @@ -1,6 +1,8 @@
    -package eu.sqooss.admin.test;
    +package eu.sqooss.admin;
     
    -import static org.junit.Assert.*;
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertNotNull;
    +import static org.junit.Assert.assertNull;
     
     import java.util.Set;
     
    diff --git a/alitheia/core/src/test/java/eu/sqooss/admin/test/FailingAction.java b/alitheia/core/src/test/java/eu/sqooss/admin/FailingAction.java
    similarity index 93%
    rename from alitheia/core/src/test/java/eu/sqooss/admin/test/FailingAction.java
    rename to alitheia/core/src/test/java/eu/sqooss/admin/FailingAction.java
    index 69526ccdc..e20078865 100644
    --- a/alitheia/core/src/test/java/eu/sqooss/admin/test/FailingAction.java
    +++ b/alitheia/core/src/test/java/eu/sqooss/admin/FailingAction.java
    @@ -1,4 +1,4 @@
    -package eu.sqooss.admin.test;
    +package eu.sqooss.admin;
     
     import eu.sqooss.service.admin.AdminActionBase;
     
    diff --git a/alitheia/core/src/test/java/eu/sqooss/admin/test/SucceedingAction.java b/alitheia/core/src/test/java/eu/sqooss/admin/SucceedingAction.java
    similarity index 93%
    rename from alitheia/core/src/test/java/eu/sqooss/admin/test/SucceedingAction.java
    rename to alitheia/core/src/test/java/eu/sqooss/admin/SucceedingAction.java
    index 6dbbf44ec..666b1f51a 100644
    --- a/alitheia/core/src/test/java/eu/sqooss/admin/test/SucceedingAction.java
    +++ b/alitheia/core/src/test/java/eu/sqooss/admin/SucceedingAction.java
    @@ -1,4 +1,4 @@
    -package eu.sqooss.admin.test;
    +package eu.sqooss.admin;
     
     import eu.sqooss.service.admin.AdminActionBase;
     
    diff --git a/alitheia/core/src/test/java/eu/sqooss/impl/service/fds/InMemoryCheckoutImplTest.java b/alitheia/core/src/test/java/eu/sqooss/impl/service/fds/InMemoryCheckoutImplTest.java
    new file mode 100644
    index 000000000..a4ebd60f7
    --- /dev/null
    +++ b/alitheia/core/src/test/java/eu/sqooss/impl/service/fds/InMemoryCheckoutImplTest.java
    @@ -0,0 +1,71 @@
    +package eu.sqooss.impl.service.fds;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertNull;
    +import static org.mockito.Mockito.mock;
    +import static org.mockito.Mockito.when;
    +
    +import java.util.ArrayList;
    +
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectVersion;
    +
    +public class InMemoryCheckoutImplTest {
    +	static BundleContext bc;
    +	static AlitheiaCore core;
    +
    +	@BeforeClass
    +	public static void setUp() {
    +
    +		bc = mock(BundleContext.class);
    +		when(bc.getProperty("eu.sqooss.db")).thenReturn("H2");
    +		when(bc.getProperty("eu.sqooss.db.host")).thenReturn("localhost");
    +		when(bc.getProperty("eu.sqooss.db.schema")).thenReturn(
    +				"alitheia;LOCK_MODE=3;MULTI_THREADED=true");
    +		when(bc.getProperty("eu.sqooss.db.user")).thenReturn("sa");
    +		when(bc.getProperty("eu.sqooss.db.passwd")).thenReturn("");
    +		when(bc.getProperty("eu.sqooss.db.conpool")).thenReturn("c3p0");
    +
    +		core = new AlitheiaCore(bc);
    +	}
    +
    +	@Test
    +	public void getRootTest() {
    +		ProjectVersion pv = mock(ProjectVersion.class);
    +		when(pv.getFiles()).thenReturn(null);
    +		InMemoryCheckoutImpl checkout = new InMemoryCheckoutImpl(pv);
    +		assertEquals("", checkout.getRoot().getName());
    +	}
    +
    +	@Test
    +	public void getFileTest() {
    +		ProjectVersion pv = mock(ProjectVersion.class);
    +
    +		when(pv.getFiles()).thenReturn(null);
    +		InMemoryCheckoutImpl checkout = new InMemoryCheckoutImpl(pv);
    +
    +		assertNull(checkout.getFile("/folder//"));
    +	}
    +
    +	@Test
    +	public void getFilesTest() {
    +		ProjectVersion pv = mock(ProjectVersion.class);
    +		when(pv.getFiles()).thenReturn(null);
    +		InMemoryCheckoutImpl checkout = new InMemoryCheckoutImpl(pv);
    +
    +		assertEquals(new ArrayList<ProjectFile>(), checkout.getFiles());
    +	}
    +
    +	@Test
    +	public void getProjectVersionTest() {
    +		ProjectVersion pv = mock(ProjectVersion.class);
    +		InMemoryCheckoutImpl checkout = new InMemoryCheckoutImpl(pv);
    +		assertEquals(pv, checkout.getProjectVersion());
    +	}
    +
    +}
    diff --git a/alitheia/core/src/test/java/eu/sqooss/impl/service/webadmin/ProjectsViewTest.java b/alitheia/core/src/test/java/eu/sqooss/impl/service/webadmin/ProjectsViewTest.java
    new file mode 100644
    index 000000000..0318ebc22
    --- /dev/null
    +++ b/alitheia/core/src/test/java/eu/sqooss/impl/service/webadmin/ProjectsViewTest.java
    @@ -0,0 +1,72 @@
    +package eu.sqooss.impl.service.webadmin;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.mockito.Mockito.mock;
    +import static org.mockito.Mockito.when;
    +
    +import java.util.HashSet;
    +import java.util.Locale;
    +import java.util.Set;
    +
    +import javax.servlet.http.HttpServletRequest;
    +
    +import org.apache.velocity.VelocityContext;
    +import org.junit.Test;
    +import org.junit.runner.RunWith;
    +import org.osgi.framework.BundleContext;
    +import org.powermock.api.mockito.PowerMockito;
    +import org.powermock.core.classloader.annotations.PrepareForTest;
    +import org.powermock.modules.junit4.PowerMockRunner;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.service.cluster.ClusterNodeService;
    +import eu.sqooss.service.db.ClusterNode;
    +import eu.sqooss.service.db.StoredProject;
    +
    +@PrepareForTest(ClusterNode.class)
    +@RunWith(PowerMockRunner.class)
    +public class ProjectsViewTest {
    +	BundleContext bc;
    +	AlitheiaCore core;
    +
    +	public void setUp() {
    +		bc = mock(BundleContext.class);
    +		when(bc.getProperty("eu.sqooss.db")).thenReturn("H2");
    +		when(bc.getProperty("eu.sqooss.db.host")).thenReturn("localhost");
    +		when(bc.getProperty("eu.sqooss.db.schema")).thenReturn(
    +				"alitheia;LOCK_MODE=3;MULTI_THREADED=true");
    +		when(bc.getProperty("eu.sqooss.db.user")).thenReturn("sa");
    +		when(bc.getProperty("eu.sqooss.db.passwd")).thenReturn("");
    +		when(bc.getProperty("eu.sqooss.db.conpool")).thenReturn("c3p0");
    +
    +		core = new AlitheiaCore(bc);
    +
    +	}
    +
    +	@Test
    +	public void createFormTest() throws Exception {
    +		setUp();
    +		VelocityContext vc = mock(VelocityContext.class);
    +		new ProjectsView(bc, vc);
    +		
    +		HttpServletRequest req = mock(HttpServletRequest.class);
    +		when(req.getLocale()).thenReturn(new Locale("en_US"));
    +
    +		ClusterNode clusternode = mock(ClusterNode.class);
    +		Set<StoredProject> projects = new HashSet<StoredProject>();
    +		when(clusternode.getProjects()).thenReturn(projects);
    +		PowerMockito.mockStatic(ClusterNode.class);
    +		PowerMockito.when(ClusterNode.thisNode()).thenReturn(clusternode);
    +
    +		ClusterNodeService cnservice = mock(ClusterNodeService.class);
    +		when(cnservice.getClusterNodeName()).thenReturn("name");
    +		AbstractView.sobjClusterNode = cnservice;
    +		
    +		String output = ProjectsView.render(req);
    +		output = output.replaceAll("[\\n\\t]", "");
    +		output = output.replace("  ", "");
    +		
    +		String expected = "<form id=\"projects\" name=\"projects\" method=\"post\" action=\"/projects\"><table><thead><tr class=\"head\"><td class='head'style='width: 10%;'>Project Id</td><td class='head' style='width: 35%;'>Project Name</td><td class='head' style='width: 15%;'>Last Version</td><td class='head' style='width: 15%;'>Last Email</td><td class='head' style='width: 15%;'>Last Bug</td><td class='head' style='width: 10%;'>Evaluated</td><td class='head' style='width: 10%;'>Host</td></tr></thead><tr><td colspan=\"6\" class=\"noattr\">No projects found.</td></tr><tr class=\"subhead\"><td>View</td><td colspan=\"6\"><input type=\"button\" class=\"install\" style=\"width: 100px;\" value=\"Refresh\" onclick=\"javascript:window.location='/projects';\"></td></tr><tr class=\"subhead\"><td>Manage</td><td colspan='6'><input type=\"button\" class=\"install\" style=\"width: 100px;\" value=\"Add project\" onclick=\"javascript:document.getElementById('reqAction').value='reqAddProject';document.projects.submit();\"><input type=\"button\" class=\"install\" style=\"width: 100px;\" value=\"Delete project\" onclick=\"javascript:document.getElementById('reqAction').value='reqRemProject';document.projects.submit();\" disabled></td></tr><tr class='subhead'><td>Update</td><td colspan='4'><input type=\"button\" class=\"install\" value=\"Run Updater\" onclick=\"javascript:document.getElementById('reqAction').value='conUpdate';document.projects.submit();\" disabled><input type=\"button\" class=\"install\" value=\"Run All Updaters\" onclick=\"javascript:document.getElementById('reqAction').value='conUpdateAll';document.projects.submit();\" disabled></td><td colspan=\"2\" align=\"right\"><input type=\"button\" class=\"install\" value=\"Update all on name\" onclick=\"javascript:document.getElementById('reqAction').value='conUpdateAllOnNode';document.projects.submit();\"></td></tr></tbody></table></fieldset><input type='hidden' id='reqAction' name='reqAction' value=''><input type='hidden' id='projectId' name='projectId' value=''><input type='hidden' id='reqParSyncPlugin' name='reqParSyncPlugin' value=''></form>";
    +		assertEquals(expected, output);
    +	}
    +}
    diff --git a/alitheia/core/src/test/java/eu/sqooss/impl/service/webadmin/WebAdminRendererTest.java b/alitheia/core/src/test/java/eu/sqooss/impl/service/webadmin/WebAdminRendererTest.java
    new file mode 100644
    index 000000000..d0bb7367e
    --- /dev/null
    +++ b/alitheia/core/src/test/java/eu/sqooss/impl/service/webadmin/WebAdminRendererTest.java
    @@ -0,0 +1,136 @@
    +package eu.sqooss.impl.service.webadmin;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.mockito.Mockito.mock;
    +import static org.mockito.Mockito.when;
    +
    +import org.apache.velocity.VelocityContext;
    +import org.junit.Test;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +
    +public class WebAdminRendererTest {
    +
    +	BundleContext bc;
    +	AlitheiaCore core;
    +
    +	public void setUp() {
    +		bc = mock(BundleContext.class);
    +		when(bc.getProperty("eu.sqooss.db")).thenReturn("H2");
    +		when(bc.getProperty("eu.sqooss.db.host")).thenReturn("localhost");
    +		when(bc.getProperty("eu.sqooss.db.schema")).thenReturn(
    +				"alitheia;LOCK_MODE=3;MULTI_THREADED=true");
    +		when(bc.getProperty("eu.sqooss.db.user")).thenReturn("sa");
    +		when(bc.getProperty("eu.sqooss.db.passwd")).thenReturn("");
    +		when(bc.getProperty("eu.sqooss.db.conpool")).thenReturn("c3p0");
    +
    +		core = new AlitheiaCore(bc);
    +	}
    +
    +	@Test
    +	public void renderJobFailedStatsTest1() {
    +		setUp();
    +		VelocityContext vc = mock(VelocityContext.class);
    +		new WebAdminRenderer(bc, vc);
    +
    +		StringBuilder expected = new StringBuilder();
    +		expected.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">");
    +		expected.append("<thead>");
    +		expected.append("<tr>");
    +		expected.append("<td>Job Type</td>");
    +		expected.append("<td>Num Jobs Failed</td>");
    +		expected.append("</tr>");
    +		expected.append("</thead>");
    +		expected.append("<tbody>");
    +		expected.append("<tr>");
    +		expected.append("<td>No failures</td>");
    +		expected.append("<td>&nbsp;</td>");
    +		expected.append("</tr></tbody>");
    +		expected.append("</table>");
    +
    +		String output = WebAdminRenderer.renderJobFailStats();
    +		output = output.replaceAll("[\\t\\n]", "");
    +		assertEquals(expected.toString(), output);
    +	}
    +
    +	@Test
    +	public void renderJobWaitFailedTest2() {
    +		setUp();
    +		VelocityContext vc = mock(VelocityContext.class);
    +		new WebAdminRenderer(bc, vc);
    +		AbstractView.sobjSched.getSchedulerStats().addFailedJob("name");
    +		
    +		StringBuilder expected = new StringBuilder();
    +		expected.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">");
    +		expected.append("<thead>");
    +		expected.append("<tr>");
    +		expected.append("<td>Job Type</td>");
    +		expected.append("<td>Num Jobs Failed</td>");
    +		expected.append("</tr>");
    +		expected.append("</thead>");
    +		expected.append("<tbody>");
    +		expected.append("<tr>");
    +		expected.append("<td>name</td>");
    +		expected.append("<td>1</td>");
    +		expected.append("</tr></tbody>");
    +		expected.append("</table>");
    +		
    +		String output = WebAdminRenderer.renderJobFailStats();
    +		output = output.replaceAll("[\\t\\n]", "");
    +		assertEquals(expected.toString(), output);
    +	}
    +	
    +	@Test
    +	public void renderJobWaitStatsTest() {
    +		setUp();
    +		VelocityContext vc = mock(VelocityContext.class);
    +		new WebAdminRenderer(bc, vc);
    +
    +		StringBuilder expected = new StringBuilder();
    +		expected.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">");
    +		expected.append("<thead>");
    +		expected.append("<tr>");
    +		expected.append("<td>Job Type</td>");
    +		expected.append("<td>Num Jobs Waiting</td>");
    +		expected.append("</tr>");
    +		expected.append("</thead>");
    +		expected.append("<tbody>");
    +		expected.append("<tr>");
    +		expected.append("<td>No failures</td>");
    +		expected.append("<td>&nbsp;</td>");
    +		expected.append("</tr></tbody>");
    +		expected.append("</table>");
    +
    +		String output = WebAdminRenderer.renderJobWaitStats();
    +		output = output.replaceAll("[\\t\\n]", "");
    +		assertEquals(expected.toString(), output);
    +	}
    +	
    +	@Test
    +	public void renderJobWaitStatsTest2() {
    +		setUp();
    +		VelocityContext vc = mock(VelocityContext.class);
    +		new WebAdminRenderer(bc, vc);
    +		AbstractView.sobjSched.getSchedulerStats().addWaitingJob("name");
    +		
    +		StringBuilder expected = new StringBuilder();
    +		expected.append("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">");
    +		expected.append("<thead>");
    +		expected.append("<tr>");
    +		expected.append("<td>Job Type</td>");
    +		expected.append("<td>Num Jobs Waiting</td>");
    +		expected.append("</tr>");
    +		expected.append("</thead>");
    +		expected.append("<tbody>");
    +		expected.append("<tr>");
    +		expected.append("<td>name</td>");
    +		expected.append("<td>1</td>");
    +		expected.append("</tr></tbody>");
    +		expected.append("</table>");
    +		
    +		String output = WebAdminRenderer.renderJobWaitStats();
    +		output = output.replaceAll("[\\t\\n]", "");
    +		assertEquals(expected.toString(), output);
    +	}
    +}
    diff --git a/alitheia/core/src/test/java/eu/sqooss/service/fds/InMemoryDirectoryTest.java b/alitheia/core/src/test/java/eu/sqooss/service/fds/InMemoryDirectoryTest.java
    new file mode 100644
    index 000000000..3ec3e666c
    --- /dev/null
    +++ b/alitheia/core/src/test/java/eu/sqooss/service/fds/InMemoryDirectoryTest.java
    @@ -0,0 +1,146 @@
    +package eu.sqooss.service.fds;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertFalse;
    +import static org.junit.Assert.assertNull;
    +import static org.junit.Assert.assertTrue;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +
    +import org.junit.Test;
    +
    +public class InMemoryDirectoryTest {
    +
    +	@Test
    +	public void getNameNoNameTest() {
    +		InMemoryDirectory dir = new InMemoryDirectory();
    +		assertEquals("", dir.getName());
    +	}
    +
    +	@Test
    +	public void getNameTest1() {
    +		InMemoryDirectory dir = new InMemoryDirectory("the name");
    +		assertEquals("the name", dir.getName());
    +	}
    +
    +	@Test
    +	public void getNameTest2() {
    +		InMemoryDirectory dir = new InMemoryDirectory(null, "a name");
    +		assertEquals("a name", dir.getName());
    +	}
    +
    +	@Test
    +	public void getNameNullTest() {
    +		String name = null;
    +		InMemoryDirectory dir = new InMemoryDirectory(name);
    +		assertNull(dir.getName());
    +	}
    +
    +	@Test
    +	public void getPathTest1() {
    +		InMemoryDirectory dir = new InMemoryDirectory("folder");
    +		assertEquals("/folder", dir.getPath());
    +	}
    +
    +	@Test
    +	public void getPathTest2() {
    +		InMemoryDirectory parent = new InMemoryDirectory("folder");
    +		InMemoryDirectory dir = new InMemoryDirectory(parent, "subfolder");
    +		assertEquals("/folder/subfolder", dir.getPath());
    +	}
    +
    +	@Test
    +	public void getParentDirectoryTest1() {
    +		InMemoryDirectory dir = new InMemoryDirectory("folder");
    +		assertEquals(null, dir.getParentDirectory());
    +	}
    +
    +	@Test
    +	public void getParentDirectoryTest2() {
    +		InMemoryDirectory parent = new InMemoryDirectory("folder");
    +		InMemoryDirectory dir = new InMemoryDirectory(parent, "subfolder");
    +		assertEquals(parent, dir.getParentDirectory());
    +	}
    +
    +	@Test
    +	public void getSubDirectoriesTest() {
    +		InMemoryDirectory dir = new InMemoryDirectory("folder");
    +		List<InMemoryDirectory> list = new ArrayList<InMemoryDirectory>();
    +		assertEquals(list, dir.getSubDirectories());
    +	}
    +
    +	@Test
    +	public void getFileNames() {
    +		InMemoryDirectory dir = new InMemoryDirectory();
    +		List<String> list = new ArrayList<String>();
    +		assertEquals(list, dir.getFileNames());
    +	}
    +
    +	@Test
    +	public void pathExistsTest() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		assertEquals(true, dir.pathExists(null));
    +	}
    +
    +	@Test
    +	public void addFileTest() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		dir.addFile("file.txt");
    +		assertTrue(dir.getFileNames().contains("file.txt"));
    +	}
    +
    +	@Test
    +	public void deleteFileTest() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		dir.addFile("file.txt");
    +		dir.deleteFile("file.txt");
    +		assertFalse(dir.getFileNames().contains("file.txt"));
    +	}
    +
    +	@Test
    +	public void getSubdirectoryByNameTest1() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		assertEquals(dir, dir.getSubdirectoryByName(null));
    +		assertEquals(dir, dir.getSubdirectoryByName(""));
    +	}
    +
    +	@Test
    +	public void getSubdirectoryByNameTest2() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		assertEquals(null, dir.getSubdirectoryByName("folder"));
    +	}
    +
    +	@Test
    +	public void createSubDirectoryTest1() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		dir.createSubDirectory("subfolder");
    +		assertEquals("subfolder", dir.getSubdirectoryByName("subfolder")
    +				.getName());
    +	}
    +
    +	@Test
    +	public void createSubDirectoryTest2() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		dir.createSubDirectory("subfolder/subsubfolder");
    +
    +		InMemoryDirectory subdir = dir.getSubdirectoryByName("subfolder");
    +
    +		assertEquals(1, dir.getSubDirectories().size());
    +		assertEquals("subsubfolder",
    +				subdir.getSubdirectoryByName("subsubfolder").getName());
    +	}
    +
    +	@Test
    +	public void toStringNoIndentationTest() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		assertEquals("name\n", dir.toString());
    +	}
    +
    +	@Test
    +	public void toStringWithIndentationTest() {
    +		InMemoryDirectory dir = new InMemoryDirectory("name");
    +		dir.createSubDirectory("subfolder/subsubfolder");
    +		assertEquals("name\n subfolder\n  subsubfolder\n", dir.toString());
    +	}
    +}
    diff --git a/alitheia/core/src/test/java/eu/sqooss/service/scheduler/SchedulerStatsTests.java b/alitheia/core/src/test/java/eu/sqooss/service/scheduler/SchedulerStatsTests.java
    new file mode 100644
    index 000000000..3597d0c1a
    --- /dev/null
    +++ b/alitheia/core/src/test/java/eu/sqooss/service/scheduler/SchedulerStatsTests.java
    @@ -0,0 +1,124 @@
    +package eu.sqooss.service.scheduler;
    +
    +import static org.junit.Assert.assertEquals;
    +
    +import java.util.HashMap;
    +import java.util.Map;
    +
    +import org.junit.Test;
    +
    +public class SchedulerStatsTests {
    +	@Test
    +	public void initTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		assertEquals(0, stats.getFailedJobs());
    +		assertEquals(0, stats.getWaitingJobs());
    +		assertEquals(0, stats.getRunJobs().size());
    +	}
    +
    +	@Test
    +	public void addFailedJobTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		stats.addFailedJob("job 1");
    +
    +		assertEquals(1, stats.getFailedJobs());
    +		Map<String, Integer> map = new HashMap<String, Integer>();
    +		map.put("job 1", 1);
    +		assertEquals(map, stats.getFailedJobTypes());
    +	}
    +
    +	@Test
    +	public void addMultipleFailedJobsTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		stats.addFailedJob("job 1");
    +		stats.addFailedJob("job 2");
    +		stats.addFailedJob("job 3");
    +
    +		Map<String, Integer> map = new HashMap<String, Integer>();
    +		map.put("job 1", 1);
    +		map.put("job 2", 1);
    +		map.put("job 3", 1);
    +
    +		assertEquals(map, stats.getFailedJobTypes());
    +		assertEquals(3, stats.getFailedJobs());
    +
    +		stats.addFailedJob("job 1");
    +		map.put("job 1", 2);
    +
    +		assertEquals(map, stats.getFailedJobTypes());
    +		assertEquals(4, stats.getFailedJobs());
    +	}
    +
    +	@Test
    +	public void addWaitingJobTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		stats.addWaitingJob("job 1");
    +
    +		assertEquals(1, stats.getWaitingJobs());
    +		Map<String, Integer> map = new HashMap<String, Integer>();
    +		map.put("job 1", 1);
    +		assertEquals(map, stats.getWaitingJobTypes());
    +		assertEquals(1, stats.getWaitingJobs());
    +	}
    +
    +	@Test
    +	public void addMultipleWaitingJobsTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		stats.addWaitingJob("a");
    +		stats.addWaitingJob("b");
    +		stats.addWaitingJob("c");
    +
    +		Map<String, Integer> map = new HashMap<String, Integer>();
    +		map.put("a", 1);
    +		map.put("b", 1);
    +		map.put("c", 1);
    +
    +		assertEquals(map, stats.getWaitingJobTypes());
    +		assertEquals(3, stats.getWaitingJobs());
    +
    +		stats.addWaitingJob("a");
    +		map.put("a", 2);
    +
    +		assertEquals(map, stats.getWaitingJobTypes());
    +		assertEquals(4, stats.getWaitingJobs());
    +	}
    +
    +	@Test
    +	public void removeWaitingJobTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		stats.addWaitingJob("a");
    +		stats.addWaitingJob("b");
    +		stats.addWaitingJob("b");
    +		stats.addWaitingJob("c");
    +
    +		Map<String, Integer> map = new HashMap<String, Integer>();
    +		map.put("b", 1);
    +		map.put("c", 1);
    +
    +		stats.removeWaitingJob("a");
    +		stats.removeWaitingJob("b");
    +
    +		assertEquals(map, stats.getWaitingJobTypes());
    +		assertEquals(2, stats.getWaitingJobs());
    +	}
    +
    +	/**
    +	 * This test might expect unintended behavior.
    +	 */
    +	@Test
    +	public void removeToMuchJobsTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		stats.removeWaitingJob("a");
    +		stats.removeWaitingJob("b");
    +
    +		assertEquals(0, stats.getWaitingJobs());
    +	}
    +
    +	@Test
    +	public void getRunJobsTest() {
    +		SchedulerStats stats = new SchedulerStats();
    +		TestJob job1 = new TestJob(2, "job 1");
    +		stats.addRunJob(job1);
    +		assertEquals(1, stats.getRunJobs().size());
    +	}
    +}
    diff --git a/alitheia/core/src/test/java/eu/sqooss/service/scheduler/SchedulerTests.java b/alitheia/core/src/test/java/eu/sqooss/service/scheduler/SchedulerTests.java
    new file mode 100644
    index 000000000..8709dcd14
    --- /dev/null
    +++ b/alitheia/core/src/test/java/eu/sqooss/service/scheduler/SchedulerTests.java
    @@ -0,0 +1,60 @@
    +package eu.sqooss.service.scheduler;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertTrue;
    +
    +import org.junit.AfterClass;
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +
    +import eu.sqooss.impl.service.scheduler.SchedulerServiceImpl;
    +import eu.sqooss.service.scheduler.Job.State;
    +
    +public class SchedulerTests {
    +
    +	static SchedulerServiceImpl sched;
    +
    +	@BeforeClass
    +	public static void setUp() {
    +		sched = new SchedulerServiceImpl();
    +		sched.startExecute(2);
    +	}
    +
    +	@Test
    +	public void testJobYield() throws SchedulerException, InterruptedException {
    +
    +		TestJob j1 = new TestJob(20, "Test");
    +		sched.enqueue(j1);
    +		TestJob j2 = new TestJob(20, "Test");
    +		sched.enqueue(j2);
    +		TestJob j3 = new TestJob(20, "Test");
    +		sched.enqueue(j3);
    +		TestJob j4 = new TestJob(20, "Test");
    +		sched.enqueue(j4);
    +
    +		assertTrue(sched.isExecuting());
    +
    +		assertEquals(0, sched.getSchedulerStats().getFailedJobs());
    +		assertEquals(0, sched.getSchedulerStats().getFinishedJobs());
    +		assertEquals(4, sched.getSchedulerStats().getWaitingJobs());
    +		
    +		sched.jobStateChanged(j1, State.Running);
    +		sched.jobStateChanged(j2, State.Running);
    +		sched.jobStateChanged(j3, State.Running);
    +		sched.jobStateChanged(j4, State.Running);
    +		
    +	}
    +
    +	@AfterClass
    +	public static void tearDown() {
    +		while (sched.getSchedulerStats().getWaitingJobs() > 0) {
    +			try {
    +				Thread.sleep(500);
    +				System.out.println("jobs in schedule: "
    +						+ sched.getSchedulerStats().getWaitingJobs());
    +			} catch (InterruptedException e) {
    +			}
    +		}
    +		sched.stopExecute();
    +	}
    +}
    \ No newline at end of file
    diff --git a/alitheia/core/src/test/java/eu/sqooss/test/service/scheduler/TestJob.java b/alitheia/core/src/test/java/eu/sqooss/service/scheduler/TestJob.java
    similarity index 96%
    rename from alitheia/core/src/test/java/eu/sqooss/test/service/scheduler/TestJob.java
    rename to alitheia/core/src/test/java/eu/sqooss/service/scheduler/TestJob.java
    index f9d8bc4fb..4dd60d427 100644
    --- a/alitheia/core/src/test/java/eu/sqooss/test/service/scheduler/TestJob.java
    +++ b/alitheia/core/src/test/java/eu/sqooss/service/scheduler/TestJob.java
    @@ -31,9 +31,8 @@
      *
      */
     
    -package eu.sqooss.test.service.scheduler;
    +package eu.sqooss.service.scheduler;
     
    -import eu.sqooss.service.scheduler.Job;
     
     /**
      * This a test job class.
    diff --git a/alitheia/core/src/test/java/eu/sqooss/test/service/scheduler/SchedulerTests.java b/alitheia/core/src/test/java/eu/sqooss/test/service/scheduler/SchedulerTests.java
    deleted file mode 100644
    index f30f92f84..000000000
    --- a/alitheia/core/src/test/java/eu/sqooss/test/service/scheduler/SchedulerTests.java
    +++ /dev/null
    @@ -1,42 +0,0 @@
    -package eu.sqooss.test.service.scheduler;
    -
    -import org.junit.AfterClass;
    -import org.junit.BeforeClass;
    -import org.junit.Test;
    -
    -import eu.sqooss.impl.service.scheduler.SchedulerServiceImpl;
    -import eu.sqooss.service.scheduler.SchedulerException;
    -
    -public class SchedulerTests {
    -    
    -    static SchedulerServiceImpl sched;
    -    
    -    @BeforeClass
    -    public static void setUp() {
    -        sched = new SchedulerServiceImpl();
    -        sched.startExecute(2);
    -    }
    -
    -    @Test
    -    public void testJobYield() throws SchedulerException {
    -        
    -        TestJob j1 = new TestJob(20, "Test");
    -        sched.enqueue(j1);
    -        TestJob j2 = new TestJob(20, "Test");
    -        sched.enqueue(j2);
    -        TestJob j3 = new TestJob(20, "Test");
    -        sched.enqueue(j3);
    -        TestJob j4 = new TestJob(20, "Test");
    -        sched.enqueue(j4);
    -    }
    -    
    -    @AfterClass
    -    public static void tearDown() {
    -        while (sched.getSchedulerStats().getWaitingJobs() > 0)
    -            try {
    -                Thread.sleep(500);
    -            } catch (InterruptedException e) {}
    -            
    -        sched.stopExecute();
    -    }
    -}
    \ No newline at end of file
    diff --git a/metrics/contrib/maven-eclipse.xml b/metrics/contrib/maven-eclipse.xml
    new file mode 100644
    index 000000000..9ff04ecea
    --- /dev/null
    +++ b/metrics/contrib/maven-eclipse.xml
    @@ -0,0 +1,8 @@
    +<project default="copy-resources">
    +  <target name="init"/>
    +  <target name="copy-resources" depends="init">
    +    <copy todir="target/classes/eu/sqooss/service/db" filtering="false">
    +      <fileset dir="src/main/java/eu/sqooss/metrics/contrib/db" includes="**/*.xml" excludes="**/*.java"/>
    +    </copy>
    +  </target>
    +</project>
    \ No newline at end of file
    diff --git a/metrics/contrib/src/main/java/eu/sqooss/metrics/contrib/ContributionMetricImpl.java b/metrics/contrib/src/main/java/eu/sqooss/metrics/contrib/ContributionMetricImpl.java
    index 5d6042bef..c258f8cb7 100644
    --- a/metrics/contrib/src/main/java/eu/sqooss/metrics/contrib/ContributionMetricImpl.java
    +++ b/metrics/contrib/src/main/java/eu/sqooss/metrics/contrib/ContributionMetricImpl.java
    @@ -56,9 +56,11 @@
     import eu.sqooss.service.abstractmetric.AbstractMetric;
     import eu.sqooss.service.abstractmetric.AlitheiaPlugin;
     import eu.sqooss.service.abstractmetric.AlreadyProcessingException;
    +import eu.sqooss.service.abstractmetric.MetricActivationException;
     import eu.sqooss.service.abstractmetric.MetricDecl;
     import eu.sqooss.service.abstractmetric.MetricDeclarations;
     import eu.sqooss.service.abstractmetric.MetricMismatchException;
    +import eu.sqooss.service.abstractmetric.PluginInfo;
     import eu.sqooss.service.abstractmetric.Result;
     import eu.sqooss.service.abstractmetric.Result.ResultType;
     import eu.sqooss.service.db.Bug;
    @@ -72,442 +74,445 @@
     import eu.sqooss.service.db.MailingListThread;
     import eu.sqooss.service.db.Metric;
     import eu.sqooss.service.db.MetricType;
    +import eu.sqooss.service.db.MetricType.Type;
     import eu.sqooss.service.db.PluginConfiguration;
     import eu.sqooss.service.db.ProjectFile;
     import eu.sqooss.service.db.ProjectVersion;
     import eu.sqooss.service.db.StoredProject;
    -import eu.sqooss.service.db.MetricType.Type;
     import eu.sqooss.service.fds.FileTypeMatcher;
    -import eu.sqooss.service.metricactivator.MetricActivationException;
    -import eu.sqooss.service.pa.PluginInfo;
     import eu.sqooss.service.tds.Diff;
     import eu.sqooss.service.tds.DiffChunk;
     import eu.sqooss.service.tds.SCMAccessor;
     
    -@MetricDeclarations(metrics={
    -    @MetricDecl(mnemonic="CONTRIB", descr="Developer Contribution Metric",
    -            dependencies={"Wc.loc"}, 
    -            activators={Developer.class, ProjectVersion.class, 
    -                        MailingListThread.class, Bug.class})
    -})
    +@MetricDeclarations(metrics = { @MetricDecl(mnemonic = "CONTRIB", descr = "Developer Contribution Metric", dependencies = { "Wc.loc" }, activators = {
    +		Developer.class, ProjectVersion.class, MailingListThread.class,
    +		Bug.class }) })
     public class ContributionMetricImpl extends AbstractMetric {
     
    -     /** Number of files after which a commit is considered too big */
    -    public static final String CONFIG_CMF_THRES = "CMF_threshold";
    -    
    -    /** Name of the measurement*/
    -    public static final String METRIC_CONTRIB = "CONTRIB";
    -    
    -    public ContributionMetricImpl(BundleContext bc) {
    -        super(bc);
    -    }
    -    
    -    public boolean install() {
    -    	 boolean result = super.install();
    -         if (result) {
    -             addConfigEntry(CONFIG_CMF_THRES, 
    -                 "5" , 
    -                 "Number of committed files above which the developer is " +
    -                 "penalized", 
    -                 PluginInfo.ConfigurationType.INTEGER);
    -         }
    -         return result;
    -    }
    -    
    -    public boolean remove() {
    -        boolean result = true;
    -        
    -        String[] tables = { "ContribAction",
    -                           "ContribActionType"};
    -        
    -        for (String tablename : tables) {
    -            result &= db.deleteRecords((List<DAObject>) db.doHQL(
    -                    "from " + tablename));
    -        }
    -        
    -        result &= super.remove();
    -        return result;
    -    }
    -    
    -    /**{@inheritDoc}*/
    -    public boolean cleanup(DAObject sp) {
    -        boolean result = true;
    -        
    -        if (!(sp instanceof StoredProject)) {
    -            log.warn("We only support cleaning up per stored project for now");
    -            return false;
    -        }
    -        result &= cleanupResource (((StoredProject)sp).getProjectVersions(), 
    -                ActionCategory.C);
    -        result &= cleanupResource(((StoredProject)sp).getBugs(), 
    -                ActionCategory.B);
    -        
    -        Set<MailingList> mlists = ((StoredProject) sp).getMailingLists();
    -        for (MailingList ml : mlists) {
    -            result &= cleanupResource(ml.getMessages(), ActionCategory.M);            
    -        }
    -       
    -        return result;
    -    }
    -
    -    private boolean cleanupResource (Collection<? extends DAObject> c, 
    -            ActionCategory ac) {
    -        
    -        Map<String,Object> params = new HashMap<String,Object>();
    -        boolean result = false;
    -        
    -        for(DAObject o : c) {
    -            params.put("changedResourceId", o.getId());
    -            params.put("actionCategory", ac.toString());
    -            List<ContribAction> pas = 
    -                db.findObjectsByProperties(ContribAction.class, params);
    -            if (!pas.isEmpty()) {
    -                for (ContribAction pa : pas) {
    -                    result &= db.deleteRecord(pa);
    -                }
    -            }
    -            params.clear();
    -        }
    -        return result;
    -    }
    -
    -    @Override
    -    public Map<MetricType.Type, SortedSet<Long>> getObjectIdsToSync(StoredProject sp, Metric m) 
    -    	throws MetricActivationException {
    -    	Map<MetricType.Type, SortedSet<Long>> IDs = new HashMap<Type, SortedSet<Long>>();
    -    	Map<String, Object> params = new HashMap<String, Object>();
    -    	params.put("sp", sp);
    -    	
    -    	String qVersionIDs = "select pv.id from ProjectVersion pv where pv.id not in (select ca.changedResourceId from ContribAction ca where developer.storedProject =:sp and ca.contribActionType.actionCategory='C') and pv.project = :sp order by pv.sequence";
    -    	List<Long> objectIds = (List<Long>) db.doHQL(qVersionIDs, params);
    -    	TreeSet<Long> ids = new TreeSet<Long>();
    -    	ids.addAll(objectIds);
    -    	IDs.put(MetricType.Type.PROJECT_VERSION, ids);
    -    	
    -    	String qThreadIDs = "select mlt.id from MailingListThread mlt where mlt.id not in (select ca.changedResourceId from ContribAction ca where developer.storedProject =:sp and ca.contribActionType.actionCategory='M') and mlt.list.storedProject = :sp order by mlt.lastUpdated";
    -    	objectIds = (List<Long>) db.doHQL(qThreadIDs, params);
    -    	ids = new TreeSet<Long>();
    -    	ids.addAll(objectIds);
    -    	IDs.put(MetricType.Type.MAILTHREAD, ids);
    -    	
    -    	String qBugIDs = "select b.id from Bug b where b.id not in (select ca.changedResourceId from ContribAction ca where developer.storedProject =:sp and ca.contribActionType.actionCategory='B') and b.project = :sp order by b.updateRun";
    -    	objectIds = (List<Long>) db.doHQL(qBugIDs, params);
    -    	ids = new TreeSet<Long>();
    -    	ids.addAll(objectIds);
    -    	IDs.put(MetricType.Type.BUG, ids);
    -    	
    -    	return IDs;
    -    }
    -    
    -    /*
    -     * The following methods are dummy implementations that just
    -     * check if a result has been calculated for the provided
    -     * DAO or not. 
    -     */
    -    public List<Result> getResult(ProjectVersion a, Metric m) {
    -       return checkResult(a, ActionCategory.C, m);
    -    }
    -    
    -    public List<Result> getResult(MailingListThread mm, Metric m) {
    -        return checkResult(mm, ActionCategory.M, m);
    -    }
    -    
    -    public List<Result> getResult(Bug b, Metric m) {
    -        return checkResult(b, ActionCategory.B, m);
    -    }
    -    
    -    private List<Result> checkResult(DAObject o, ActionCategory ac, 
    -            Metric m) {
    -        ArrayList<Result> res = new ArrayList<Result>();
    -        
    -        if (getResult(o) == null)
    -            return null;
    -
    -        //Return a dummy result to indicate successful run on this 
    -        //project resource
    -        res.add(new Result(o, m, "1", ResultType.INTEGER));
    -        return res;
    -    }
    -
    -    private ContribAction getResult(DAObject o) {
    -        String paramChResource = "paramChResource";
    -        String paramActionCategory = "paramActionCategory";
    -        
    -        String query = "select ca " +
    -            "from ContribAction ca, ContribActionType cat " +
    -            " where ca.contribActionType = cat " +
    -            " and cat.actionCategory = :" + paramActionCategory +
    -            " and ca.changedResourceId = :" + paramChResource ;
    -        
    -        Map<String,Object> parameters = new HashMap<String,Object>();
    -        parameters.put(paramChResource, o.getId());
    -        
    -        if (o instanceof MailingListThread || o instanceof MailMessage) {
    -            parameters.put(paramActionCategory, ActionCategory.M.toString());
    -        } else if (o instanceof ProjectVersion) {
    -            parameters.put(paramActionCategory, ActionCategory.C.toString());
    -        } else if (o instanceof Bug) {
    -            parameters.put(paramActionCategory, ActionCategory.B.toString());
    -        } 
    -
    -        List<ContribAction> lp = (List<ContribAction>) db.doHQL(query, parameters, 1);
    -    
    -        if (lp == null || lp.isEmpty()) {
    -            return null;
    -        }
    -        
    -        return lp.get(0);
    -    }
    -
    -    /*
    -     * This plug-in's result is only returned per developer. 
    -     */
    -    public List<Result> getResult(Developer d, Metric m) {
    -        ArrayList<Result> results = new ArrayList<Result>();
    -        ProjectVersion newestPV = ProjectVersion.getLastProjectVersion(d.getStoredProject());
    -        
    -        double result = 0;
    -        
    -        //Get a list of action types that have been recorded per project 
    -        //until the newest project version
    -        for (ContribActionType cat : 
    -            ContribActionType.getProjectActionTypes(d.getStoredProject(), newestPV.getDate())) {
    -            long total = ContribAction.getTotalActionsPerTypePerProject(d.getStoredProject(), newestPV.getDate(), cat);
    -            long perDev = ContribAction.getDevActionsPerType(d, newestPV.getDate(), cat);
    -            
    -            if (total != 0) { 
    -                if (cat.getIsPositive()) {
    -                    result += (double)(perDev / total);
    -                } else {
    -                    result -= (double)(perDev / total);
    -                }
    -            }
    -        }
    -
    -        Result re = new Result(d, m, result, Result.ResultType.DOUBLE);
    -        results.add(re);
    -        
    -        return results;
    -    }
    -
    -    public void run(Developer v) throws AlreadyProcessingException {}
    -    
    -    public void run(Bug b) throws AlreadyProcessingException {
    -        updateField(b, b.getReporter(), ActionType.BRP, true, 1);
    -        
    -        if (b.getResolution().equals(BugResolution.Resolution.DUPLICATE))
    -            updateField(b, b.getReporter(), ActionType.BDUP, true, 1);
    -        
    -        for(BugReportMessage brm : b.getReportMessages()) {
    -            updateField(b, brm.getReporter(), ActionType.BCC, true, 1);
    -        }
    -    }
    -
    -    public void run(MailingListThread t) throws AlreadyProcessingException {
    -        Metric contrib = Metric.getMetricByMnemonic(METRIC_CONTRIB);
    -        List<MailMessage> emails = t.getMessagesByArrivalOrder();
    -        MailMessage lastProcessed = null;
    -        
    -        //Find the last email in this thread
    -        //that has been processed in a previous invocation. Avoid 
    -        //scanning threads with just one email.
    -        for (int i = emails.size() - 1; i > 0; i--) { 
    -            //Find first email whose contrib action is not null
    -            ContribAction old = getResult(emails.get(i));
    -            if (old != null) {
    -                lastProcessed = DAObject.loadDAObyId(
    -                        old.getChangedResourceId(), MailMessage.class);
    -            }
    -        }
    -        
    -        for (MailMessage mm : emails) {
    -            ContribAction ca = getResult(mm);
    -            if (ca!= null) {
    -                //This mail has been processed again, check if the
    -                //email that closes the thread has been updated
    -                if (lastProcessed != null && mm.equals(lastProcessed)) {
    -                    ContribAction oldCa = ContribAction.getContribAction(
    -                            lastProcessed.getSender(), lastProcessed.getId(),
    -                            ContribActionType.getContribActionType(
    -                                    ActionType.MCT, true));
    -                    if (oldCa != null) {
    -                        oldCa.setTotal(oldCa.getTotal() - 1);
    -                    }
    -                }
    -                continue;
    -            }
    -                        
    -            if (mm.getParent() == null) {
    -                //New thread
    -                updateField(mm, mm.getSender(), ActionType.MST, true, 1);
    -            } else {
    -                if (mm.getDepth() == 1) {
    -                  //First reply to a thread
    -                    MailMessage firstMessage = t.getMessagesAtLevel(1).get(0);
    -                    if (firstMessage.equals(mm))
    -                        updateField(mm, mm.getSender(), ActionType.MFR, true, 1);
    -                }
    -                
    -                if (mm.equals(emails.get(emails.size() - 1))) {
    -                    //Mail that closes a thread
    -                    updateField(mm, mm.getSender(), ActionType.MCT, true, 1);
    -                }
    -            }
    -            
    -            //updateField(mm, mm.getSender(), ActionType.MSE, true, 1);
    -        }
    -    }
    -    
    -    public void run(ProjectVersion pv) throws AlreadyProcessingException {
    -        /* Read config options in advance*/        
    -        FileTypeMatcher.FileType fType;
    -        Developer dev = pv.getCommitter();
    -        Set<ProjectFile> projectFiles = pv.getVersionFiles();
    -        List<Metric> locMetric = new ArrayList<Metric>();
    -        AlitheiaPlugin plugin = AlitheiaCore.getInstance().getPluginAdmin().getImplementingPlugin("Wc.loc");
    -        
    -        if (plugin != null) {
    -            locMetric.add(Metric.getMetricByMnemonic("Wc.loc"));
    -        } else {
    -            err("Could not find the WC plugin", pv);
    -            return;
    -        }
    -        
    -        int numFilesThreshold;
    -        
    -        PluginConfiguration config = getConfigurationOption(
    -                ContributionMetricImpl.CONFIG_CMF_THRES);
    -        
    -        if (config == null || 
    -                Integer.parseInt(config.getValue()) <= 0) {
    -            err("Plug-in configuration option " 
    -            		+ ContributionMetricImpl.CONFIG_CMF_THRES 
    -                    + " not found", pv);
    -            return; 
    -        } else {
    -            numFilesThreshold = Integer.parseInt(config.getValue());
    -        }    
    -        
    -        Pattern bugNumberLabel = Pattern.compile("\\A.*(pr:|bug:).*\\Z",
    -                Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
    -
    -        Pattern pHatLabel = Pattern.compile(
    -                "\\A.*(ph:|pointy hat|p?hat:).*\\Z", Pattern.CASE_INSENSITIVE
    -                        | Pattern.MULTILINE | Pattern.DOTALL);
    -        Matcher m;
    -
    -        //Commit message is empty
    -        if (pv.getCommitMsg().length() == 0) {
    -            updateField(pv, dev, ActionType.CEC, false, 1);
    -        } else {
    -            //Commit contains a bug report number
    -            m = bugNumberLabel.matcher(pv.getCommitMsg());
    -            if (m.matches()) {
    -                updateField(pv, dev, ActionType.CBN, true, 1);
    -            }
    -            //Commit awards a pointy hat
    -            m = pHatLabel.matcher(pv.getCommitMsg());
    -            if (m.matches()) {
    -                updateField(pv, dev, ActionType.CPH, true, 1);
    -            }
    -        }
    -        
    -        //Commit more files in a commit than the provided threshold
    -        if (projectFiles.size() > numFilesThreshold) {
    -            updateField(pv, dev, ActionType.CMF, false, 1);
    -        }
    -
    -        FileTypeMatcher ftm = FileTypeMatcher.getInstance();
    -        Iterator<ProjectFile> i = projectFiles.iterator();
    -        
    -        while (i.hasNext()) {
    -            ProjectFile pf = i.next();
    -            
    -            if (pf.getIsDirectory()) {
    -                //New directory added
    -                if (pf.isAdded()) {
    -                    updateField(pv, dev, ActionType.CND, true, 1);
    -                }
    -                continue;
    -            }
    -            
    -            fType = ftm.getFileType(pf.getFileName());
    -            
    -            if (pf.getCopyFrom() != null) {
    -                debug("Ignoring copied file " + pf, pf.getProjectVersion());
    -                continue;
    -            }
    -            
    -            //Commit of a source file
    -            if (ftm.isTextType(pf.getFileName())) {
    -                //Source file changed, calc number of lines commited
    -                try {
    -                    if (pf.isDeleted()) {
    -                    	int locPrev = getLOCResult(pf.getPreviousFileVersion(), plugin, locMetric);
    -                        updateField(pv, dev, ActionType.CREM, true, locPrev);
    -                    } else if(pf.isReplaced()) {
    -                    	int locPrev = getLOCResult(pf.getPreviousFileVersion(), plugin, locMetric);
    -                        updateField(pv, dev, ActionType.CREM, true, locPrev);
    -                        updateField(pv, dev, ActionType.CNS, true, 1);
    -                        updateField(pv, dev, ActionType.CADD, true, 
    -                        		getLOCResult(pf, plugin, locMetric));
    -                    }
    -                    //Source file just added
    -                    else if (pf.isAdded()) {
    -                        updateField(pv, dev, ActionType.CNS, true, 1);
    -                        updateField(pv, dev, ActionType.CADD, true, 
    -                        		getLOCResult(pf, plugin, locMetric));
    -                    } else {
    -                        //Existing file, get lines of previous version
    -                        ProjectFile prevFile = pf.getPreviousFileVersion();
    -                        
    -                        if (prevFile == null) {
    -                        	warn("Could not find previous version", pf);
    -                        	continue;
    -                        }
    -                        
    -                        SCMAccessor scm = AlitheiaCore.getInstance().getTDSService().getAccessor(pv.getProject().getId()).getSCMAccessor();
    -                        Diff d = scm.getDiff(pf.getFileName(), 
    -                        		scm.newRevision(prevFile.getProjectVersion().getRevisionId()),
    -                        		scm.newRevision(pf.getProjectVersion().getRevisionId()));
    -                        Map<String, List<DiffChunk>> diff = d.getDiffChunks();
    -                        List<DiffChunk> chunks = diff.get(pf.getFileName());
    -                        
    -                        if (chunks == null)
    -                        	continue; //Diff was empty
    -                        
    -                        int added = 0, removed = 0;
    -                        
    -                        for (DiffChunk chunk : chunks) {
    -                        	String theDiff = chunk.getChunk();
    -                        	BufferedReader r = new BufferedReader(new StringReader(theDiff));
    -                    		String line;
    -                    		while ((line = r.readLine()) != null) {
    -                    			if (line.startsWith("+")) 
    -                    				added ++;
    -                    			if (line.startsWith("-"))
    -                    				removed++;
    -                    		}
    -                        }
    -                        
    -                        if (added != 0 && removed != 0 ) {
    -                        	updateField(pv, dev, ActionType.CCNG, true, Math.min(added, removed));
    -                        }
    -                        
    -                        if (added > removed) {
    -                        	updateField(pv, dev, ActionType.CADD, true, Math.abs(added - removed));
    -                        }
    -                        else { 
    -                        	updateField(pv, dev, ActionType.CREM, true, Math.abs(added - removed));
    -                        }
    -                    }
    -                } catch (Exception e) {
    -                	err(e.getMessage(), pf);
    -				} 
    -            }
    -            
    -            if (pf.isAdded()) {
    -            	if (fType == FileTypeMatcher.FileType.SRC) {
    +	/** Number of files after which a commit is considered too big */
    +	public static final String CONFIG_CMF_THRES = "CMF_threshold";
    +
    +	/** Name of the measurement */
    +	public static final String METRIC_CONTRIB = "CONTRIB";
    +
    +	public ContributionMetricImpl(BundleContext bc) {
    +		super(bc);
    +	}
    +
    +	public boolean install() {
    +		boolean result = super.install();
    +		if (result) {
    +			addConfigEntry(CONFIG_CMF_THRES, "5",
    +					"Number of committed files above which the developer is "
    +							+ "penalized", PluginInfo.ConfigurationType.INTEGER);
    +		}
    +		return result;
    +	}
    +
    +	public boolean remove() {
    +		boolean result = true;
    +
    +		String[] tables = { "ContribAction", "ContribActionType" };
    +
    +		for (String tablename : tables) {
    +			result &= db.deleteRecords((List<DAObject>) db.doHQL("from "
    +					+ tablename));
    +		}
    +
    +		result &= super.remove();
    +		return result;
    +	}
    +
    +	/** {@inheritDoc} */
    +	public boolean cleanup(DAObject sp) {
    +		boolean result = true;
    +
    +		if (!(sp instanceof StoredProject)) {
    +			log.warn("We only support cleaning up per stored project for now");
    +			return false;
    +		}
    +		result &= cleanupResource(((StoredProject) sp).getProjectVersions(),
    +				ActionCategory.C);
    +		result &= cleanupResource(((StoredProject) sp).getBugs(),
    +				ActionCategory.B);
    +
    +		Set<MailingList> mlists = ((StoredProject) sp).getMailingLists();
    +		for (MailingList ml : mlists) {
    +			result &= cleanupResource(ml.getMessages(), ActionCategory.M);
    +		}
    +
    +		return result;
    +	}
    +
    +	private boolean cleanupResource(Collection<? extends DAObject> c,
    +			ActionCategory ac) {
    +
    +		Map<String, Object> params = new HashMap<String, Object>();
    +		boolean result = false;
    +
    +		for (DAObject o : c) {
    +			params.put("changedResourceId", o.getId());
    +			params.put("actionCategory", ac.toString());
    +			List<ContribAction> pas = db.findObjectsByProperties(
    +					ContribAction.class, params);
    +			if (!pas.isEmpty()) {
    +				for (ContribAction pa : pas) {
    +					result &= db.deleteRecord(pa);
    +				}
    +			}
    +			params.clear();
    +		}
    +		return result;
    +	}
    +
    +	@Override
    +	public Map<MetricType.Type, SortedSet<Long>> getObjectIdsToSync(
    +			StoredProject sp, Metric m) throws MetricActivationException {
    +		Map<MetricType.Type, SortedSet<Long>> IDs = new HashMap<Type, SortedSet<Long>>();
    +		Map<String, Object> params = new HashMap<String, Object>();
    +		params.put("sp", sp);
    +
    +		String qVersionIDs = "select pv.id from ProjectVersion pv where pv.id not in (select ca.changedResourceId from ContribAction ca where developer.storedProject =:sp and ca.contribActionType.actionCategory='C') and pv.project = :sp order by pv.sequence";
    +		List<Long> objectIds = (List<Long>) db.doHQL(qVersionIDs, params);
    +		TreeSet<Long> ids = new TreeSet<Long>();
    +		ids.addAll(objectIds);
    +		IDs.put(MetricType.Type.PROJECT_VERSION, ids);
    +
    +		String qThreadIDs = "select mlt.id from MailingListThread mlt where mlt.id not in (select ca.changedResourceId from ContribAction ca where developer.storedProject =:sp and ca.contribActionType.actionCategory='M') and mlt.list.storedProject = :sp order by mlt.lastUpdated";
    +		objectIds = (List<Long>) db.doHQL(qThreadIDs, params);
    +		ids = new TreeSet<Long>();
    +		ids.addAll(objectIds);
    +		IDs.put(MetricType.Type.MAILTHREAD, ids);
    +
    +		String qBugIDs = "select b.id from Bug b where b.id not in (select ca.changedResourceId from ContribAction ca where developer.storedProject =:sp and ca.contribActionType.actionCategory='B') and b.project = :sp order by b.updateRun";
    +		objectIds = (List<Long>) db.doHQL(qBugIDs, params);
    +		ids = new TreeSet<Long>();
    +		ids.addAll(objectIds);
    +		IDs.put(MetricType.Type.BUG, ids);
    +
    +		return IDs;
    +	}
    +
    +	/*
    +	 * The following methods are dummy implementations that just check if a
    +	 * result has been calculated for the provided DAO or not.
    +	 */
    +	public List<Result> getResult(ProjectVersion a, Metric m) {
    +		return checkResult(a, ActionCategory.C, m);
    +	}
    +
    +	public List<Result> getResult(MailingListThread mm, Metric m) {
    +		return checkResult(mm, ActionCategory.M, m);
    +	}
    +
    +	public List<Result> getResult(Bug b, Metric m) {
    +		return checkResult(b, ActionCategory.B, m);
    +	}
    +
    +	private List<Result> checkResult(DAObject o, ActionCategory ac, Metric m) {
    +		ArrayList<Result> res = new ArrayList<Result>();
    +
    +		if (getResult(o) == null)
    +			return null;
    +
    +		// Return a dummy result to indicate successful run on this
    +		// project resource
    +		res.add(new Result(o, m, "1", ResultType.INTEGER));
    +		return res;
    +	}
    +
    +	private ContribAction getResult(DAObject o) {
    +		String paramChResource = "paramChResource";
    +		String paramActionCategory = "paramActionCategory";
    +
    +		String query = "select ca "
    +				+ "from ContribAction ca, ContribActionType cat "
    +				+ " where ca.contribActionType = cat "
    +				+ " and cat.actionCategory = :" + paramActionCategory
    +				+ " and ca.changedResourceId = :" + paramChResource;
    +
    +		Map<String, Object> parameters = new HashMap<String, Object>();
    +		parameters.put(paramChResource, o.getId());
    +
    +		if (o instanceof MailingListThread || o instanceof MailMessage) {
    +			parameters.put(paramActionCategory, ActionCategory.M.toString());
    +		} else if (o instanceof ProjectVersion) {
    +			parameters.put(paramActionCategory, ActionCategory.C.toString());
    +		} else if (o instanceof Bug) {
    +			parameters.put(paramActionCategory, ActionCategory.B.toString());
    +		}
    +
    +		List<ContribAction> lp = (List<ContribAction>) db.doHQL(query,
    +				parameters, 1);
    +
    +		if (lp == null || lp.isEmpty()) {
    +			return null;
    +		}
    +
    +		return lp.get(0);
    +	}
    +
    +	/*
    +	 * This plug-in's result is only returned per developer.
    +	 */
    +	public List<Result> getResult(Developer d, Metric m) {
    +		ArrayList<Result> results = new ArrayList<Result>();
    +		ProjectVersion newestPV = ProjectVersion.getLastProjectVersion(d
    +				.getStoredProject());
    +
    +		double result = 0;
    +
    +		// Get a list of action types that have been recorded per project
    +		// until the newest project version
    +		for (ContribActionType cat : ContribActionType.getProjectActionTypes(
    +				d.getStoredProject(), newestPV.getDate())) {
    +			long total = ContribAction.getTotalActionsPerTypePerProject(
    +					d.getStoredProject(), newestPV.getDate(), cat);
    +			long perDev = ContribAction.getDevActionsPerType(d,
    +					newestPV.getDate(), cat);
    +
    +			if (total != 0) {
    +				if (cat.getIsPositive()) {
    +					result += (double) (perDev / total);
    +				} else {
    +					result -= (double) (perDev / total);
    +				}
    +			}
    +		}
    +
    +		Result re = new Result(d, m, result, Result.ResultType.DOUBLE);
    +		results.add(re);
    +
    +		return results;
    +	}
    +
    +	public void run(Developer v) throws AlreadyProcessingException {
    +	}
    +
    +	public void run(Bug b) throws AlreadyProcessingException {
    +		updateField(b, b.getReporter(), ActionType.BRP, true, 1);
    +
    +		if (b.getResolution().equals(BugResolution.Resolution.DUPLICATE))
    +			updateField(b, b.getReporter(), ActionType.BDUP, true, 1);
    +
    +		for (BugReportMessage brm : b.getReportMessages()) {
    +			updateField(b, brm.getReporter(), ActionType.BCC, true, 1);
    +		}
    +	}
    +
    +	public void run(MailingListThread t) throws AlreadyProcessingException {
    +		Metric contrib = Metric.getMetricByMnemonic(METRIC_CONTRIB);
    +		List<MailMessage> emails = t.getMessagesByArrivalOrder();
    +		MailMessage lastProcessed = null;
    +
    +		// Find the last email in this thread
    +		// that has been processed in a previous invocation. Avoid
    +		// scanning threads with just one email.
    +		for (int i = emails.size() - 1; i > 0; i--) {
    +			// Find first email whose contrib action is not null
    +			ContribAction old = getResult(emails.get(i));
    +			if (old != null) {
    +				lastProcessed = DAObject.loadDAObyId(
    +						old.getChangedResourceId(), MailMessage.class);
    +			}
    +		}
    +
    +		for (MailMessage mm : emails) {
    +			ContribAction ca = getResult(mm);
    +			if (ca != null) {
    +				// This mail has been processed again, check if the
    +				// email that closes the thread has been updated
    +				if (lastProcessed != null && mm.equals(lastProcessed)) {
    +					ContribAction oldCa = ContribAction.getContribAction(
    +							lastProcessed.getSender(), lastProcessed.getId(),
    +							ContribActionType.getContribActionType(
    +									ActionType.MCT, true));
    +					if (oldCa != null) {
    +						oldCa.setTotal(oldCa.getTotal() - 1);
    +					}
    +				}
    +				continue;
    +			}
    +
    +			if (mm.getParent() == null) {
    +				// New thread
    +				updateField(mm, mm.getSender(), ActionType.MST, true, 1);
    +			} else {
    +				if (mm.getDepth() == 1) {
    +					// First reply to a thread
    +					MailMessage firstMessage = t.getMessagesAtLevel(1).get(0);
    +					if (firstMessage.equals(mm))
    +						updateField(mm, mm.getSender(), ActionType.MFR, true, 1);
    +				}
    +
    +				if (mm.equals(emails.get(emails.size() - 1))) {
    +					// Mail that closes a thread
    +					updateField(mm, mm.getSender(), ActionType.MCT, true, 1);
    +				}
    +			}
    +
    +			// updateField(mm, mm.getSender(), ActionType.MSE, true, 1);
    +		}
    +	}
    +
    +	public void run(ProjectVersion pv) throws AlreadyProcessingException {
    +		/* Read config options in advance */
    +		FileTypeMatcher.FileType fType;
    +		Developer dev = pv.getCommitter();
    +		Set<ProjectFile> projectFiles = pv.getVersionFiles();
    +		List<Metric> locMetric = new ArrayList<Metric>();
    +		AlitheiaPlugin plugin = AlitheiaCore.getInstance().getPluginAdmin()
    +				.getImplementingPlugin("Wc.loc");
    +
    +		if (plugin != null) {
    +			locMetric.add(Metric.getMetricByMnemonic("Wc.loc"));
    +		} else {
    +			err("Could not find the WC plugin", pv);
    +			return;
    +		}
    +
    +		int numFilesThreshold;
    +
    +		PluginConfiguration config = getConfigurationOption(ContributionMetricImpl.CONFIG_CMF_THRES);
    +
    +		if (config == null || Integer.parseInt(config.getValue()) <= 0) {
    +			err("Plug-in configuration option "
    +					+ ContributionMetricImpl.CONFIG_CMF_THRES + " not found",
    +					pv);
    +			return;
    +		} else {
    +			numFilesThreshold = Integer.parseInt(config.getValue());
    +		}
    +
    +		Pattern bugNumberLabel = Pattern.compile("\\A.*(pr:|bug:).*\\Z",
    +				Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
    +
    +		Pattern pHatLabel = Pattern.compile(
    +				"\\A.*(ph:|pointy hat|p?hat:).*\\Z", Pattern.CASE_INSENSITIVE
    +						| Pattern.MULTILINE | Pattern.DOTALL);
    +		Matcher m;
    +
    +		// Commit message is empty
    +		if (pv.getCommitMsg().length() == 0) {
    +			updateField(pv, dev, ActionType.CEC, false, 1);
    +		} else {
    +			// Commit contains a bug report number
    +			m = bugNumberLabel.matcher(pv.getCommitMsg());
    +			if (m.matches()) {
    +				updateField(pv, dev, ActionType.CBN, true, 1);
    +			}
    +			// Commit awards a pointy hat
    +			m = pHatLabel.matcher(pv.getCommitMsg());
    +			if (m.matches()) {
    +				updateField(pv, dev, ActionType.CPH, true, 1);
    +			}
    +		}
    +
    +		// Commit more files in a commit than the provided threshold
    +		if (projectFiles.size() > numFilesThreshold) {
    +			updateField(pv, dev, ActionType.CMF, false, 1);
    +		}
    +
    +		FileTypeMatcher ftm = FileTypeMatcher.getInstance();
    +		Iterator<ProjectFile> i = projectFiles.iterator();
    +
    +		while (i.hasNext()) {
    +			ProjectFile pf = i.next();
    +
    +			if (pf.getIsDirectory()) {
    +				// New directory added
    +				if (pf.isAdded()) {
    +					updateField(pv, dev, ActionType.CND, true, 1);
    +				}
    +				continue;
    +			}
    +
    +			fType = ftm.getFileType(pf.getFileName());
    +
    +			if (pf.getCopyFrom() != null) {
    +				debug("Ignoring copied file " + pf, pf.getProjectVersion());
    +				continue;
    +			}
    +
    +			// Commit of a source file
    +			if (ftm.isTextType(pf.getFileName())) {
    +				// Source file changed, calc number of lines commited
    +				try {
    +					if (pf.isDeleted()) {
    +						int locPrev = getLOCResult(pf.getPreviousFileVersion(),
    +								plugin, locMetric);
    +						updateField(pv, dev, ActionType.CREM, true, locPrev);
    +					} else if (pf.isReplaced()) {
    +						int locPrev = getLOCResult(pf.getPreviousFileVersion(),
    +								plugin, locMetric);
    +						updateField(pv, dev, ActionType.CREM, true, locPrev);
    +						updateField(pv, dev, ActionType.CNS, true, 1);
    +						updateField(pv, dev, ActionType.CADD, true,
    +								getLOCResult(pf, plugin, locMetric));
    +					}
    +					// Source file just added
    +					else if (pf.isAdded()) {
    +						updateField(pv, dev, ActionType.CNS, true, 1);
    +						updateField(pv, dev, ActionType.CADD, true,
    +								getLOCResult(pf, plugin, locMetric));
    +					} else {
    +						// Existing file, get lines of previous version
    +						ProjectFile prevFile = pf.getPreviousFileVersion();
    +
    +						if (prevFile == null) {
    +							warn("Could not find previous version", pf);
    +							continue;
    +						}
    +
    +						SCMAccessor scm = AlitheiaCore.getInstance()
    +								.getTDSService()
    +								.getAccessor(pv.getProject().getId())
    +								.getSCMAccessor();
    +						Diff d = scm.getDiff(pf.getFileName(), scm
    +								.newRevision(prevFile.getProjectVersion()
    +										.getRevisionId()), scm.newRevision(pf
    +								.getProjectVersion().getRevisionId()));
    +						Map<String, List<DiffChunk>> diff = d.getDiffChunks();
    +						List<DiffChunk> chunks = diff.get(pf.getFileName());
    +
    +						if (chunks == null)
    +							continue; // Diff was empty
    +
    +						int added = 0, removed = 0;
    +
    +						for (DiffChunk chunk : chunks) {
    +							String theDiff = chunk.getChunk();
    +							BufferedReader r = new BufferedReader(
    +									new StringReader(theDiff));
    +							String line;
    +							while ((line = r.readLine()) != null) {
    +								if (line.startsWith("+"))
    +									added++;
    +								if (line.startsWith("-"))
    +									removed++;
    +							}
    +						}
    +
    +						if (added != 0 && removed != 0) {
    +							updateField(pv, dev, ActionType.CCNG, true,
    +									Math.min(added, removed));
    +						}
    +
    +						if (added > removed) {
    +							updateField(pv, dev, ActionType.CADD, true,
    +									Math.abs(added - removed));
    +						} else {
    +							updateField(pv, dev, ActionType.CREM, true,
    +									Math.abs(added - removed));
    +						}
    +					}
    +				} catch (Exception e) {
    +					err(e.getMessage(), pf);
    +				}
    +			}
    +
    +			if (pf.isAdded()) {
    +				if (fType == FileTypeMatcher.FileType.SRC) {
     					// Commit of a new source file: +
     					updateField(pv, dev, ActionType.CNS, true, 1);
     				}
    @@ -526,82 +531,82 @@ else if (pf.isAdded()) {
     					// Commit of a translation file: +
     					updateField(pv, dev, ActionType.CTF, true, 1);
     				}
    -            }
    -        }
    -    }
    -
    -    private int getLOCResult(ProjectFile pf, AlitheiaPlugin plugin, 
    -            List<Metric> locMetric) 
    -        throws MetricMismatchException, AlreadyProcessingException, Exception {
    -      //Get lines of current version of the file from the wc metric
    -        List<Result> r = plugin.getResult(pf, locMetric);
    -        if (r != null && !r.isEmpty()) {
    -            return Integer.parseInt(r.get(0).getResult().toString());
    -        }
    -        else { 
    -            warn("Plugin <" + plugin.getName() + "> did" +
    -                    " not return a result for file " + pf, 
    -                    pf.getProjectVersion() );
    -            return 0;
    -        }
    -    }
    -    
    -    private void updateField(DAObject o, Developer dev, 
    -            ActionType actionType, boolean isPositive, int value) {
    -        DBService db = AlitheiaCore.getInstance().getDBService();
    -        ContribActionType at = ContribActionType.getContribActionType(actionType,
    -                isPositive);
    -        
    -        if (at == null) {
    -            db.rollbackDBSession();
    -            return;
    -        }
    -
    -        ContribAction a = ContribAction.getContribAction(dev, o.getId(), at);
    -
    -        if (a == null) {
    -            a = new ContribAction();
    -            a.setDeveloper(dev);
    -            a.setChangedResourceId(o.getId());
    -            a.setContribActionType(at);
    -            a.setTotal(value);
    -            
    -            if (o instanceof ProjectVersion)
    -                a.setChangedResourceTimestamp(((ProjectVersion)o).getDate());
    -            else if (o instanceof MailingListThread)
    -                a.setChangedResourceTimestamp(((MailingListThread)o).getLastUpdated());
    -            else if (o instanceof MailMessage)
    -                a.setChangedResourceTimestamp(((MailMessage)o).getSendDate());
    -            else if (o instanceof Bug)
    -                a.setChangedResourceTimestamp(((Bug)o).getCreationTS());
    -            else
    -                a.setChangedResourceTimestamp(null); //Make it fail
    -            
    -            db.addRecord(a);
    -        } else {
    -            a.setTotal(a.getTotal() + value);
    -        }
    -    }
    -   
    -    private void err(String msg, DAObject o) {
    -    	log.error("Contrib (" + o.getClass() + "): Object: " + o.toString() 
    -    			+ " Error:"+ msg);
    -    }
    -    
    -    private void warn(String msg, DAObject o) {
    -    	log.warn("Contrib (" + o.getClass() + "): Object: " + o.toString() 
    -    			+ " Warning:" + msg);
    -    }
    -    
    -    private void info(String msg, DAObject o) {
    -    	log.info("Contrib (" + o.getClass() + "): Object: " + o.toString() 
    -    			+ " Info:" + msg);
    -    }
    -    
    -    private void debug(String msg, DAObject o) {
    -    	log.debug("Contrib (" + o.getClass() + "): Object: " + o.toString() 
    -    			+ " Debug:" + msg);
    -    }
    +			}
    +		}
    +	}
    +
    +	private int getLOCResult(ProjectFile pf, AlitheiaPlugin plugin,
    +			List<Metric> locMetric) throws MetricMismatchException,
    +			AlreadyProcessingException, Exception {
    +		// Get lines of current version of the file from the wc metric
    +		List<Result> r = plugin.getResult(pf, locMetric);
    +		if (r != null && !r.isEmpty()) {
    +			return Integer.parseInt(r.get(0).getResult().toString());
    +		} else {
    +			warn("Plugin <" + plugin.getName() + "> did"
    +					+ " not return a result for file " + pf,
    +					pf.getProjectVersion());
    +			return 0;
    +		}
    +	}
    +
    +	private void updateField(DAObject o, Developer dev, ActionType actionType,
    +			boolean isPositive, int value) {
    +		DBService db = AlitheiaCore.getInstance().getDBService();
    +		ContribActionType at = ContribActionType.getContribActionType(
    +				actionType, isPositive);
    +
    +		if (at == null) {
    +			db.rollbackDBSession();
    +			return;
    +		}
    +
    +		ContribAction a = ContribAction.getContribAction(dev, o.getId(), at);
    +
    +		if (a == null) {
    +			a = new ContribAction();
    +			a.setDeveloper(dev);
    +			a.setChangedResourceId(o.getId());
    +			a.setContribActionType(at);
    +			a.setTotal(value);
    +
    +			if (o instanceof ProjectVersion)
    +				a.setChangedResourceTimestamp(((ProjectVersion) o).getDate());
    +			else if (o instanceof MailingListThread)
    +				a.setChangedResourceTimestamp(((MailingListThread) o)
    +						.getLastUpdated());
    +			else if (o instanceof MailMessage)
    +				a.setChangedResourceTimestamp(((MailMessage) o).getSendDate());
    +			else if (o instanceof Bug)
    +				a.setChangedResourceTimestamp(((Bug) o).getCreationTS());
    +			else
    +				a.setChangedResourceTimestamp(null); // Make it fail
    +
    +			db.addRecord(a);
    +		} else {
    +			a.setTotal(a.getTotal() + value);
    +		}
    +	}
    +
    +	private void err(String msg, DAObject o) {
    +		log.error("Contrib (" + o.getClass() + "): Object: " + o.toString()
    +				+ " Error:" + msg);
    +	}
    +
    +	private void warn(String msg, DAObject o) {
    +		log.warn("Contrib (" + o.getClass() + "): Object: " + o.toString()
    +				+ " Warning:" + msg);
    +	}
    +
    +	private void info(String msg, DAObject o) {
    +		log.info("Contrib (" + o.getClass() + "): Object: " + o.toString()
    +				+ " Info:" + msg);
    +	}
    +
    +	private void debug(String msg, DAObject o) {
    +		log.debug("Contrib (" + o.getClass() + "): Object: " + o.toString()
    +				+ " Debug:" + msg);
    +	}
     }
     
     // vi: ai nosi sw=4 ts=4 expandtab
    diff --git a/plug-ins/git/pom.xml b/plug-ins/git/pom.xml
    index ba1ba157b..d5dd07689 100644
    --- a/plug-ins/git/pom.xml
    +++ b/plug-ins/git/pom.xml
    @@ -115,6 +115,12 @@
           <type>jar</type>
           <scope>test</scope>
         </dependency>
    +    	 <dependency>
    +	    <groupId>org.powermock</groupId>
    +	    <artifactId>powermock-api-mockito</artifactId>
    +	    <version>1.5.2</version>
    +	    <scope>test</scope>
    +	 </dependency>
       </dependencies>
     
     </project>
    diff --git a/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitFileManager.java b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitFileManager.java
    new file mode 100644
    index 000000000..96964731d
    --- /dev/null
    +++ b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitFileManager.java
    @@ -0,0 +1,253 @@
    +package eu.sqooss.plugins.updater.git;
    +
    +import java.util.ArrayList;
    +import java.util.HashMap;
    +import java.util.HashSet;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Set;
    +
    +import eu.sqooss.service.db.Directory;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectFileState;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.SCMNodeType;
    +import eu.sqooss.service.util.FileUtils;
    +import eu.sqooss.service.util.Pair;
    +
    +public class GitFileManager {
    +	
    +	private StoredProject project;
    +    private GitMessageHandler msg;
    +	
    +    /*
    +     * Possible set of valid file state transitions
    +     */
    +    private static List<Pair<Integer, Integer>> validStateTransitions;
    +	
    +    /*
    +     * Heuristic fixes for invalid state transitions. They may or may not
    +     * work, depending on the examined case.
    +     */
    +    private static Map<Integer, Integer> invTransitionFix;
    +    
    +    static {        
    +        validStateTransitions = new ArrayList<Pair<Integer,Integer>>();
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_MODIFIED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_DELETED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_MODIFIED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_DELETED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_DELETED, ProjectFileState.STATE_ADDED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_REPLACED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_REPLACED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_DELETED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_REPLACED));
    +        validStateTransitions.add(new Pair(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_MODIFIED));
    +        
    +        invTransitionFix = new HashMap<Integer, Integer>();
    +        invTransitionFix.put(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_MODIFIED);
    +        invTransitionFix.put(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_MODIFIED);
    +        invTransitionFix.put(ProjectFileState.STATE_DELETED, ProjectFileState.STATE_ADDED);
    +        invTransitionFix.put(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_MODIFIED);
    +    }
    +	
    +	public GitFileManager(StoredProject project, Logger log){
    +		this.project = project;
    +		msg = new GitMessageHandler(project.getName(), log);
    +	}
    +	
    +    /**
    +     * Constructs a project file out of the provided elements and adds it
    +     * to the database. If the path has already been processed in this
    +     * revision, it returns the processed entry.
    +     */
    +    public ProjectFile addFile(ProjectVersion version, String fPath, 
    +            ProjectFileState status, SCMNodeType t, ProjectFile copyFrom) {
    +        ProjectFile pf = new ProjectFile(version);
    +
    +        String path = FileUtils.dirname(fPath);
    +        String fname = FileUtils.basename(fPath);
    +
    +        version.getVersionFiles().addAll(mkdirs(version, path));
    +        
    +        /* cur can point to either the current file version if the
    +         * file has been processed before within this revision
    +         * or the previous file version
    +         */
    +        ProjectFile cur = ProjectFile.findFile(project.getId(), fname,
    +        		path, version.getRevisionId(), true);
    +
    +        if (cur != null && 
    +        	!cur.getProjectVersion().getRevisionId().equals(version.getRevisionId()) &&
    +        	!isValidStateTransition(cur.getState(), status)) {
    +        	ProjectFileState newstatus = ProjectFileState.fromStatus(invTransitionFix.get(cur.getState().getStatus()));
    +        	msg.debug("addFile(): Invalid state transition (" + cur.getState() + 
    +        			"->" + status + ") for path " + fPath + ". Setting " + 
    +        			"status to " + newstatus);
    +        	status = newstatus;
    +        }
    +        
    +        Directory dir = Directory.getDirectory(path, true);
    +        pf.setName(fname);
    +        pf.setDir(dir);
    +        pf.setState(status);
    +        pf.setCopyFrom(copyFrom);
    +        pf.setValidFrom(version);
    +        pf.setValidUntil(null);
    +        
    +        SCMNodeType decided = null;
    +        
    +		if (t == SCMNodeType.UNKNOWN) {
    +			if (status.getStatus() == ProjectFileState.STATE_DELETED)
    +				decided = (cur.getIsDirectory() == true ? 
    +						SCMNodeType.DIR : SCMNodeType.FILE);
    +			else 
    +				decided = SCMNodeType.DIR;
    +		} else {
    +			decided = t;
    +		}
    +
    +        if (decided == SCMNodeType.DIR) {
    +            pf.setIsDirectory(true);
    +        } else {
    +            pf.setIsDirectory(false);
    +        }
    +        
    +        msg.debug("addFile(): Adding entry " + pf + "(" + decided + ")");
    +        version.getVersionFiles().add(pf);
    +
    +        return pf;
    +    }
    +	
    +    /**
    +     * Checks whether file state transitions are valid, at least for what 
    +     * Alitheia Core expects.
    +     */
    +    public boolean isValidStateTransition(ProjectFileState a, ProjectFileState b) {
    +    	for (Pair<Integer, Integer> p: validStateTransitions) {
    +    		if (p.first == a.getStatus())
    +    			if (p.second == b.getStatus())
    +    				return true;
    +    	}
    +    	return false;
    +    }
    +	
    +    /**
    +     * Handle directory copies
    +     */
    +    public void handleDirCopy(ProjectVersion pv, ProjectVersion fromVersion,
    +            Directory from, Directory to, ProjectFile copyFrom) {
    +        
    +        if (!canProcessCopy(from.getPath(), to.getPath())) 
    +            return;
    +       
    +        addFile(pv, to.getPath(), ProjectFileState.added(), SCMNodeType.DIR, copyFrom);
    +        
    +        /*Recursively copy directories*/
    +        List<ProjectFile> fromPF = fromVersion.getFiles(from, ProjectVersion.MASK_DIRECTORIES);
    +        
    +        for (ProjectFile f : fromPF) {
    +            handleDirCopy(pv, fromVersion, Directory.getDirectory(f.getFileName(), false), 
    +            		Directory.getDirectory(to.getPath() + "/" + f.getName(), true), f);
    +        }
    +        
    +        fromPF = fromVersion.getFiles(from, ProjectVersion.MASK_FILES);
    +        
    +        for (ProjectFile f : fromPF) {
    +            addFile(pv, to.getPath() + "/" + f.getName(),
    +                    ProjectFileState.added(), SCMNodeType.FILE, f);
    +        }
    +    }
    +	
    +    /**
    +     * Mark the contents of a directory as DELETED when the directory has been
    +     * DELETED
    +     * 
    +     * @param pf The project file representing the deleted directory
    +     */
    +    public Set<ProjectFile> handleDirDeletion(final ProjectFile pf, final ProjectVersion pv) {
    +    	Set<ProjectFile> files = new HashSet<ProjectFile>();
    +
    +		if (pf == null || pv == null) {
    +			return files;
    +		}
    +        
    +        if (pf.getIsDirectory() == false) {
    +            return files;
    +        }
    +        
    +        msg.debug("Deleting directory " + pf.getFileName() + " ID "
    +                + pf.getId());
    +        Directory d = Directory.getDirectory(pf.getFileName(), false);
    +        if (d == null) {
    +        	msg.warn("Directory entry " + pf.getFileName() + " in project "
    +                    + pf.getProjectVersion().getProject().getName()
    +                    + " is missing in Directory table.");
    +            return files;
    +        }
    +
    +        ProjectVersion prev = pv.getPreviousVersion();
    +        
    +        List<ProjectFile> dirFiles = prev.getFiles(d);
    +        
    +        for (ProjectFile f : dirFiles) {
    +            if (f.getIsDirectory()) {
    +                files.addAll(handleDirDeletion(f, pv));
    +            }
    +            ProjectFile deleted = new ProjectFile(f, pv);
    +            deleted.setState(ProjectFileState.deleted());
    +            files.add(deleted);
    +        }
    +        return files;
    +    }
    +	
    +    /**
    +     * Adds or updates directories leading to path. Similar to 
    +     * mkdir -p cmd line command.
    +     */
    +    public Set<ProjectFile> mkdirs(final ProjectVersion pv, String path) {
    +    	Set<ProjectFile> files = new HashSet<ProjectFile>();
    +    	String pathname = FileUtils.dirname(path);
    +    	String filename = FileUtils.basename(path);
    +    	
    +    	ProjectVersion previous = pv.getPreviousVersion();
    +
    +        if (previous == null) { // Special case for first version
    +            previous = pv;
    +        }
    +        
    +    	ProjectFile prev = ProjectFile.findFile(project.getId(),
    +    			filename, pathname, previous.getRevisionId());
    +    	
    +    	ProjectFile pf = new ProjectFile(pv);
    +    	
    +    	if (prev == null) {
    +            pf.setState(ProjectFileState.added());
    +            //Recursion reached the root directory
    +            if (!(pathname.equals("/") && filename.equals(""))) 
    +            	files.addAll(mkdirs(pv, pathname));
    +
    +    	} else {
    +    		pf.setState(ProjectFileState.modified());
    +    	}
    +
    +        pf.setDirectory(true);
    +        pf.setDir(Directory.getDirectory(pathname, true));
    +        pf.setName(filename);
    +        pf.setValidFrom(pv);
    +        
    +        files.add(pf);
    +        msg.debug("mkdirs(): Adding directory " + pf);
    +    	return files;
    +    }
    +    
    +    public boolean canProcessCopy(String path, String to) {
    +    	return true;
    +    }
    +    
    +    public boolean canProcessPath(String path) {
    +    	return true;
    +    }
    +}
    diff --git a/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitMessageHandler.java b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitMessageHandler.java
    new file mode 100644
    index 000000000..ea3e1677b
    --- /dev/null
    +++ b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitMessageHandler.java
    @@ -0,0 +1,37 @@
    +package eu.sqooss.plugins.updater.git;
    +
    +import eu.sqooss.service.logging.Logger;
    +
    +public class GitMessageHandler {
    +	
    +    private String projectName;
    +    private Logger log;
    +	
    +	public GitMessageHandler(String projectName, Logger log){
    +		this.projectName = projectName;
    +		this.log = log;
    +	}
    +	
    +    /** Convenience method to write warning messages per project */
    +    protected void warn(String message) {
    +            log.warn("Git:" + projectName + ":" + message);
    +    }
    +    
    +    /** Convenience method to write error messages per project */
    +    protected void err(String message) {
    +            log.error("Git:" + projectName + ":" + message);
    +    }
    +    
    +    /** Convenience method to write info messages per project */
    +    protected void info(String message) {
    +            log.info("Git:" + projectName + ":" + message);
    +    }
    +    
    +    /** Convenience method to write debug messages per project */
    +    protected void debug(String message) {
    +        if (log != null)
    +            log.debug("Git:" + projectName + ":" + message);
    +        else
    +            System.err.println(message);
    +    }
    +}
    diff --git a/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitProcessor.java b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitProcessor.java
    new file mode 100644
    index 000000000..09424e79c
    --- /dev/null
    +++ b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitProcessor.java
    @@ -0,0 +1,355 @@
    +/*
    + * Copyright 2010 - Organization for Free and Open Source Software,  
    + *                Athens, Greece.
    + *
    + * Redistribution and use in source and binary forms, with or without
    + * modification, are permitted provided that the following conditions are
    + * met:
    + *
    + *     * Redistributions of source code must retain the above copyright
    + *       notice, this list of conditions and the following disclaimer.
    + *
    + *     * Redistributions in binary form must reproduce the above
    + *       copyright notice, this list of conditions and the following
    + *       disclaimer in the documentation and/or other materials provided
    + *       with the distribution.
    + *
    + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    + *
    + */
    +
    +package eu.sqooss.plugins.updater.git;
    +
    +import javax.mail.internet.AddressException;
    +import javax.mail.internet.InternetAddress;
    +
    +import eu.sqooss.plugins.tds.git.GitAccessor;
    +import eu.sqooss.service.db.Branch;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Developer;
    +import eu.sqooss.service.db.Directory;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectFileState;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.ProjectVersionParent;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.db.Tag;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.AccessorException;
    +import eu.sqooss.service.tds.CommitCopyEntry;
    +import eu.sqooss.service.tds.InvalidProjectRevisionException;
    +import eu.sqooss.service.tds.InvalidRepositoryException;
    +import eu.sqooss.service.tds.Revision;
    +import eu.sqooss.service.tds.SCMAccessor;
    +import eu.sqooss.service.tds.SCMNodeType;
    +import eu.sqooss.service.util.FileUtils;
    +
    +public class GitProcessor {
    +    
    +	private StoredProject project;
    +    private GitAccessor git;
    +    private DBService dbs;
    +    private GitMessageHandler msg;
    +    private GitFileManager filem;
    +    
    +    public GitProcessor(StoredProject project, GitAccessor git, DBService dbs, Logger log) {
    +    	this.project = project;
    +    	this.git = git;
    +    	this.dbs = dbs;
    +    	msg = new GitMessageHandler(project.getName(), log);
    +    	filem = new GitFileManager(project, log);
    +    }
    +    
    +    public ProjectVersion processOneRevision(Revision entry) 
    +    	throws AccessorException, InvalidProjectRevisionException {
    +        
    +        //Basic stuff
    +        ProjectVersion pv = new ProjectVersion(project);
    +        pv.setRevisionId(entry.getUniqueId());
    +        pv.setTimestamp(entry.getDate().getTime());
    +
    +        Developer d = getAuthor(project, entry.getAuthor());
    +        pv.setCommitter(d);
    +        
    +        String commitMsg = entry.getMessage();
    +        if (commitMsg.length() > 512) {
    +            commitMsg = commitMsg.substring(0, 511);
    +        }
    +
    +        pv.setCommitMsg(commitMsg);
    +        pv.setSequence(Integer.MAX_VALUE);
    +        dbs.addRecord(pv);
    +        
    +        //Tags
    +        String tag = git.allTags().get(entry.getUniqueId());
    +        if (tag != null) {
    +            Tag t = new Tag(pv);
    +            t.setName(tag);
    +            dbs.addRecord(t);
    +            pv.getTags().add(t);
    +        }
    +        
    +        //Sequencing
    +        ProjectVersion prev = pv.getPreviousVersion();
    +        if (prev != null)
    +            pv.setSequence(prev.getSequence() + 1);
    +        else 
    +            pv.setSequence(1);
    +              
    +        //Branches and parent-child relationships
    +        for (String parentId : entry.getParentIds()) {
    +            ProjectVersion parent = ProjectVersion.getVersionByRevision(project, parentId);
    +            ProjectVersionParent pvp = new ProjectVersionParent(pv, parent);
    +            pv.getParents().add(pvp);
    +            
    +            //Parent is a branch
    +            if (git.getCommitChidren(parentId).length > 1) {
    +                Branch b = new Branch(project, Branch.suggestName(project));
    +                dbs.addRecord(b);
    +                parent.getOutgoingBranches().add(b);
    +                pv.getIncomingBranches().add(b);
    +            } else {
    +                pv.getIncomingBranches().add(parent.getBranch());
    +            }
    +        }
    +
    +        if (entry.getParentIds().size() > 1) {
    +            //A merge commit
    +            Branch b = new Branch(project, Branch.suggestName(project));
    +            pv.getOutgoingBranches().add(b);
    +        } else {
    +            //New line of development
    +            if (entry.getParentIds().size() == 0) {
    +                Branch b = new Branch(project, Branch.suggestName(project));
    +                dbs.addRecord(b);
    +                pv.getOutgoingBranches().add(b);
    +            } else {
    +                pv.getOutgoingBranches().addAll(pv.getIncomingBranches());
    +                //TODO: Add branch to Branch, need to convert it to List :-(
    +            }
    +        }
    +
    +        msg.debug("Got version: " + pv.getRevisionId() +  
    +                " seq: " + pv.getSequence());
    +        return pv;
    +    }
    +    
    +    /**
    +     * Do our best to fill in the Developer object with good information.
    +     */
    +    public Developer getAuthor(StoredProject sp, String entryAuthor) {
    +        InternetAddress ia = null;
    +        String name = null, email = null;
    +        try {
    +            ia = new InternetAddress(entryAuthor, true);
    +            name = ia.getPersonal();
    +            email = ia.getAddress();
    +        } catch (AddressException ignored) {
    +            if (entryAuthor.contains("@")) {
    +                //Hm, an email address that Java could not parse. Probably the result of
    +                //misconfigured git. e.g. scott Chacon <schacon@agadorsparticus.(none)>
    +                if (entryAuthor.contains("<")) {
    +                    name = entryAuthor.substring(0, entryAuthor.indexOf("<")).trim();
    +                    if (entryAuthor.contains(">"))
    +                        email = entryAuthor.substring(entryAuthor.indexOf("<") + 1, entryAuthor.indexOf(">")).trim();
    +                    else 
    +                        email = entryAuthor.substring(entryAuthor.indexOf("<") + 1).trim();
    +                } else {
    +                    name = entryAuthor.trim();
    +                }
    +            } else {
    +                email = null;
    +                name = entryAuthor;
    +            }
    +        }
    +
    +        Developer d = null;
    +        
    +        if (email != null) {
    +            d = Developer.getDeveloperByEmail(email, sp, true);
    +            
    +            if (name != null) {
    +                if (name.contains(" ")) {
    +                    d.setName(name);
    +                } else {
    +                    d.setUsername(name);
    +                }
    +            }
    +        } else {
    +            if (name.contains(" ")) {
    +                d = Developer.getDeveloperByName(name, sp, true); 
    +            } else {
    +                d = Developer.getDeveloperByUsername(name, sp, true);
    +            }
    +        }
    +        return d;
    +    }
    +    
    +    /*
    +     * Copy operations copy or move files or directories accross
    +     * the virtual filetree generated by the SCM.
    +     */
    +    public void processCopiedFiles(SCMAccessor scm, Revision entry,
    +            ProjectVersion curVersion, ProjectVersion prev)
    +            throws InvalidProjectRevisionException, InvalidRepositoryException {
    +        for (CommitCopyEntry cce : entry.getCopyOperations()) {
    +            
    +        	/* We only want to process copies within allowed paths or
    +        	 *  from anywhere to an allowed path
    +        	 */
    +        	if (!filem.canProcessCopy(cce.fromPath(), cce.toPath()) && 
    +        			!filem.canProcessPath(cce.toPath())) {
    +        		msg.debug("Ignoring copy from " + cce.fromPath() + " to " 
    +        				+ cce.toPath() + " due to project config");
    +        		continue;
    +        	}
    +        	
    +            ProjectFile copyFrom = null;
    +            copyFrom = ProjectFile.findFile(project.getId(), 
    +                        FileUtils.basename(cce.fromPath()), 
    +                        FileUtils.dirname(cce.fromPath()), 
    +                        cce.fromRev().getUniqueId());
    +                
    +            /* Source location is an entry we do not have info for, 
    +             * due to updater settings. Use the SCM to retrieve
    +             * the missing info.
    +             */
    +            /*if (copyFrom == null) {
    +                warn("expecting 1 got " + 0 + " files for path " 
    +                        + cce.fromPath() + " " + prev.toString());
    +                SCMNodeType type = scm.getNodeType(cce.fromPath(), cce.fromRev());
    +                
    +                if (type.equals(SCMNodeType.FILE)) {
    +                	addFile(curVersion, cce.toPath(), ProjectFileState.added(), 
    +                			SCMNodeType.FILE, copyFrom);
    +                } else if (type.equals(SCMNodeType.DIR)) {
    +                	
    +                	SCMNode n = scm.getNode(cce.fromPath(), cce.fromRev());
    +                	
    +                	if (n != null) {
    +                		debug("Copying directory "+ n.getPath() +" from repository");
    +                		handleDirCopyFromRepository(curVersion, n, cce.toPath());
    +                	} else {
    +                		warn("Directory " + cce.fromPath() + " cannot be found" +
    +                				" in project repository!");
    +                	}
    +                } else {
    +                	warn("Path " + cce.fromPath() + " is of uknown type " 
    +                			+ type + " which the updater cannot process");
    +                }
    +                
    +                continue;
    +            } */ //TODO: Take care of this later on
    +            
    +            msg.debug("copyFiles(): Copying " + cce.fromPath() + "->" + cce.toPath());
    +            if (copyFrom.getIsDirectory()) {
    +                    
    +                Directory from = Directory.getDirectory(cce.fromPath(), false);
    +                Directory to = Directory.getDirectory(cce.toPath(), true);
    +
    +                /*
    +                 * Recursively copy contents and mark files as modified
    +                 * and directories as added
    +                 */
    +                filem.handleDirCopy(curVersion, 
    +                        ProjectVersion.getVersionByRevision(curVersion.getProject(),
    +                        cce.fromRev().getUniqueId()), from, to, copyFrom);
    +            } else {
    +                /*
    +                 * Create a new entry at the new location and mark the new 
    +                 * entry as ADDED
    +                 */
    +                filem.addFile(curVersion, cce.toPath(), ProjectFileState.added(), 
    +                		SCMNodeType.FILE, copyFrom);
    +            }
    +            
    +            if (cce.isMove()) {
    +            	msg.debug("copyFiles(): Deleting old path " + cce.fromPath() + "->" + cce.toPath());
    +            	if (copyFrom.getIsDirectory())
    +            		curVersion.getVersionFiles().addAll(filem.handleDirDeletion(copyFrom, curVersion));
    +            	else 
    +            		filem.addFile(curVersion, cce.fromPath(), 
    +            				ProjectFileState.deleted(), SCMNodeType.FILE, null);
    +            }
    +        }
    +    }
    +    
    +    public void processRevisionFiles(SCMAccessor scm, Revision entry,
    +            ProjectVersion curVersion) throws InvalidRepositoryException {
    +       
    +        for (String chPath : entry.getChangedPaths()) {
    +            
    +            SCMNodeType t = scm.getNodeType(chPath, entry);
    +
    +            ProjectFile file = filem.addFile(curVersion, chPath,
    +                    ProjectFileState.fromPathChangeType(entry.getChangedPathsStatus().get(chPath)), 
    +                    t, null);
    +            /*
    +             * Before entering the next block, examine whether the deleted
    +             * file was a directory or not. If there is no path entry in the
    +             * Directory table for the processed file path, this means that
    +             * the path is definitely not a directory. If there is such an
    +             * entry, it may be shared with another project; this case is
    +             * examined upon entering
    +             */
    +            if (file.isDeleted() && (Directory.getDirectory(chPath, false) != null)) {
    +                /*
    +                 * Directories, when they are deleted, do not have type DIR,
    +                 * but something else. So we need to check on deletes
    +                 * whether this name was most recently a directory.
    +                 */
    +                ProjectFile lastVersion = file.getPreviousFileVersion();
    +                
    +                /*
    +                 * If a directory is deleted and its previous incarnation cannot
    +                 * be found in a previous revision, this means that the
    +                 * directory is deleted in the same revision it was added
    +                 * (probably copied first)! Search in the current
    +                 * revision files then.
    +                 */
    +                boolean delAfterCopy = false;
    +                if (lastVersion == null) {
    +                    for (ProjectFile pf : curVersion.getVersionFiles()) {
    +                        if (pf.getFileName().equals(file.getFileName())
    +                                && pf.getIsDirectory()
    +                                && pf.isAdded()) {
    +                            lastVersion = pf;
    +                            delAfterCopy = true;
    +                            break;
    +                        }
    +                    }
    +                }
    +                    
    +                /* If a dir was deleted, mark all children as deleted */
    +                if (lastVersion != null
    +                        && lastVersion.getIsDirectory()) {
    +                    // In spite of it not being marked as a directory
    +                    // in the node tree right now.
    +                    file.setIsDirectory(true);
    +                } else if (!delAfterCopy) {
    +                    msg.warn("Cannot find previous version of DELETED" +
    +                                " directory " + file.getFileName());
    +                }
    +                
    +                if (!delAfterCopy) {
    +                    curVersion.getVersionFiles().addAll(filem.handleDirDeletion(file, curVersion));
    +                } else {
    +                	msg.warn("FIXME: DELETED DIRECTORY AFTER COPY");
    +                    //handleCopiedDirDeletion(toAdd);
    +                }
    +            }
    +        }
    +    }
    +    
    +}
    + 
    \ No newline at end of file
    diff --git a/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitUpdater.java b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitUpdater.java
    index 00ad047e2..cc9390930 100644
    --- a/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitUpdater.java
    +++ b/plug-ins/git/src/main/java/eu/sqooss/plugins/updater/git/GitUpdater.java
    @@ -32,41 +32,27 @@
     
     import java.util.ArrayList;
     import java.util.HashMap;
    -import java.util.HashSet;
     import java.util.List;
     import java.util.Map;
     import java.util.Set;
     
    -import javax.mail.internet.AddressException;
    -import javax.mail.internet.InternetAddress;
    -
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.plugins.tds.git.GitAccessor;
    -import eu.sqooss.service.db.Branch;
     import eu.sqooss.service.db.DBService;
    -import eu.sqooss.service.db.Developer;
    -import eu.sqooss.service.db.Directory;
     import eu.sqooss.service.db.ProjectFile;
     import eu.sqooss.service.db.ProjectFileState;
     import eu.sqooss.service.db.ProjectVersion;
    -import eu.sqooss.service.db.ProjectVersionParent;
     import eu.sqooss.service.db.StoredProject;
    -import eu.sqooss.service.db.Tag;
     import eu.sqooss.service.logging.Logger;
     import eu.sqooss.service.tds.AccessorException;
    -import eu.sqooss.service.tds.CommitCopyEntry;
     import eu.sqooss.service.tds.CommitLog;
     import eu.sqooss.service.tds.InvalidAccessorException;
     import eu.sqooss.service.tds.InvalidProjectRevisionException;
     import eu.sqooss.service.tds.InvalidRepositoryException;
     import eu.sqooss.service.tds.Revision;
    -import eu.sqooss.service.tds.SCMAccessor;
    -import eu.sqooss.service.tds.SCMNodeType;
     import eu.sqooss.service.updater.MetadataUpdater;
     import eu.sqooss.service.updater.Updater;
     import eu.sqooss.service.updater.UpdaterService.UpdaterStage;
    -import eu.sqooss.service.util.FileUtils;
    -import eu.sqooss.service.util.Pair;
     
     /**
      * A metadata updater converts raw data to Alitheia Core database metadata.
    @@ -78,21 +64,21 @@
     public class GitUpdater implements MetadataUpdater {
         
         private StoredProject project;
    -    private Logger log;
         private GitAccessor git;
         private DBService dbs;
    +    private GitMessageHandler msg;
    +    private GitProcessor proc;
         private float progress;
         
    -    /*
    -     * Possible set of valid file state transitions
    -     */
    -    private static List<Pair<Integer, Integer>> validStateTransitions;
    -    
    -    /*
    -     * Heuristic fixes for invalid state transitions. They may or may not
    -     * work, depending on the examined case.
    -     */
    -    private static Map<Integer, Integer> invTransitionFix;
    +    public GitUpdater() {}
    +
    +    public GitUpdater(DBService db, GitAccessor git, Logger log, StoredProject sp) {
    +        this.dbs = db;
    +        this.git = git;
    +        this.project = sp;
    +        msg = new GitMessageHandler(project.getName(), log);
    +        proc = new GitProcessor(project, git, dbs, log);
    +    }
         
         /* 
          * State weights to use when evaluating duplicate project file entries
    @@ -107,38 +93,11 @@ public class GitUpdater implements MetadataUpdater {
             stateWeights.put(ProjectFileState.STATE_ADDED, 4);
             stateWeights.put(ProjectFileState.STATE_REPLACED, 8);
             stateWeights.put(ProjectFileState.STATE_DELETED, 16);
    -        
    -        validStateTransitions = new ArrayList<Pair<Integer,Integer>>();
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_MODIFIED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_DELETED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_MODIFIED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_DELETED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_DELETED, ProjectFileState.STATE_ADDED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_REPLACED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_REPLACED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_DELETED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_REPLACED));
    -        validStateTransitions.add(new Pair(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_MODIFIED));
    -        
    -        invTransitionFix = new HashMap<Integer, Integer>();
    -        invTransitionFix.put(ProjectFileState.STATE_MODIFIED, ProjectFileState.STATE_MODIFIED);
    -        invTransitionFix.put(ProjectFileState.STATE_ADDED, ProjectFileState.STATE_MODIFIED);
    -        invTransitionFix.put(ProjectFileState.STATE_DELETED, ProjectFileState.STATE_ADDED);
    -        invTransitionFix.put(ProjectFileState.STATE_REPLACED, ProjectFileState.STATE_MODIFIED);
    -    }
    -    
    -    public GitUpdater() {}
    -
    -    public GitUpdater(DBService db, GitAccessor git, Logger log, StoredProject sp) {
    -        this.dbs = db;
    -        this.git = git;
    -        this.log = log;
    -        this.project = sp;
         }
         
         public void setUpdateParams(StoredProject sp, Logger l) {
             this.project = sp;
    -        this.log = l;
    +        msg = new GitMessageHandler(sp.getName(), l);
             try {
                 git = (GitAccessor) AlitheiaCore.getInstance().getTDSService().getAccessor(sp.getId()).getSCMAccessor();
             } catch (InvalidAccessorException e) {
    @@ -154,7 +113,7 @@ public void update() throws Exception {
             project = dbs.attachObjectToDBSession(project);
             
             
    -        info("Running source update for project " + project.getName() 
    +        msg.info("Running source update for project " + project.getName() 
                     + " ID " + project.getId());
             
             //Compare latest DB version with the repository
    @@ -165,7 +124,7 @@ public void update() throws Exception {
             
                 /* Don't choke when called to update an up-to-date project */
                 if (r.compareTo(git.newRevision(latestVersion.getRevisionId())) <= 0) {
    -                info("Project is already at the newest version: " 
    +            	msg.info("Project is already at the newest version: " 
                             + r.getUniqueId());
                     dbs.commitDBSession();
                     return;    
    @@ -192,22 +151,22 @@ public void updateFromTo(Revision from, Revision to)
     
             for (Revision entry : commitLog) {
             	if (ProjectVersion.getVersionByRevision(project, entry.getUniqueId()) != null) {
    -        		info("Skipping processed revision: " + entry.getUniqueId());
    +        		msg.info("Skipping processed revision: " + entry.getUniqueId());
             		continue;
             	}
             	
    -            ProjectVersion pv = processOneRevision(entry);
    +            ProjectVersion pv = proc.processOneRevision(entry);
                 
    -            processCopiedFiles(git, entry, pv, pv.getPreviousVersion());
    +            proc.processCopiedFiles(git, entry, pv, pv.getPreviousVersion());
                 
    -            processRevisionFiles(git, entry, pv);
    +            proc.processRevisionFiles(git, entry, pv);
                 
                 replayLog(pv);
                 
                 updateValidUntil(pv, pv.getVersionFiles());
     
                 if (!dbs.commitDBSession()) {
    -                warn("Intermediate commit failed, failing update");
    +                msg.warn("Intermediate commit failed, failing update");
                     return;
                 }
                 
    @@ -217,295 +176,6 @@ public void updateFromTo(Revision from, Revision to)
                 numRevisions++;
             }
         }
    -
    -    private ProjectVersion processOneRevision(Revision entry) 
    -    	throws AccessorException, InvalidProjectRevisionException {
    -        
    -        //Basic stuff
    -        ProjectVersion pv = new ProjectVersion(project);
    -        pv.setRevisionId(entry.getUniqueId());
    -        pv.setTimestamp(entry.getDate().getTime());
    -
    -        Developer d = getAuthor(project, entry.getAuthor());
    -        pv.setCommitter(d);
    -        
    -        String commitMsg = entry.getMessage();
    -        if (commitMsg.length() > 512) {
    -            commitMsg = commitMsg.substring(0, 511);
    -        }
    -
    -        pv.setCommitMsg(commitMsg);
    -        pv.setSequence(Integer.MAX_VALUE);
    -        dbs.addRecord(pv);
    -        
    -        //Tags
    -        String tag = git.allTags().get(entry.getUniqueId());
    -        if (tag != null) {
    -            Tag t = new Tag(pv);
    -            t.setName(tag);
    -            dbs.addRecord(t);
    -            pv.getTags().add(t);
    -        }
    -        
    -        //Sequencing
    -        ProjectVersion prev = pv.getPreviousVersion();
    -        if (prev != null)
    -            pv.setSequence(prev.getSequence() + 1);
    -        else 
    -            pv.setSequence(1);
    -              
    -        //Branches and parent-child relationships
    -        for (String parentId : entry.getParentIds()) {
    -            ProjectVersion parent = ProjectVersion.getVersionByRevision(project, parentId);
    -            ProjectVersionParent pvp = new ProjectVersionParent(pv, parent);
    -            pv.getParents().add(pvp);
    -            
    -            //Parent is a branch
    -            if (git.getCommitChidren(parentId).length > 1) {
    -                Branch b = new Branch(project, Branch.suggestName(project));
    -                dbs.addRecord(b);
    -                parent.getOutgoingBranches().add(b);
    -                pv.getIncomingBranches().add(b);
    -            } else {
    -                pv.getIncomingBranches().add(parent.getBranch());
    -            }
    -        }
    -
    -        if (entry.getParentIds().size() > 1) {
    -            //A merge commit
    -            Branch b = new Branch(project, Branch.suggestName(project));
    -            pv.getOutgoingBranches().add(b);
    -        } else {
    -            //New line of development
    -            if (entry.getParentIds().size() == 0) {
    -                Branch b = new Branch(project, Branch.suggestName(project));
    -                dbs.addRecord(b);
    -                pv.getOutgoingBranches().add(b);
    -            } else {
    -                pv.getOutgoingBranches().addAll(pv.getIncomingBranches());
    -                //TODO: Add branch to Branch, need to convert it to List :-(
    -            }
    -        }
    -
    -        debug("Got version: " + pv.getRevisionId() +  
    -                " seq: " + pv.getSequence());
    -        return pv;
    -    }
    -    
    -    /**
    -     * Do our best to fill in the Developer object with good information.
    -     */
    -    public Developer getAuthor(StoredProject sp, String entryAuthor) {
    -        InternetAddress ia = null;
    -        String name = null, email = null;
    -        try {
    -            ia = new InternetAddress(entryAuthor, true);
    -            name = ia.getPersonal();
    -            email = ia.getAddress();
    -        } catch (AddressException ignored) {
    -            if (entryAuthor.contains("@")) {
    -                //Hm, an email address that Java could not parse. Probably the result of
    -                //misconfigured git. e.g. scott Chacon <schacon@agadorsparticus.(none)>
    -                if (entryAuthor.contains("<")) {
    -                    name = entryAuthor.substring(0, entryAuthor.indexOf("<")).trim();
    -                    if (entryAuthor.contains(">"))
    -                        email = entryAuthor.substring(entryAuthor.indexOf("<") + 1, entryAuthor.indexOf(">")).trim();
    -                    else 
    -                        email = entryAuthor.substring(entryAuthor.indexOf("<") + 1).trim();
    -                } else {
    -                    name = entryAuthor.trim();
    -                }
    -            } else {
    -                email = null;
    -                name = entryAuthor;
    -            }
    -        }
    -
    -        Developer d = null;
    -        
    -        if (email != null) {
    -            d = Developer.getDeveloperByEmail(email, sp, true);
    -            
    -            if (name != null) {
    -                if (name.contains(" ")) {
    -                    d.setName(name);
    -                } else {
    -                    d.setUsername(name);
    -                }
    -            }
    -        } else {
    -            if (name.contains(" ")) {
    -                d = Developer.getDeveloperByName(name, sp, true); 
    -            } else {
    -                d = Developer.getDeveloperByUsername(name, sp, true);
    -            }
    -        }
    -        return d;
    -    }
    -    
    -    /*
    -     * Copy operations copy or move files or directories accross
    -     * the virtual filetree generated by the SCM.
    -     */
    -    private void processCopiedFiles(SCMAccessor scm, Revision entry,
    -            ProjectVersion curVersion, ProjectVersion prev)
    -            throws InvalidProjectRevisionException, InvalidRepositoryException {
    -        for (CommitCopyEntry cce : entry.getCopyOperations()) {
    -            
    -        	/* We only want to process copies within allowed paths or
    -        	 *  from anywhere to an allowed path
    -        	 */
    -        	if (!canProcessCopy(cce.fromPath(), cce.toPath()) && 
    -        			!canProcessPath(cce.toPath())) {
    -        		debug("Ignoring copy from " + cce.fromPath() + " to " 
    -        				+ cce.toPath() + " due to project config");
    -        		continue;
    -        	}
    -        	
    -            ProjectFile copyFrom = null;
    -            copyFrom = ProjectFile.findFile(project.getId(), 
    -                        FileUtils.basename(cce.fromPath()), 
    -                        FileUtils.dirname(cce.fromPath()), 
    -                        cce.fromRev().getUniqueId());
    -                
    -            /* Source location is an entry we do not have info for, 
    -             * due to updater settings. Use the SCM to retrieve
    -             * the missing info.
    -             *
    -            if (copyFrom == null) {
    -                warn("expecting 1 got " + 0 + " files for path " 
    -                        + cce.fromPath() + " " + prev.toString());
    -                SCMNodeType type = scm.getNodeType(cce.fromPath(), cce.fromRev());
    -                
    -                if (type.equals(SCMNodeType.FILE)) {
    -                	addFile(curVersion, cce.toPath(), ProjectFileState.added(), 
    -                			SCMNodeType.FILE, copyFrom);
    -                } else if (type.equals(SCMNodeType.DIR)) {
    -                	
    -                	SCMNode n = scm.getNode(cce.fromPath(), cce.fromRev());
    -                	
    -                	if (n != null) {
    -                		debug("Copying directory "+ n.getPath() +" from repository");
    -                		handleDirCopyFromRepository(curVersion, n, cce.toPath());
    -                	} else {
    -                		warn("Directory " + cce.fromPath() + " cannot be found" +
    -                				" in project repository!");
    -                	}
    -                } else {
    -                	warn("Path " + cce.fromPath() + " is of uknown type " 
    -                			+ type + " which the updater cannot process");
    -                }
    -                
    -                continue;
    -            } */ //TODO: Take care of this later on
    -            
    -            debug("copyFiles(): Copying " + cce.fromPath() + "->" + cce.toPath());
    -            if (copyFrom.getIsDirectory()) {
    -                    
    -                Directory from = Directory.getDirectory(cce.fromPath(), false);
    -                Directory to = Directory.getDirectory(cce.toPath(), true);
    -
    -                /*
    -                 * Recursively copy contents and mark files as modified
    -                 * and directories as added
    -                 */
    -                handleDirCopy(curVersion, 
    -                        ProjectVersion.getVersionByRevision(curVersion.getProject(),
    -                        cce.fromRev().getUniqueId()), from, to, copyFrom);
    -            } else {
    -                /*
    -                 * Create a new entry at the new location and mark the new 
    -                 * entry as ADDED
    -                 */
    -                addFile(curVersion, cce.toPath(), ProjectFileState.added(), 
    -                		SCMNodeType.FILE, copyFrom);
    -            }
    -            
    -            if (cce.isMove()) {
    -            	debug("copyFiles(): Deleting old path " + cce.fromPath() + "->" + cce.toPath());
    -            	if (copyFrom.getIsDirectory())
    -            		curVersion.getVersionFiles().addAll(handleDirDeletion(copyFrom, curVersion));
    -            	else 
    -            		addFile(curVersion, cce.fromPath(), 
    -            				ProjectFileState.deleted(), SCMNodeType.FILE, null);
    -            }
    -        }
    -    }
    -    
    -    private boolean canProcessCopy(String path, String to) {
    -    	return true;
    -    }
    -    
    -    private boolean canProcessPath(String path) {
    -    	return true;
    -    }
    -    
    -    private void processRevisionFiles(SCMAccessor scm, Revision entry,
    -            ProjectVersion curVersion) throws InvalidRepositoryException {
    -       
    -        for (String chPath : entry.getChangedPaths()) {
    -            
    -            SCMNodeType t = scm.getNodeType(chPath, entry);
    -
    -            ProjectFile file = addFile(curVersion, chPath,
    -                    ProjectFileState.fromPathChangeType(entry.getChangedPathsStatus().get(chPath)), 
    -                    t, null);
    -            /*
    -             * Before entering the next block, examine whether the deleted
    -             * file was a directory or not. If there is no path entry in the
    -             * Directory table for the processed file path, this means that
    -             * the path is definitely not a directory. If there is such an
    -             * entry, it may be shared with another project; this case is
    -             * examined upon entering
    -             */
    -            if (file.isDeleted() && (Directory.getDirectory(chPath, false) != null)) {
    -                /*
    -                 * Directories, when they are deleted, do not have type DIR,
    -                 * but something else. So we need to check on deletes
    -                 * whether this name was most recently a directory.
    -                 */
    -                ProjectFile lastVersion = file.getPreviousFileVersion();
    -                
    -                /*
    -                 * If a directory is deleted and its previous incarnation cannot
    -                 * be found in a previous revision, this means that the
    -                 * directory is deleted in the same revision it was added
    -                 * (probably copied first)! Search in the current
    -                 * revision files then.
    -                 */
    -                boolean delAfterCopy = false;
    -                if (lastVersion == null) {
    -                    for (ProjectFile pf : curVersion.getVersionFiles()) {
    -                        if (pf.getFileName().equals(file.getFileName())
    -                                && pf.getIsDirectory()
    -                                && pf.isAdded()) {
    -                            lastVersion = pf;
    -                            delAfterCopy = true;
    -                            break;
    -                        }
    -                    }
    -                }
    -                    
    -                /* If a dir was deleted, mark all children as deleted */
    -                if (lastVersion != null
    -                        && lastVersion.getIsDirectory()) {
    -                    // In spite of it not being marked as a directory
    -                    // in the node tree right now.
    -                    file.setIsDirectory(true);
    -                } else if (!delAfterCopy) {
    -                    warn("Cannot find previous version of DELETED" +
    -                                " directory " + file.getFileName());
    -                }
    -                
    -                if (!delAfterCopy) {
    -                    curVersion.getVersionFiles().addAll(handleDirDeletion(file, curVersion));
    -                } else {
    -                	warn("FIXME: DELETED DIRECTORY AFTER COPY");
    -                    //handleCopiedDirDeletion(toAdd);
    -                }
    -            }
    -        }
    -    }
         
         private void replayLog(ProjectVersion curVersion) {
         	 /*Find duplicate projectfile entries*/
    @@ -528,7 +198,7 @@ private void replayLog(ProjectVersion curVersion) {
                 if (numOccurs.get(fpath) <= 1) { 
                     continue;
                 }
    -            debug("replayLog(): Multiple entries for file " + fpath);
    +            msg.debug("replayLog(): Multiple entries for file " + fpath);
                 
                 int points = 0;
                 
    @@ -542,7 +212,7 @@ private void replayLog(ProjectVersion curVersion) {
                         continue;
                     }
                     
    -                debug("  " + f);
    +                msg.debug("  " + f);
                     
                     if (stateWeights.get(f.getState().getStatus()) > points) {
                         points = stateWeights.get(f.getState().getStatus());
    @@ -575,7 +245,7 @@ private void replayLog(ProjectVersion curVersion) {
                 		if (!f.equals(winner) &&
                 			 f.getFileName().startsWith(winner.getFileName()) &&
                 			 f.getState().getStatus() != ProjectFileState.STATE_DELETED) {
    -            			debug("replayLog(): Setting status of " + winner + " to " 
    +            			msg.debug("replayLog(): Setting status of " + winner + " to " 
                 					+ ProjectFileState.replaced() + " as " +
                 					"file " + f + " uses its path");
                 			winner.setState(ProjectFileState.replaced());
    @@ -591,112 +261,9 @@ private void replayLog(ProjectVersion curVersion) {
                     winner.setCopyFrom(copyFrom);
                     curVersion.getVersionFiles().add(winner);
                 }
    -            debug("replayLog(): Keeping file " + winner);
    -        }
    -    }
    -    
    -    /**
    -     * Constructs a project file out of the provided elements and adds it
    -     * to the database. If the path has already been processed in this
    -     * revision, it returns the processed entry.
    -     */
    -    private ProjectFile addFile(ProjectVersion version, String fPath, 
    -            ProjectFileState status, SCMNodeType t, ProjectFile copyFrom) {
    -        ProjectFile pf = new ProjectFile(version);
    -
    -        String path = FileUtils.dirname(fPath);
    -        String fname = FileUtils.basename(fPath);
    -
    -        version.getVersionFiles().addAll(mkdirs(version, path));
    -        
    -        /* cur can point to either the current file version if the
    -         * file has been processed before whithin this revision
    -         * or the previous file version
    -         */
    -        ProjectFile cur = ProjectFile.findFile(project.getId(), fname,
    -        		path, version.getRevisionId(), true);
    -
    -        if (cur != null && 
    -        	!cur.getProjectVersion().getRevisionId().equals(version.getRevisionId()) &&
    -        	!isValidStateTransition(cur.getState(), status)) {
    -        	ProjectFileState newstatus = ProjectFileState.fromStatus(invTransitionFix.get(cur.getState().getStatus()));
    -        	debug("addFile(): Invalid state transition (" + cur.getState() + 
    -        			"->" + status + ") for path " + fPath + ". Setting " + 
    -        			"status to " + newstatus);
    -        	status = newstatus;
    +            msg.debug("replayLog(): Keeping file " + winner);
             }
    -        
    -        Directory dir = Directory.getDirectory(path, true);
    -        pf.setName(fname);
    -        pf.setDir(dir);
    -        pf.setState(status);
    -        pf.setCopyFrom(copyFrom);
    -        pf.setValidFrom(version);
    -        pf.setValidUntil(null);
    -        
    -        SCMNodeType decided = null;
    -        
    -		if (t == SCMNodeType.UNKNOWN) {
    -			if (status.getStatus() == ProjectFileState.STATE_DELETED)
    -				decided = (cur.getIsDirectory() == true ? 
    -						SCMNodeType.DIR : SCMNodeType.FILE);
    -			else 
    -				decided = SCMNodeType.DIR;
    -		} else {
    -			decided = t;
    -		}
    -
    -        if (decided == SCMNodeType.DIR) {
    -            pf.setIsDirectory(true);
    -        } else {
    -            pf.setIsDirectory(false);
    -        }
    -        
    -        debug("addFile(): Adding entry " + pf + "(" + decided + ")");
    -        version.getVersionFiles().add(pf);
    -
    -        return pf;
    -    }
    -    
    -    /**
    -     * Adds or updates directories leading to path. Similar to 
    -     * mkdir -p cmd line command.
    -     */
    -    public Set<ProjectFile> mkdirs(final ProjectVersion pv, String path) {
    -    	Set<ProjectFile> files = new HashSet<ProjectFile>();
    -    	String pathname = FileUtils.dirname(path);
    -    	String filename = FileUtils.basename(path);
    -    	
    -    	ProjectVersion previous = pv.getPreviousVersion();
    -
    -        if (previous == null) { // Special case for first version
    -            previous = pv;
    -        }
    -        
    -    	ProjectFile prev = ProjectFile.findFile(project.getId(),
    -    			filename, pathname, previous.getRevisionId());
    -    	
    -    	ProjectFile pf = new ProjectFile(pv);
    -    	
    -    	if (prev == null) {
    -            pf.setState(ProjectFileState.added());
    -            //Recursion reached the root directory
    -            if (!(pathname.equals("/") && filename.equals(""))) 
    -            	files.addAll(mkdirs(pv, pathname));
    -
    -    	} else {
    -    		pf.setState(ProjectFileState.modified());
    -    	}
    -
    -        pf.setDirectory(true);
    -        pf.setDir(Directory.getDirectory(pathname, true));
    -        pf.setName(filename);
    -        pf.setValidFrom(pv);
    -        
    -        files.add(pf);
    -        debug("mkdirs(): Adding directory " + pf);
    -    	return files;
    -    }
    +    }    
         
         /**
          * Update the validUntil field after all files have been processed.
    @@ -717,88 +284,6 @@ private void updateValidUntil(ProjectVersion pv, Set<ProjectFile> versionFiles)
             }
         }
         
    -    /**
    -     * Mark the contents of a directory as DELETED when the directory has been
    -     * DELETED
    -     * 
    -     * @param pf The project file representing the deleted directory
    -     */
    -    private Set<ProjectFile> handleDirDeletion(final ProjectFile pf, final ProjectVersion pv) {
    -    	Set<ProjectFile> files = new HashSet<ProjectFile>();
    -
    -		if (pf == null || pv == null) {
    -			return files;
    -		}
    -        
    -        if (pf.getIsDirectory() == false) {
    -            return files;
    -        }
    -        
    -        debug("Deleting directory " + pf.getFileName() + " ID "
    -                + pf.getId());
    -        Directory d = Directory.getDirectory(pf.getFileName(), false);
    -        if (d == null) {
    -            warn("Directory entry " + pf.getFileName() + " in project "
    -                    + pf.getProjectVersion().getProject().getName()
    -                    + " is missing in Directory table.");
    -            return files;
    -        }
    -
    -        ProjectVersion prev = pv.getPreviousVersion();
    -        
    -        List<ProjectFile> dirFiles = prev.getFiles(d);
    -        
    -        for (ProjectFile f : dirFiles) {
    -            if (f.getIsDirectory()) {
    -                files.addAll(handleDirDeletion(f, pv));
    -            }
    -            ProjectFile deleted = new ProjectFile(f, pv);
    -            deleted.setState(ProjectFileState.deleted());
    -            files.add(deleted);
    -        }
    -        return files;
    -    }
    -    
    -    /**
    -     * Checks whether file state transitions are valid, at least for what 
    -     * Alitheia Core expects.
    -     */
    -    private boolean isValidStateTransition(ProjectFileState a, ProjectFileState b) {
    -    	for (Pair<Integer, Integer> p: validStateTransitions) {
    -    		if (p.first == a.getStatus())
    -    			if (p.second == b.getStatus())
    -    				return true;
    -    	}
    -    	return false;
    -    }
    -    
    -    /**
    -     * Handle directory copies
    -     */
    -    private void handleDirCopy(ProjectVersion pv, ProjectVersion fromVersion,
    -            Directory from, Directory to, ProjectFile copyFrom) {
    -        
    -        if (!canProcessCopy(from.getPath(), to.getPath())) 
    -            return;
    -       
    -        addFile(pv, to.getPath(), ProjectFileState.added(), SCMNodeType.DIR, copyFrom);
    -        
    -        /*Recursively copy directories*/
    -        List<ProjectFile> fromPF = fromVersion.getFiles(from, ProjectVersion.MASK_DIRECTORIES);
    -        
    -        for (ProjectFile f : fromPF) {
    -            handleDirCopy(pv, fromVersion, Directory.getDirectory(f.getFileName(), false), 
    -            		Directory.getDirectory(to.getPath() + "/" + f.getName(), true), f);
    -        }
    -        
    -        fromPF = fromVersion.getFiles(from, ProjectVersion.MASK_FILES);
    -        
    -        for (ProjectFile f : fromPF) {
    -            addFile(pv, to.getPath() + "/" + f.getName(),
    -                    ProjectFileState.added(), SCMNodeType.FILE, f);
    -        }
    -    }
    -    
         /**
          * This method should return a sensible representation of progress. 
          */
    @@ -811,29 +296,6 @@ public int progress() {
         public String toString() {
             return "GitUpdater - Project:{" + project +"}, " + progress + "%";
         }
    -
    -    /** Convenience method to write warning messages per project */
    -    protected void warn(String message) {
    -            log.warn("Git:" + project.getName() + ":" + message);
    -    }
    -    
    -    /** Convenience method to write error messages per project */
    -    protected void err(String message) {
    -            log.error("Git:" + project.getName() + ":" + message);
    -    }
    -    
    -    /** Convenience method to write info messages per project */
    -    protected void info(String message) {
    -            log.info("Git:" + project.getName() + ":" + message);
    -    }
    -    
    -    /** Convenience method to write debug messages per project */
    -    protected void debug(String message) {
    -        if (log != null)
    -            log.debug("Git:" + project.getName() + ":" + message);
    -        else
    -            System.err.println(message);
    -    }
     }
     
     // vi: ai nosi sw=4 ts=4 expandtab
    diff --git a/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitAccessor.java b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitAccessor.java
    index 052fedd23..c186b8782 100644
    --- a/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitAccessor.java
    +++ b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitAccessor.java
    @@ -20,17 +20,10 @@
     import org.eclipse.jgit.errors.CorruptObjectException;
     import org.eclipse.jgit.errors.IncorrectObjectTypeException;
     import org.eclipse.jgit.errors.MissingObjectException;
    -import org.eclipse.jgit.lib.FileMode;
    -import org.eclipse.jgit.lib.ObjectId;
    -import org.eclipse.jgit.revwalk.RevCommit;
    -import org.eclipse.jgit.revwalk.RevTree;
    -import org.eclipse.jgit.revwalk.RevWalk;
    -import org.eclipse.jgit.treewalk.TreeWalk;
     import org.junit.Before;
     import org.junit.BeforeClass;
     import org.junit.Test;
     
    -import eu.sqooss.plugins.tds.git.GitRevision;
     import eu.sqooss.service.tds.AccessorException;
     import eu.sqooss.service.tds.CommitCopyEntry;
     import eu.sqooss.service.tds.CommitLog;
    diff --git a/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitFileManager.java b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitFileManager.java
    new file mode 100644
    index 000000000..fedd93904
    --- /dev/null
    +++ b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitFileManager.java
    @@ -0,0 +1,98 @@
    +package eu.sqooss.plugins.git.test;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertNotNull;
    +import static org.junit.Assert.assertTrue;
    +import static org.mockito.Mockito.mock;
    +import static org.mockito.Mockito.when;
    +
    +import java.io.IOException;
    +import java.net.URISyntaxException;
    +import java.util.Set;
    +
    +import org.junit.Before;
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.impl.service.logging.LogManagerImpl;
    +import eu.sqooss.plugins.updater.git.GitFileManager;
    +import eu.sqooss.service.db.Directory;
    +import eu.sqooss.service.db.ProjectFile;
    +import eu.sqooss.service.db.ProjectFileState;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.LogManager;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.AccessorException;
    +import eu.sqooss.service.tds.SCMNodeType;
    +import eu.sqooss.service.util.FileUtils;
    +
    +public class TestGitFileManager extends TestGitSetup {
    +
    +    static Logger l;
    +    static StoredProject sp;
    +    static GitFileManager filem;
    +    
    +    static BundleContext bc;
    +	static AlitheiaCore core;
    +    
    +    @BeforeClass
    +    public static void setup() throws IOException, URISyntaxException {
    +        initTestRepo();
    +           
    +        LogManager lm = new LogManagerImpl(true);
    +        l = lm.createLogger("sqooss.updater");
    +        
    +        //AlitheiaCore.testInstance();
    +        sp = new StoredProject();
    +        sp.setName(projectName);
    +    }
    +    
    +    @Before
    +    public void setUp() throws AccessorException, URISyntaxException {
    +        getGitRepo();
    +        assertNotNull(git);
    +        filem = new GitFileManager(sp, l);
    +    }
    +    
    +    @Test
    +    public void testAddFile() {
    +    	ProjectVersion version = new ProjectVersion(sp);
    +    	String fPath = "/someDir/bla/filename.ext";
    +    	ProjectFileState status = ProjectFileState.added();
    +    	ProjectFile copyFrom = null;
    +    	
    +    	ProjectFile pf = filem.addFile(version, fPath, status, 
    +    			SCMNodeType.FILE, copyFrom);
    +    	
    +    	assertEquals(FileUtils.basename(fPath),pf.getName());
    +        assertEquals(FileUtils.dirname(fPath),pf.getDir());
    +        assertEquals(version,pf.getValidFrom());
    +        assertTrue(version.getVersionFiles().contains(pf));    	
    +    }
    +    
    +    @Test
    +    public void testHandleDirCopy() {
    +    	ProjectVersion version = new ProjectVersion(sp);
    +    	ProjectVersion prev = version.getPreviousVersion();
    +    	Directory fdir = Directory.getDirectory("/someDir/bla/",false);
    +    	Directory tdir = Directory.getDirectory("/otherDir/",false);
    +    	filem.handleDirCopy(version, prev, fdir, tdir, null);
    +    	
    +    	assertTrue(false);
    +    }
    +    
    +    @Test
    +    public void testMkdirs(){
    +    	ProjectVersion version = new ProjectVersion(sp);
    +    	String fPath = "/someDir/bla/filename.ext";
    +    	Set<ProjectFile> res = filem.mkdirs(version, fPath);
    +    	for(ProjectFile pf : res){
    +    		if(pf.getDir().equals(FileUtils.dirname(fPath)))
    +    			return;
    +    	}
    +    	assertTrue(false);
    +    }
    +}
    diff --git a/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitProcessor.java b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitProcessor.java
    new file mode 100644
    index 000000000..73cadbcb5
    --- /dev/null
    +++ b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitProcessor.java
    @@ -0,0 +1,199 @@
    +package eu.sqooss.plugins.git.test;
    +
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertNotNull;
    +import static org.junit.Assert.assertNull;
    +import static org.junit.Assert.assertTrue;
    +import static org.mockito.Mockito.mock;
    +import static org.mockito.Mockito.when;
    +
    +import java.io.File;
    +import java.io.IOException;
    +import java.net.URISyntaxException;
    +import java.util.Collection;
    +import java.util.Iterator;
    +import java.util.Properties;
    +
    +import org.apache.commons.io.FileUtils;
    +import org.junit.Before;
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +import org.osgi.framework.BundleContext;
    +
    +import eu.sqooss.core.AlitheiaCore;
    +import eu.sqooss.impl.service.db.DBServiceImpl;
    +import eu.sqooss.impl.service.logging.LogManagerImpl;
    +import eu.sqooss.plugins.updater.git.GitProcessor;
    +import eu.sqooss.service.db.DBService;
    +import eu.sqooss.service.db.Developer;
    +import eu.sqooss.service.db.DeveloperAlias;
    +import eu.sqooss.service.db.ProjectVersion;
    +import eu.sqooss.service.db.StoredProject;
    +import eu.sqooss.service.logging.LogManager;
    +import eu.sqooss.service.logging.Logger;
    +import eu.sqooss.service.tds.AccessorException;
    +import eu.sqooss.service.tds.Revision;
    +
    +public class TestGitProcessor extends TestGitSetup {
    +
    +    static DBService db;
    +    static Logger l;
    +    static StoredProject sp;
    +    static GitProcessor proc;
    +    
    +    static BundleContext bc;
    +	static AlitheiaCore core;
    +    
    +    @BeforeClass
    +    public static void setup() throws IOException, URISyntaxException {
    +        initTestRepo();
    +        
    +        bc = mock(BundleContext.class);
    +		when(bc.getProperty("eu.sqooss.db")).thenReturn("H2");
    +		when(bc.getProperty("eu.sqooss.db.host")).thenReturn("localhost");
    +		when(bc.getProperty("eu.sqooss.db.schema")).thenReturn("alitheia;LOCK_MODE=3;MULTI_THREADED=true");
    +		when(bc.getProperty("eu.sqooss.db.user")).thenReturn("sa");
    +		when(bc.getProperty("eu.sqooss.db.passwd")).thenReturn("");
    +		when(bc.getProperty("eu.sqooss.db.conpool")).thenReturn("c3p0");
    +
    +		core = new AlitheiaCore(bc);
    +        
    +        Properties conProp = new Properties();
    +        conProp.setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver");
    +        conProp.setProperty("hibernate.connection.url", "jdbc:hsqldb:file:alitheia.db");
    +        conProp.setProperty("hibernate.connection.username", "sa");
    +        conProp.setProperty("hibernate.connection.password", "");
    +        conProp.setProperty("hibernate.connection.host", "localhost");
    +        conProp.setProperty("hibernate.connection.dialect", "org.hibernate.dialect.HSQLDialect");
    +        conProp.setProperty("hibernate.connection.provider_class", "org.hibernate.connection.DriverManagerConnectionProvider");
    +        
    +//        conProp.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
    +//        conProp.setProperty("hibernate.connection.url", "jdbc:mysql://localhost/alitheia?useUnicode=true&amp;connectionCollation=utf8_general_ci&amp;characterSetResults=utf8");
    +//        conProp.setProperty("hibernate.connection.username", "root");
    +//        conProp.setProperty("hibernate.connection.password", "george");
    +//        conProp.setProperty("hibernate.connection.host", "localhost");
    +//        conProp.setProperty("hibernate.connection.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
    +//        conProp.setProperty("hibernate.connection.provider_class", "org.hibernate.connection.DriverManagerConnectionProvider");
    +
    +        File root = new File(System.getProperty("user.dir"));
    +        File config = null;
    +        while (true) {
    +            String[] extensions = { "xml" };
    +            boolean recursive = true;
    +
    +            Collection files = FileUtils.listFiles(root, extensions, recursive);
    +
    +            for (Iterator iterator = files.iterator(); iterator.hasNext();) {
    +                File file = (File) iterator.next();
    +                if (file.getName().equals("hibernate.cfg.xml")) {
    +                    config = file;
    +                    break;
    +                }
    +            }
    +
    +            if (config == null)
    +                root = root.getParentFile();
    +            else
    +                break;
    +        }
    +        
    +        LogManager lm = new LogManagerImpl(true);
    +        l = lm.createLogger("sqooss.updater");
    +        
    +        db = new DBServiceImpl(conProp, config.toURL() , l);
    +        db.startDBSession();
    +        sp = new StoredProject();
    +        sp.setName(projectName);
    +        db.addRecord(sp);
    +        db.commitDBSession();
    +    }
    +    
    +    @Before
    +    public void setUp() throws AccessorException, URISyntaxException {
    +        getGitRepo();
    +        assertNotNull(git);
    +        proc = new GitProcessor(sp, git, db, l);
    +    }
    +    
    +    @Test
    +    public void testProcessOneRevision() throws Exception {
    +    	db.startDBSession();
    +    	
    +    	Revision rev = git.newRevision("94f389bf5d9af4511597d035e69d1be9510b50c7");
    +        proc.processOneRevision(rev);
    +    	
    +    	db.rollbackDBSession();
    +    }
    +    
    +    @Test
    +    public void testProcessCopiedFiles() throws Exception {
    +    	db.startDBSession();
    +    	
    +    	Revision cur = git.getFirstRevision();
    +        Revision prev = git.getNextRevision(cur);
    +    	ProjectVersion curv = ProjectVersion.getVersionByRevision(sp, cur.getUniqueId());
    +        assertNotNull(curv);
    +        ProjectVersion prevv = ProjectVersion.getVersionByRevision(sp, prev.getUniqueId());
    +        assertNotNull(prevv);
    +        
    +    	proc.processCopiedFiles(git, cur, curv, prevv);
    +    	assertEquals(0,cur.compare(cur, prev));
    +    	/*for (CommitCopyEntry cce : cur.getCopyOperations()) {
    +    		String fromPath = cce.fromPath();
    +    		String toPath = cce.toPath();
    +    		
    +    		
    +    	}*/
    +    	
    +    	db.rollbackDBSession();
    +    }
    +    
    +    @Test
    +    public void testGetAuthor() {
    +        db.startDBSession();
    +
    +        //Test a properly formatted name
    +        Developer d = proc.getAuthor(sp, "Papa Smurf <pm@smurfvillage.com>");
    +        assertNotNull(d);
    +        assertEquals("Papa Smurf", d.getName());
    +        assertNull(d.getUsername());
    +        assertEquals(1, d.getAliases().size());
    +        assertTrue(d.getAliases().contains(new DeveloperAlias("pm@smurfvillage.com", d)));
    +
    +        //A bit of Developer DAO testing
    +        assertNotNull(Developer.getDeveloperByEmail("pm@smurfvillage.com", sp));
    +        d.addAlias("pm@smurfvillage.com");
    +        assertEquals(1, d.getAliases().size());
    +        
    +        //Test a non properly formated name
    +        d = proc.getAuthor(sp, "Gargamel <gar@smurfvillage.(name)>");
    +        assertNotNull(d);
    +        assertEquals("Gargamel", d.getUsername());
    +        assertNull(d.getName());
    +        assertEquals(1, d.getAliases().size());
    +        assertTrue(d.getAliases().contains(new DeveloperAlias("gar@smurfvillage.(name)", d)));
    +        
    +        //Test a user name only name
    +        d = proc.getAuthor(sp, "Smurfette");
    +        assertNotNull(d);
    +        assertEquals("Smurfette", d.getUsername());
    +        assertNull(d.getName());
    +        assertEquals(0, d.getAliases().size());
    +        
    +        //Test a non properly formated email
    +        d = proc.getAuthor(sp, "Clumsy Smurf <smurfvillage.com>");
    +        assertNotNull(d);
    +        assertNull(d.getUsername());
    +        assertEquals("Clumsy Smurf <smurfvillage.com>", d.getName());
    +        assertEquals(0, d.getAliases().size());
    +        
    +        //Test with name being just an email
    +        d = proc.getAuthor(sp, "chef@smurfvillage.com");
    +        assertNotNull(d);
    +        assertNull(d.getUsername());
    +        assertNull(d.getName());
    +        assertEquals(1, d.getAliases().size());
    +       
    +        db.rollbackDBSession();
    +    }
    +}
    diff --git a/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitUpdater.java b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitUpdater.java
    index c156b2c65..f34a792c6 100644
    --- a/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitUpdater.java
    +++ b/plug-ins/git/src/test/java/eu/sqooss/plugins/git/test/TestGitUpdater.java
    @@ -1,16 +1,19 @@
     package eu.sqooss.plugins.git.test;
     
    -import static org.junit.Assert.*;
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.assertFalse;
    +import static org.junit.Assert.assertNotNull;
    +import static org.junit.Assert.assertTrue;
    +import static org.mockito.Mockito.mock;
    +import static org.mockito.Mockito.when;
     
     import java.io.File;
     import java.io.IOException;
     import java.net.URISyntaxException;
     import java.util.ArrayList;
     import java.util.Collection;
    -import java.util.HashMap;
     import java.util.Iterator;
     import java.util.List;
    -import java.util.Map;
     import java.util.Properties;
     
     import org.apache.commons.io.FileUtils;
    @@ -23,14 +26,13 @@
     import org.junit.Before;
     import org.junit.BeforeClass;
     import org.junit.Test;
    +import org.osgi.framework.BundleContext;
     
     import eu.sqooss.core.AlitheiaCore;
     import eu.sqooss.impl.service.db.DBServiceImpl;
     import eu.sqooss.impl.service.logging.LogManagerImpl;
     import eu.sqooss.plugins.updater.git.GitUpdater;
     import eu.sqooss.service.db.DBService;
    -import eu.sqooss.service.db.Developer;
    -import eu.sqooss.service.db.DeveloperAlias;
     import eu.sqooss.service.db.ProjectFile;
     import eu.sqooss.service.db.ProjectFileState;
     import eu.sqooss.service.db.ProjectVersion;
    @@ -38,9 +40,6 @@
     import eu.sqooss.service.logging.LogManager;
     import eu.sqooss.service.logging.Logger;
     import eu.sqooss.service.tds.AccessorException;
    -import eu.sqooss.service.tds.CommitLog;
    -import eu.sqooss.service.tds.InvalidProjectRevisionException;
    -import eu.sqooss.service.tds.InvalidRepositoryException;
     import eu.sqooss.service.tds.Revision;
     
     public class TestGitUpdater extends TestGitSetup {
    @@ -48,12 +47,25 @@ public class TestGitUpdater extends TestGitSetup {
         static DBService db;
         static Logger l;
         static GitUpdater updater;
    -    static StoredProject sp ;
    +    static StoredProject sp;
    +    
    +    static BundleContext bc;
    +	static AlitheiaCore core;
         
         @BeforeClass
         public static void setup() throws IOException, URISyntaxException {
             initTestRepo();
             
    +        bc = mock(BundleContext.class);
    +		when(bc.getProperty("eu.sqooss.db")).thenReturn("H2");
    +		when(bc.getProperty("eu.sqooss.db.host")).thenReturn("localhost");
    +		when(bc.getProperty("eu.sqooss.db.schema")).thenReturn("alitheia;LOCK_MODE=3;MULTI_THREADED=true");
    +		when(bc.getProperty("eu.sqooss.db.user")).thenReturn("sa");
    +		when(bc.getProperty("eu.sqooss.db.passwd")).thenReturn("");
    +		when(bc.getProperty("eu.sqooss.db.conpool")).thenReturn("c3p0");
    +
    +		core = new AlitheiaCore(bc);
    +        
             Properties conProp = new Properties();
             conProp.setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver");
             conProp.setProperty("hibernate.connection.url", "jdbc:hsqldb:file:alitheia.db");
    @@ -96,9 +108,7 @@ public static void setup() throws IOException, URISyntaxException {
             LogManager lm = new LogManagerImpl(true);
             l = lm.createLogger("sqooss.updater");
             
    -        AlitheiaCore.testInstance();
    -        
    -        db = new DBServiceImpl(conProp, config.toURL() , l);
    +        //db = new DBServiceImpl(conProp, config.toURL() , l);
             db.startDBSession();
             sp = new StoredProject();
             sp.setName(projectName);
    @@ -112,55 +122,6 @@ public void setUp() throws AccessorException, URISyntaxException {
             assertNotNull(git);
             updater = new GitUpdater(db, git, l, sp);
         }
    -    
    -    @Test
    -    public void testGetAuthor() {
    -        db.startDBSession();
    -
    -        //Test a properly formatted name
    -        Developer d = updater.getAuthor(sp, "Papa Smurf <pm@smurfvillage.com>");
    -        assertNotNull(d);
    -        assertEquals("Papa Smurf", d.getName());
    -        assertNull(d.getUsername());
    -        assertEquals(1, d.getAliases().size());
    -        assertTrue(d.getAliases().contains(new DeveloperAlias("pm@smurfvillage.com", d)));
    -
    -        //A bit of Developer DAO testing
    -        assertNotNull(Developer.getDeveloperByEmail("pm@smurfvillage.com", sp));
    -        d.addAlias("pm@smurfvillage.com");
    -        assertEquals(1, d.getAliases().size());
    -        
    -        //Test a non properly formated name
    -        d = updater.getAuthor(sp, "Gargamel <gar@smurfvillage.(name)>");
    -        assertNotNull(d);
    -        assertEquals("Gargamel", d.getUsername());
    -        assertNull(d.getName());
    -        assertEquals(1, d.getAliases().size());
    -        assertTrue(d.getAliases().contains(new DeveloperAlias("gar@smurfvillage.(name)", d)));
    -        
    -        //Test a user name only name
    -        d = updater.getAuthor(sp, "Smurfette");
    -        assertNotNull(d);
    -        assertEquals("Smurfette", d.getUsername());
    -        assertNull(d.getName());
    -        assertEquals(0, d.getAliases().size());
    -        
    -        //Test a non properly formated email
    -        d = updater.getAuthor(sp, "Clumsy Smurf <smurfvillage.com>");
    -        assertNotNull(d);
    -        assertNull(d.getUsername());
    -        assertEquals("Clumsy Smurf <smurfvillage.com>", d.getName());
    -        assertEquals(0, d.getAliases().size());
    -        
    -        //Test with name being just an email
    -        d = updater.getAuthor(sp, "chef@smurfvillage.com");
    -        assertNotNull(d);
    -        assertNull(d.getUsername());
    -        assertNull(d.getName());
    -        assertEquals(1, d.getAliases().size());
    -       
    -        db.rollbackDBSession();
    -    }
        
         @Test
         public void testUpdate() throws Exception {