From c3372feadd61b606519cd0c191550be8368b7742 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Wed, 2 Apr 2025 13:35:25 +0300 Subject: [PATCH 1/6] updated icons --- bundle/icons/critical.png | Bin 425 -> 324 bytes bundle/icons/criticalnotapplic.png | Bin 0 -> 1082 bytes bundle/icons/high.png | Bin 396 -> 345 bytes bundle/icons/highnotapplic.png | Bin 0 -> 1105 bytes bundle/icons/low.png | Bin 290 -> 278 bytes bundle/icons/lownotapplic.png | Bin 0 -> 1076 bytes bundle/icons/medium.png | Bin 417 -> 378 bytes bundle/icons/mediumnotapplic.png | Bin 0 -> 1059 bytes bundle/icons/unknown.png | Bin 426 -> 327 bytes bundle/icons/unknownnotapplic.png | Bin 0 -> 1074 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 bundle/icons/criticalnotapplic.png create mode 100644 bundle/icons/highnotapplic.png create mode 100644 bundle/icons/lownotapplic.png create mode 100644 bundle/icons/mediumnotapplic.png create mode 100644 bundle/icons/unknownnotapplic.png diff --git a/bundle/icons/critical.png b/bundle/icons/critical.png index 9e61d5cad9abd144bb94bad9859007be6b33a408..302b30059c2cdda28e3528d6e9798dbc104865f8 100644 GIT binary patch delta 298 zcmV+_0oDGg1H=N5BYy!4Nkl$d}y6!Li{^UT_#dae^`8#m8ZODx9!#SQ3vKpZ@>R_QkG!}#yNEB ww&ph1COBiRlp~_U;m;gj3Mr#&pXp^B0VBd&!a}=4#Q*>R07*qoM6N<$f`?p*BLDyZ delta 400 zcmV;B0dM}q0;vO#BYyw^b5ch_0Itp)=>Px$V@X6oR5%f(ld(<$VGPIHf|@8|faqY1 zVRg_!Cyf{e7JLU+6BFM-UI14{AHZGRHJUiO5C<1yqER^vUuRH0D43q6W$O1o@c_YNznV`uv+N@N{ayd#N01)AREKa%5o_M-m z>Cy}o?_y+MVc`djt^EDdjY&#X~juzw(p-Rq~onhjo>*>b&I7k!AGR4BmNEPMzK^TgmibKaFH;Ls4>N>Q#{`4 zCWL2^sU__iVR6K3HNqWalGY#|-x*+GvwiIl-Xlhd|m7~AA?bXkm9&K94GWTUT{BeT$yX@}{hrb^Whx<=Redbkr zlHcCr{7+K56D{+IrQ5uCJ<+Q7czK6opE{Lp1*8zx>wJI4Vu>SfIdpy0+j#Ej2R3$C zf5U@^oNTakW5(YHr+fRaXWZW(RZnu8CN>_40007QNklcE4I zTAh!m!n=Mn+AK%U@3=hQP`i0-AcZSMRetci)jsP}w0f+@hPF+r1Jq&|%X4;b{KAK- z+G%uq#m=Lr%N=;;W`Ov%!D>B*p)=btQ~?44Pyw$bqfb5mywO?MweoQ7_aC2p4B!AT z9RL#`9R&eSnCycj zOEb%vfz34kS>1pJMmISPoYS^qyq=<625kWmQO*sV7@9FX0wiF`(9h=i2A4?DeL~c# z#3tZ@G8x0;H;8(wWJ5%L6#mT|U!v$;WQ}B(n1w+ql+uuCxiJS!J6S(v{=PzbBRc=9 zIo736cgbBP`fZro;X>@jqW+*-YWL?YOiwkjk$&(4otDyV5h|Jc%#sF(KZLD-46~CK z?OEB(zYdE9bA#bRkN(B;gHB%Fe0}3dbx5`*^Jj!z5a~UkQIcCquC`a6YTXL$dg-R& z7?9+dW;yv}msd|NwzEz*iy_pG?p>75WYvCudB0k>X6sLL|5+wsxRgkTQ#k$FX4YHy zqWo+7n()^oEPDT)pT_SO4)$WQ<$sNgUUr@T2LI;=)= zopb)6z}VX4az3|6)FS{}N&Mt3zi}>$3jDR(J>CY~HG%!`3V$HGb}ki1ZK7N_42u1_ zW7yrV-B!VkHk^X^e@Sv4gv1`ja-#yLpcLT2O+sR-^*ev+gDkNR3XoDhB(7$&XC}w8 z#11)b_Ei%oh(6#*6iSV10$S@~nL(5Q;$!LZGUs%USU7dTjvH* z0l}{^8E-EQ#W*<^cf&yK7$t!xpH}0=s&ls*Z+uKY#VomW8 R--rMJ002ovPDHLkV1h?=l|KLg delta 370 zcmV-&0ge9I0*nKYBYyw^b5ch_0Itp)=>Px$MoC0LR5%f(Q?W_|K@go;_D%?-Ol1*8 z%YYvsSctV&V(&Kywug{H$T#F4Of43H_z70AxWdXt6a>A?jx%?=>t?+LAp^(m%)Iwz zZg&=7L&KO)w}<`jPq^a5Dd+ZWen|kcyayA!UVMa{HG!%)I)65%o-$w;d-{TcylyhA;1AI?hEnY^^}dw7w#< zQxm>%2ML4|AZvJL#6gT&t;`q^t2l1`rL65OAl!9=w7$qN>pUOsY32oF!q_Qe5oKUd zDH_Ca!CKDm;cPTWQb8t5CQQ`DPgogFpt<807*qoM6N<$f@G(tIRF3v diff --git a/bundle/icons/highnotapplic.png b/bundle/icons/highnotapplic.png new file mode 100644 index 0000000000000000000000000000000000000000..4336456cd3d9cb19b2b2b1df57b3a09801efd54f GIT binary patch literal 1105 zcmV-X1g`suP)t^EDdjY&#X~juzw(p-Rq~onhjo>*>b&I7k!AGR4BmNEPMzK^TgmibKaFH;Ls4>N>Q#{`4 zCWL2^sU__iVR6K3HNqWalGY#|-x*+GvwiIl-Xlhd|m7~AA?bXkm9&K94GWTUT{BeT$yX@}{hrb^Whx<=Redbkr zlHcCr{7+K56D{+IrQ5uCJ<+Q7czK6opE{Lp1*8zx>wJI4Vu>SfIdpy0+j#Ej2R3$C zf5U@^oNTakW5(YHr+fRaXWZW(RZnu8CN>_40007nNklKX}RG;A`fQKE!sv@)^r4=^T_#%N+sNn&BN@gFc2_IAbw2$cl0E{ltR0T+mb z%s9)8FgsuO-uHbhX0vY3(>={E=j5CtGvjG426*(*#}xemwKHePw{GEke=kKxUwSj! z{QWh6(yN^<`ondb?CwPMGPCZGrB|M(^vzcb01i~CDF5^JY8X#W`u>yEqW4?NEw!fz zn{QnGP)X^%xYg(uqw!CQ-5r&Z{}te)H&k!GKVRQ`L1~(+*+>*ZhWGyppwX0xV_`NY zNJ@bUSly&~z|9T&0$B%X0GOe2EI%l_*`0kr``EMF zX}i8r6#hlI=%zDW!~#%!BK(QM#S?Q$11u!u&EdFub$hU~y>FqqatM6(>+FeJk?BW6 zIoRh$=t$g{1%2S~hFO#(+?&!m-^-31DAL9?s+IDi%H6H+MvwFQ`0aPkMzirz%({R% zxzwi9BgJTUM{6&C-{~x6tMlmrK%PUbhI(DfwN`yvEthOElB6aeo6T!(`MF!I*V{kn zpND-)5z!*WJwP0Tb5MAaMzyO-Y8&m6u|I&s|R_x^$+EP4v)Y3KYO XpIa`P4oUJ^00000NkvXXu0mjf=AIA{ literal 0 HcmV?d00001 diff --git a/bundle/icons/low.png b/bundle/icons/low.png index d35134d18b1b6c2c699826c704e3f1206b80cf62..4f99c4bb14ade996de7d141dc5f4f3c4265dfabe 100755 GIT binary patch delta 250 zcmV}ovH>mq zt|kCrPv56Inl{rCdj$ac=A?0)TL3oavDv>kdEG)PFm$C^nF>`|1_2|4OFT}IFe@uy^2Xkjb)|-Ip3;+NC07*qoM6N<$g6ex{ AEC2ui delta 262 zcmV+h0r~!x0-^$tB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0002Q zNklas^(z^0A~kKz3|*n|xL+U@|PKu%u( z#SXZY;944au>b%7 M07*qoM6N<$f>kkTpa1{> diff --git a/bundle/icons/lownotapplic.png b/bundle/icons/lownotapplic.png new file mode 100644 index 0000000000000000000000000000000000000000..216c97d542050d8e57b4555f822b1939dffd4e51 GIT binary patch literal 1076 zcmV-41k3x0P)t^EDdjY&#X~juzw(p-Rq~onhjo>*>b&I7k!AGR4BmNEPMzK^TgmibKaFH;Ls4>N>Q#{`4 zCWL2^sU__iVR6K3HNqWalGY#|-x*+GvwiIl-Xlhd|m7~AA?bXkm9&K94GWTUT{BeT$yX@}{hrb^Whx<=Redbkr zlHcCr{7+K56D{+IrQ5uCJ<+Q7czK6opE{Lp1*8zx>wJI4Vu>SfIdpy0+j#Ej2R3$C zf5U@^oNTakW5(YHr+fRaXWZW(RZnu8CN>_40007KNklEX8{tdHMT? z4luEJU+dR*MEaYa}1aJO*HkFx5j?uxb#}$~KdUBIn=jV-&0_ zKs3&~$FmZqx}vR3umboM_!*c4j(KEFRKHGJ>9$w#t7dcSV*uTAFaY|1?fRh&JOH@| zoN)7JD)N0urHRp(quC;9=#2?PaNx~zm^(+@*ac@=$H=l7iy~|Y)cXqD>jT^OQl+CR zPgLbf$dbyUEt~nG2!8_+sKy}*+I4)i2Q;7npHbzN1kJ38Uzqu65nccRs7$0A#tNeU zMYJwL3z&2FM`FoO;)0j)6C1`OI8Ol;mz)s0RW@4Pw{T*9O%6@1cw?uC`c#FhAxTE4 z&g0GPMC?0+=Ll`ndRltzyZOuGYhw#KahSMM-Dc1~9&@`9L`$dsylLVoDZ&RGS z6p+|-5IS%=NC_^%AI4@Tu`W`AjUU2%a6gvzc2{@O8Mrd&Tq5&_BL>F*B)J((vZJ9}(1?8KWAJ5GsZ3aJCPu2B|-oD;7%)xaf{Z5C?;4x_>eoQJ&6XU5J?|)a$4s ziVb#Ldx~jUB!uk<2l7!dHYanu45!JxjcYYH;NX6X{G&7w6lK2a*|@S=CMx~ksNRDT z2!*~T0vmCJ?g}VsWX4d~DaBi2nm2S`Ed$;2uF5daXxcF4>)mZF2l{Lo{0O-&*N~q1 z_8}*laCbz#B3a*~6Sp=<$(ys#1M`ZmU|Kn|WN9_{GkJFc4Nk0D=t+FuKUJ~TGa7;( ylvNWqSW|4Rpoq-xdpXO6zRXw(8Jzo>u8v>F{dCgGniygL0000Px$TS-JgR5%f}Qok=mK@k3y3lbD6G#sH( zh(sZmD-?QBC`3bZoe;HXNT@Dxe}F$iLZkDe5S@fdualRkoa8dT+4pwe?!9}J*yO#P z@0)LCXJ!}p&m|8yk~<{wi0!g-OqoOOu>ipf{S_D_7{t6;!GCABzOS3`Sa4y3l@N^K z8zoXv)Vx=W?L zm)Y&EbJ*RWYJYdZbi{-2;~5jm`2@_|;+NwzqQ-}G%f!_b`u_;8^<0q+;9#~GT=(wW zxMa7Rgf}_mtsTy6F+EXm>gm`RCe*k+Pa1S diff --git a/bundle/icons/mediumnotapplic.png b/bundle/icons/mediumnotapplic.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a941e7e1cbe9090fc5507473547e83748eeea9 GIT binary patch literal 1059 zcmV+;1l;?HP)t^EDdjY&#X~juzw(p-Rq~onhjo>*>b&I7k!AGR4BmNEPMzK^TgmibKaFH;Ls4>N>Q#{`4 zCWL2^sU__iVR6K3HNqWalGY#|-x*+GvwiIl-Xlhd|m7~AA?bXkm9&K94GWTUT{BeT$yX@}{hrb^Whx<=Redbkr zlHcCr{7+K56D{+IrQ5uCJ<+Q7czK6opE{Lp1*8zx>wJI4Vu>SfIdpy0+j#Ej2R3$C zf5U@^oNTakW5(YHr+fRaXWZW(RZnu8CN>_400073Nkl10L7{Kx0xifd> zPBYWIwAxaV>Y~;LS_%=BLcx{b#)aTUK|g?>K$n6mSAy%V1V4aKM3D+E1cSy`R5T6E z!er7+CUG*E$;_R5kBg2Z`yO}}2Oj?XpSKWW^f<2yK7Ny7hud$n^*j4p^Ugi>yv?6) zinx69SL2=UZ4Wxk)7quG$h#j-0Z?lM?Z1`{`_Jj^Ej#GUnwc9Sdho-m()1tg&3D>y&(>q&j8sN7Q+GI?Lt*~do-h=%AR6T&~#z9y{VEb&Q_RY`hRr8-i?cNFo4 zN%asO0fLA)g%uJFX?0tO#IQl}jd4MYuZdv=ZHfG(2QlQta;iHL^D7c(6yY;P^(W0D z7?({kB!U3~#-|Os7)}2`!yXgzgETI9^v2-DwYIh0335 z?m6FLrZ;O8ui*ft7&A%ImDbl!N?3gQzJGgby1f^rl}uLdNRv6+S<`V`HrG2RR!c!D zBrQk%ALXNs6Ts3%D*3AI-X)dzxk;q(mhxyxS~*n4hm^02@uIZ;i(&bd(csh~ZLTqB z?0MzyJBne`m$%Pp$A5BuDe>T_47YXL9<%+An89#tde$3^YSVaPkFjM%;Pe@_MW4{zP2h delta 401 zcmV;C0dD@s0;&U$BYyw^b5ch_0Itp)=>Px$WJyFpR5%f(k~>brKoEv^HV7m{kSJ-O zNSg!D!UgCkDeN+W*nv|Zh#gQ$yP%{@jiBWKsSph`lt>ARcx8wEZSTslV<}QnWXHQR z-@JYymi$pMzTdywn0}8urD$KjHHmngS-fa_P~W0U*LBDFn12}nf`7k8&w|Bv-pSY` z=vCIpIq{tbb0>|_>)r0OT1TH!(1p1xo-BA*DZal6;sf)R0FasgexAZ^?4O>wp(OH+ zL-Ay0Qd5qjD5~Qv0ifrkY^AyjL3AbK4?eemY+z|J4Y|IGJX9j2?4+0Fe-piirhedoD6GC7lT%a|S!K0BsD)(b-MKV5Q_o z3xL8Pl0_iNOh~-f);2@eL`K(t7pxVaFWnO0W!+U?^v v^IpmZg+V0gp1F}tdx)MM2A015yANkvXXu0mjfx*xTL diff --git a/bundle/icons/unknownnotapplic.png b/bundle/icons/unknownnotapplic.png new file mode 100644 index 0000000000000000000000000000000000000000..763d0a23459e922d2769c862ae913cd158a7bc87 GIT binary patch literal 1074 zcmV-21kL-2P)t^EDdjY&#X~juzw(p-Rq~onhjo>*>b&I7k!AGR4BmNEPMzK^TgmibKaFH;Ls4>N>Q#{`4 zCWL2^sU__iVR6K3HNqWalGY#|-x*+GvwiIl-Xlhd|m7~AA?bXkm9&K94GWTUT{BeT$yX@}{hrb^Whx<=Redbkr zlHcCr{7+K56D{+IrQ5uCJ<+Q7czK6opE{Lp1*8zx>wJI4Vu>SfIdpy0+j#Ej2R3$C zf5U@^oNTakW5(YHr+fRaXWZW(RZnu8CN>_40007INklDfk2Qq@YEiru9!iNc;d&(NQA>A|ioAK`cvAqOihd z{IR<;o}In-r5I-ov^mnL?s?C7pQCe45-$@0;K9$kocbBBZ(d|PZJ0LIE9=?dy`%Bu zZ3Jtpz2EB7_F2(bRc<*g8t*@sU@2KW_S&i4S%-3K#JgM#& z_F)KaG@Ulzd+&Dt<{txxlq_pQUzFh8yqZre@XQRVU09-eNS}*|;VE+;d7$QA$ zrX8QzJkITI5;yZaj28%Jg)h>84Il>!q~8hJab{67`&@~)Fh*vb%Rr}S)lJXo9==61 zh)Xy05T3NB?GLBT z@%bSg-@niE@%Zm|x3|CExV$;|v!WMaFZ-SU0ix|Gf0QfaF#rGn07*qoM6N<$f}vRn0{{R3 literal 0 HcmV?d00001 From 4b76de72ad27f62d3a76ac4bff65c8d2cd3fff7e Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Wed, 2 Apr 2025 13:54:17 +0300 Subject: [PATCH 2/6] changed implementation for issues tree representation --- .../eclipse/ui/ScanTreeContentProvider.java | 35 ++++++++++++++++--- .../jfrog/ide/eclipse/ui/SearchableTree.java | 9 +++-- .../issues/IssueCountColumnLabelProvider.java | 8 +++-- .../ide/eclipse/ui/issues/IssuesTree.java | 11 +++--- .../issues/IssuesTreeColumnLabelProvider.java | 24 ++++++++++--- 5 files changed, 66 insertions(+), 21 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java index 4f4861d..ed5505b 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java @@ -1,7 +1,13 @@ package com.jfrog.ide.eclipse.ui; +import java.util.List; + +import javax.swing.tree.TreeNode; + import org.eclipse.jface.viewers.ITreeContentProvider; -import org.jfrog.build.extractor.scan.DependencyTree; + +import com.jfrog.ide.common.nodes.FileIssueNode; +import com.jfrog.ide.common.nodes.FileTreeNode; /** * Content provider for DependenciesTree. @@ -9,7 +15,6 @@ * @author yahavi */ public class ScanTreeContentProvider implements ITreeContentProvider { - private static final DependencyTree[] EMPTY_NODE = new DependencyTree[0]; @Override public Object[] getElements(Object element) { @@ -18,16 +23,36 @@ public Object[] getElements(Object element) { @Override public Object[] getChildren(Object element) { - return (((DependencyTree) element).getChildren()).toArray(EMPTY_NODE); + if (element instanceof FileTreeNode) { + List children = ((FileTreeNode) element).getChildren(); + return children.toArray(); + } else if (element instanceof List) { + // If the element is a List (root nodes), return its elements + List list = (List) element; + return list.toArray(); + } + return new Object[0]; } @Override public Object getParent(Object element) { - return ((DependencyTree) element).getParent(); + if (element instanceof FileTreeNode) { + return ((FileTreeNode) element).getParent(); + } + if (element instanceof FileIssueNode) { + return ((FileIssueNode) element).getParent(); + } + return null; } @Override public boolean hasChildren(Object element) { - return !((DependencyTree) element).isLeaf(); + if (element instanceof FileTreeNode) { + return !((FileTreeNode) element).isLeaf(); + } + if (element instanceof FileIssueNode) { + return ((FileIssueNode) element).isLeaf(); + } + return false; } } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java index c51272c..8a60a7c 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java @@ -1,5 +1,6 @@ package com.jfrog.ide.eclipse.ui; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -19,6 +20,7 @@ import org.jfrog.build.extractor.scan.DependencyTree; import com.google.common.collect.Lists; +import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.utils.ProjectsMap; /** @@ -31,6 +33,7 @@ public abstract class SearchableTree extends FilteredTree { protected ProjectsMap projects = new ProjectsMap(); protected ComponentDetails componentDetails; private TreeColumnLayout treeLayout = new TreeColumnLayout(); + protected List scanResults = new ArrayList(); public SearchableTree(Composite parent, ColumnLabelProvider labelProvider) { super(parent, true); @@ -106,11 +109,11 @@ public void expandAll() { } public void reset() { - projects.clear(); + scanResults.clear(); } - public void addScanResults(String projectName, DependencyTree dependencyTree) { - projects.put(projectName, dependencyTree); + public void addScanResults(List scanResults) { + scanResults.addAll(scanResults); } public abstract void applyFilters(ProjectsMap.ProjectKey projectName); diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssueCountColumnLabelProvider.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssueCountColumnLabelProvider.java index 93138d3..771f35c 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssueCountColumnLabelProvider.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssueCountColumnLabelProvider.java @@ -5,7 +5,8 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.widgets.Composite; -import org.jfrog.build.extractor.scan.DependencyTree; + +import com.jfrog.ide.common.nodes.FileTreeNode; /** * The issues count component in the issues tree. @@ -22,7 +23,10 @@ public IssueCountColumnLabelProvider(Composite parent) { @Override public String getText(Object element) { - int issueCount = ((DependencyTree) element).getIssueCount(); + int issueCount = 0; + if (element instanceof FileTreeNode) { + issueCount = ((FileTreeNode) element).getChildCount(); + } return issueCount == 0 ? "" : "(" + issueCount + ")"; } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java index 589654d..7dcda3d 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java @@ -1,5 +1,6 @@ package com.jfrog.ide.eclipse.ui.issues; +import java.util.ArrayList; import java.util.Map.Entry; import org.eclipse.jface.viewers.TreeViewerColumn; @@ -9,6 +10,7 @@ import com.google.common.collect.Lists; import com.jfrog.ide.common.filter.FilterManager; +import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.ui.FilterManagerSingleton; import com.jfrog.ide.eclipse.ui.SearchableTree; import com.jfrog.ide.eclipse.utils.ProjectsMap.ProjectKey; @@ -19,7 +21,6 @@ public class IssuesTree extends SearchableTree { private static IssuesTree instance; - private DependencyTree root = new DependencyTree(); private ComponentIssueTable componentIssueTable; private TreeViewerColumn issuesCountColumn; @@ -34,8 +35,7 @@ public static IssuesTree getInstance() { private IssuesTree(Composite parent) { super(parent, new IssuesTreeColumnLabelProvider()); - issuesCountColumn = createColumn("Issues (0)", new IssueCountColumnLabelProvider(this), SWT.RIGHT, 0); - applyFiltersForAllProjects(); + issuesCountColumn = createColumn("Issues", new IssueCountColumnLabelProvider(this), SWT.RIGHT, 0); } @Override @@ -79,9 +79,8 @@ public void applyFiltersForAllProjects() { public void reset() { super.reset(); componentIssueTable.updateIssuesTable(Lists.newArrayList()); - issuesCountColumn.getColumn().setText("Issues (0)"); - root = new DependencyTree(); - treeViewer.setInput(root); + issuesCountColumn.getColumn().setText("Issues"); + treeViewer.setInput(new ArrayList()); } public static void disposeTree() { diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTreeColumnLabelProvider.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTreeColumnLabelProvider.java index fa725a7..1ef37cd 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTreeColumnLabelProvider.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTreeColumnLabelProvider.java @@ -2,8 +2,12 @@ import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.swt.graphics.Image; -import org.jfrog.build.extractor.scan.DependencyTree; -import org.jfrog.build.extractor.scan.Severity; +import com.jfrog.ide.common.nodes.subentities.Severity; + +import com.jfrog.ide.common.nodes.FileIssueNode; +import com.jfrog.ide.common.nodes.FileTreeNode; +import com.jfrog.ide.common.nodes.ScaIssueNode; +import com.jfrog.ide.common.parse.Applicability; import com.jfrog.ide.eclipse.ui.IconManager; /** @@ -15,8 +19,18 @@ public class IssuesTreeColumnLabelProvider extends ColumnLabelProvider { @Override public Image getImage(Object element) { - DependencyTree scanTreeNode = (DependencyTree) element; - Severity severity = scanTreeNode.getTopIssue().getSeverity(); - return IconManager.load(severity.name().toLowerCase()); + Severity severity = null; + if (element instanceof FileTreeNode) { + severity = ((FileTreeNode) element).getSeverity(); + } else if (element instanceof ScaIssueNode) { + ScaIssueNode issueNode = (ScaIssueNode) element; + severity = issueNode.getSeverity(); + if (Applicability.NOT_APPLICABLE.equals(issueNode.getApplicability())) { + severity = Severity.getNotApplicableSeverity(severity); + } + } else if (element instanceof FileIssueNode) { + severity = ((FileIssueNode) element).getSeverity(); + } + return IconManager.load(severity.name().toLowerCase()); } } From a35b0725ea3372e0e0eda09e625531154fb0fa74 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Wed, 2 Apr 2025 18:22:39 +0300 Subject: [PATCH 3/6] removed filter action from toolbar + added separators to improve appearance --- .../java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java index d13e5f1..0077c79 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java @@ -3,6 +3,8 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; + import com.jfrog.ide.eclipse.ui.actions.CollapseAll; import com.jfrog.ide.eclipse.ui.actions.ExpandAll; import com.jfrog.ide.eclipse.ui.actions.Filter; @@ -19,13 +21,19 @@ public XrayScanToolbar(Composite parent) { super(parent); ToolBar toolBar = new ToolBar(this, SWT.NONE); new Refresh(toolBar); + createSeparator(toolBar, 20); new CollapseAll(toolBar); + createSeparator(toolBar, 20); new ExpandAll(toolBar); - filter = new Filter(toolBar); toolBar.pack(); } public void setFilterType(Filter.FilterType filterType) { filter.setFilterType(filterType); } + + private void createSeparator(ToolBar toolBar, int width) { + ToolItem sep = new ToolItem(toolBar, SWT.SEPARATOR); + sep.setWidth(width); + } } From 39697eb70ea5a2e8b7fb811668b2413ce2de4a77 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 6 Apr 2025 14:04:16 +0300 Subject: [PATCH 4/6] rebase and minor fixes --- .../com/jfrog/ide/eclipse/scan/ScanManager.java | 16 ++++++++++++---- .../com/jfrog/ide/eclipse/ui/SearchableTree.java | 4 ++-- .../jfrog/ide/eclipse/ui/issues/IssuesTree.java | 5 +---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java index c4cd81f..f46888e 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java @@ -177,10 +177,18 @@ public void run(IProgressMonitor monitor) throws CoreException { log.info("Finished audit scan successfully.\n" + auditResults.getRes()); log.debug(auditResults.getErr()); - log.debug("Updating scan cache."); - ScanCache.getInstance().updateScanResults(sarifParser.parse(auditResults.getRes())); - - // TODO: update issues tree + log.debug("Updating scan results in UI."); + issuesTree.addScanResults(sarifParser.parse(auditResults.getRes())); + // update the issues tree in the UI with the scan results + parent.getDisplay().syncExec(new Runnable() { + @Override + public void run() { + if (monitor.isCanceled()) { + return; + } + issuesTree.applyFiltersForAllProjects(); + } + }); } } catch (CancellationException ce) { log.info(ce.getMessage()); diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java index 8a60a7c..72c5f13 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java @@ -112,8 +112,8 @@ public void reset() { scanResults.clear(); } - public void addScanResults(List scanResults) { - scanResults.addAll(scanResults); + public void addScanResults(List results) { + scanResults.addAll(results); } public abstract void applyFilters(ProjectsMap.ProjectKey projectName); diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java index 7dcda3d..1d9005e 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java @@ -69,10 +69,7 @@ public void applyFilters(ProjectKey projectKey) { @Override public void applyFiltersForAllProjects() { - root = new DependencyTree(); - for (Entry entry : projects.entrySet()) { - applyFilters(entry.getKey()); - } + treeViewer.setInput(scanResults); } @Override From 263ba2d3ff089750dc89550272fb0d0c93ad50e1 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 6 Apr 2025 14:17:34 +0300 Subject: [PATCH 5/6] final fixes --- .../jfrog/ide/eclipse/scan/ScanManager.java | 2 +- .../eclipse/ui/ScanTreeContentProvider.java | 1 - .../jfrog/ide/eclipse/ui/SearchableTree.java | 7 +++--- .../ide/eclipse/ui/issues/IssuesTree.java | 25 ------------------- 4 files changed, 5 insertions(+), 30 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java index f46888e..00107f5 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java @@ -186,7 +186,7 @@ public void run() { if (monitor.isCanceled()) { return; } - issuesTree.applyFiltersForAllProjects(); + issuesTree.showResultsOnTree(); } }); } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java index ed5505b..cecbf60 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java @@ -1,7 +1,6 @@ package com.jfrog.ide.eclipse.ui; import java.util.List; - import javax.swing.tree.TreeNode; import org.eclipse.jface.viewers.ITreeContentProvider; diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java index 72c5f13..fdb4724 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java @@ -30,7 +30,6 @@ */ public abstract class SearchableTree extends FilteredTree { - protected ProjectsMap projects = new ProjectsMap(); protected ComponentDetails componentDetails; private TreeColumnLayout treeLayout = new TreeColumnLayout(); protected List scanResults = new ArrayList(); @@ -115,8 +114,10 @@ public void reset() { public void addScanResults(List results) { scanResults.addAll(results); } - - public abstract void applyFilters(ProjectsMap.ProjectKey projectName); + + public void showResultsOnTree() { + treeViewer.setInput(scanResults); + } public abstract void applyFiltersForAllProjects(); } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java index 1d9005e..a8300c4 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java @@ -1,7 +1,6 @@ package com.jfrog.ide.eclipse.ui.issues; import java.util.ArrayList; -import java.util.Map.Entry; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; @@ -9,11 +8,8 @@ import org.jfrog.build.extractor.scan.DependencyTree; import com.google.common.collect.Lists; -import com.jfrog.ide.common.filter.FilterManager; import com.jfrog.ide.common.nodes.FileTreeNode; -import com.jfrog.ide.eclipse.ui.FilterManagerSingleton; import com.jfrog.ide.eclipse.ui.SearchableTree; -import com.jfrog.ide.eclipse.utils.ProjectsMap.ProjectKey; /** * @author yahavi @@ -21,7 +17,6 @@ public class IssuesTree extends SearchableTree { private static IssuesTree instance; - private DependencyTree root = new DependencyTree(); private ComponentIssueTable componentIssueTable; private TreeViewerColumn issuesCountColumn; @@ -48,28 +43,8 @@ public void setComponentIssueTable(ComponentIssueTable componentIssueTable) { this.componentIssueTable = componentIssueTable; } - @Override - public void applyFilters(ProjectKey projectKey) { - DependencyTree project = projects.get(projectKey); - if (project != null) { - FilterManager filterManager = FilterManagerSingleton.getInstance(); - DependencyTree filteredRoot = filterManager.applyFilters(project); - filteredRoot.setIssues(filteredRoot.processTreeIssues()); - root.add(filteredRoot); - if (root.getChildCount() == 1) { - // If there is only one project - Show only its dependencies in the tree viewer. - treeViewer.setInput(filteredRoot); - } else { - treeViewer.setInput(root); - } - long totalIssues = root.getChildren().stream().mapToInt(DependencyTree::getIssueCount).sum(); - issuesCountColumn.getColumn().setText("Issues (" + totalIssues + ")"); - } - } - @Override public void applyFiltersForAllProjects() { - treeViewer.setInput(scanResults); } @Override From 9222e57c11b0ef25632e1f3aaa6d5edcec6823f3 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 14:27:34 +0300 Subject: [PATCH 6/6] fix CR comments --- .../main/java/com/jfrog/ide/eclipse/scan/ScanManager.java | 3 --- .../com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java | 8 +++++--- .../java/com/jfrog/ide/eclipse/ui/SearchableTree.java | 2 +- .../java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java | 5 +++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java index 00107f5..508dacc 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/scan/ScanManager.java @@ -1,8 +1,6 @@ package com.jfrog.ide.eclipse.scan; import java.io.File; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CancellationException; @@ -32,7 +30,6 @@ * @author yahavi */ public class ScanManager { - static final Path HOME_PATH = Paths.get(System.getProperty("user.home"), ".jfrog-eclipse-plugin"); private static ScanManager instance; private IProgressMonitor monitor; private IWorkspace iworkspace; diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java index cecbf60..a0b99a1 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ScanTreeContentProvider.java @@ -26,9 +26,11 @@ public Object[] getChildren(Object element) { List children = ((FileTreeNode) element).getChildren(); return children.toArray(); } else if (element instanceof List) { - // If the element is a List (root nodes), return its elements - List list = (List) element; - return list.toArray(); + List elementList = (List) element; + // Verify the element is a List of FileTreeNode, then return its elements + if(!elementList.isEmpty() && elementList.get(0) instanceof FileTreeNode) { + return elementList.toArray(); + } } return new Object[0]; } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java index fdb4724..a5be9a1 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/SearchableTree.java @@ -30,8 +30,8 @@ */ public abstract class SearchableTree extends FilteredTree { - protected ComponentDetails componentDetails; private TreeColumnLayout treeLayout = new TreeColumnLayout(); + protected ComponentDetails componentDetails; protected List scanResults = new ArrayList(); public SearchableTree(Composite parent, ColumnLabelProvider labelProvider) { diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java index 0077c79..01a6c59 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/XrayScanToolbar.java @@ -16,14 +16,15 @@ public class XrayScanToolbar extends Panel { private Filter filter; + private final int SPACER_WIDTH = 20; public XrayScanToolbar(Composite parent) { super(parent); ToolBar toolBar = new ToolBar(this, SWT.NONE); new Refresh(toolBar); - createSeparator(toolBar, 20); + createSeparator(toolBar, SPACER_WIDTH); new CollapseAll(toolBar); - createSeparator(toolBar, 20); + createSeparator(toolBar, SPACER_WIDTH); new ExpandAll(toolBar); toolBar.pack(); }