From 4e126bd7f8c0c470f4629fa9e203fcdbdc96a2b3 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Sun, 6 Apr 2025 18:11:02 +0300 Subject: [PATCH 1/5] updated issue details panel to show SCA + JAS findings --- .../ide/eclipse/ui/ComponentDetails.java | 28 +++++++++---------- .../jfrog/ide/eclipse/ui/SearchableTree.java | 7 +++-- .../com/jfrog/ide/eclipse/ui/UiUtils.java | 2 +- .../ui/issues/ComponentIssueDetails.java | 26 +++++++++++------ .../ide/eclipse/ui/issues/IssuesTab.java | 6 ++-- .../ide/eclipse/ui/issues/IssuesTree.java | 11 ++------ 6 files changed, 40 insertions(+), 40 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java index 1f22881..987a09a 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java @@ -14,9 +14,9 @@ import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.Hyperlink; -import org.jfrog.build.extractor.scan.DependencyTree; -import org.jfrog.build.extractor.scan.GeneralInfo; +import com.jfrog.ide.common.nodes.FileIssueNode; +import com.jfrog.ide.common.nodes.ScaIssueNode; import com.jfrog.ide.eclipse.configuration.XrayGlobalConfiguration; import com.jfrog.ide.eclipse.configuration.XrayServerConfigImpl; @@ -40,7 +40,7 @@ public ComponentDetails(Composite parent, String title) { recreateComponentDetails(); } - public abstract void createDetailsView(DependencyTree node); + public abstract void createDetailsView(FileIssueNode node); public void recreateComponentDetails() { if (isDisposed()) { @@ -85,13 +85,13 @@ public void credentialsSet() { protected void createComponentsPanel() { createLabel(this, title); - scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.V_SCROLL | SWT.FILL); + scrolledComposite = new ScrolledComposite(this, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.FILL); scrolledComposite.setBackground(getBackground()); setGridLayout(scrolledComposite, 1, false); componentDetailsPanel = new Panel(scrolledComposite); componentDetailsPanel.setBackground(scrolledComposite.getBackground()); setGridLayout(componentDetailsPanel, 2, false); - UiUtils.createDisabledTextLabel(componentDetailsPanel, "Component information is not available"); + UiUtils.createDisabledTextLabel(componentDetailsPanel, "Issue information is not available"); scrolledComposite.setContent(componentDetailsPanel); } @@ -100,20 +100,18 @@ protected void createComponentsPanel() { * * @param node - Extract the component information from this node. */ - protected void createCommonInfo(DependencyTree node) { + protected void createCommonInfo(FileIssueNode node) { for (Control control : componentDetailsPanel.getChildren()) { control.dispose(); } - GeneralInfo generalInfo = ObjectUtils.defaultIfNull(node.getGeneralInfo(), new GeneralInfo()); - if (!StringUtils.equalsIgnoreCase("Npm", generalInfo.getPkgType())) { - addSection("Group:", generalInfo.getGroupId()); + addSection("Title:", node.getTitle()); + addSection("Reporter:", node.getReporterType().getScannerName()); + addSection("Severity:", node.getSeverity().getSeverityName()); + if (!(node instanceof ScaIssueNode)) { + addSection("Reason:", node.getReason()); } - - addSection("Artifact:", generalInfo.getArtifactId()); - addSection("Version:", generalInfo.getVersion()); - addSection("Type:", StringUtils.capitalize(generalInfo.getPkgType())); - addSection("Path:", generalInfo.getPath()); - refreshPanel(); + addSection("Full Description", node.getFullDescription()); + addSection("File Path:", node.getFilePath()); } protected void addSection(String name, String content) { 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 a5be9a1..a9d8552 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 @@ -20,6 +20,7 @@ import org.jfrog.build.extractor.scan.DependencyTree; import com.google.common.collect.Lists; +import com.jfrog.ide.common.nodes.FileIssueNode; import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.utils.ProjectsMap; @@ -70,7 +71,7 @@ public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection().isEmpty()) { return; } - DependencyTree selection = (DependencyTree) treeViewer.getStructuredSelection().getFirstElement(); + FileIssueNode selection = (FileIssueNode) treeViewer.getStructuredSelection().getFirstElement(); onClick(selection); } }); @@ -80,7 +81,7 @@ public void setComponentDetails(ComponentDetails componentDetails) { this.componentDetails = componentDetails; } - protected abstract void onClick(DependencyTree selection); + protected abstract void onClick(FileIssueNode selection); private static PatternFilter createFilter() { PatternFilter patternFilter = new PatternFilter(); @@ -114,7 +115,7 @@ public void reset() { public void addScanResults(List results) { scanResults.addAll(results); } - + public void showResultsOnTree() { treeViewer.setInput(scanResults); } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java index d85aa60..cde56cd 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java @@ -14,7 +14,7 @@ public class UiUtils { public static void setGridLayout(Composite composite, int numColumns, boolean makeColumnsEqualWidth) { composite.setLayout(GridLayoutFactory.fillDefaults().numColumns(numColumns).equalWidth(makeColumnsEqualWidth) - .spacing(LayoutConstants.getSpacing().x, 0).create()); + .spacing(LayoutConstants.getSpacing().x, 3).create()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java index 389b5fd..c544a3c 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java @@ -1,9 +1,11 @@ package com.jfrog.ide.eclipse.ui.issues; -import org.apache.commons.lang3.StringUtils; import org.eclipse.swt.widgets.Composite; -import org.jfrog.build.extractor.scan.DependencyTree; -import org.jfrog.build.extractor.scan.Issue; + +import com.jfrog.ide.common.nodes.FileIssueNode; +import com.jfrog.ide.common.nodes.SastIssueNode; +import com.jfrog.ide.common.nodes.ScaIssueNode; +import com.jfrog.ide.common.parse.Applicability; import com.jfrog.ide.eclipse.ui.ComponentDetails; /** @@ -23,15 +25,23 @@ public static ComponentIssueDetails getInstance() { } private ComponentIssueDetails(Composite parent) { - super(parent, "Component Details"); + super(parent, "Issue Details"); } @Override - public void createDetailsView(DependencyTree node) { + public void createDetailsView(FileIssueNode node) { createCommonInfo(node); - Issue topIssue = node.getTopIssue(); - addSection("Top Issue Severity:", StringUtils.capitalize(topIssue.getSeverity().toString())); - addSection("Issues Count:", String.valueOf(node.getIssueCount())); + if (node instanceof ScaIssueNode ) { + ScaIssueNode scaNode = (ScaIssueNode) node; + Applicability applicability = scaNode.getApplicability(); + addSection("Component Name:", scaNode.getComponentName()); + addSection("Component Version:", scaNode.getComponentVersion()); + addSection("Fixed Versions:", scaNode.getFixedVersions()); + addSection("Applicability:", applicability != null ? applicability.getValue() : ""); + } else if (node instanceof SastIssueNode) { + SastIssueNode sastNode = (SastIssueNode) node; + addSection("Rule ID:", sastNode.getRuleId()); + } refreshPanel(); } diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTab.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTab.java index fb89484..a331959 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTab.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTab.java @@ -24,17 +24,15 @@ public IssuesTab(CTabFolder parent) { // Right SashForm verticalDivision = new SashForm(horizontalDivision, SWT.VERTICAL); ComponentDetails componentDetails = ComponentIssueDetails.createComponentIssueDetails(verticalDivision); - ComponentIssueTable componentIssueTable = new ComponentIssueTable(verticalDivision); - registerTreeListeners(componentDetails, componentIssueTable); + registerTreeListeners(componentDetails); horizontalDivision.setWeights(new int[] { 1, 4 }); parent.setSelection(tab); tab.setControl(horizontalDivision); } - private void registerTreeListeners(ComponentDetails componentDetails, ComponentIssueTable componentIssueTable) { + private void registerTreeListeners(ComponentDetails componentDetails) { IssuesTree issuesTree = IssuesTree.getInstance(); issuesTree.setComponentDetails(componentDetails); - issuesTree.setComponentIssueTable(componentIssueTable); } } 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 a8300c4..c8b8b9e 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 @@ -5,7 +5,6 @@ import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; -import org.jfrog.build.extractor.scan.DependencyTree; import com.google.common.collect.Lists; import com.jfrog.ide.common.nodes.FileTreeNode; @@ -17,7 +16,6 @@ public class IssuesTree extends SearchableTree { private static IssuesTree instance; - private ComponentIssueTable componentIssueTable; private TreeViewerColumn issuesCountColumn; public static void createIssuesTree(Composite parent) { @@ -34,23 +32,18 @@ private IssuesTree(Composite parent) { } @Override - protected void onClick(DependencyTree selection) { + protected void onClick(FileIssueNode selection) { componentDetails.createDetailsView(selection); - componentIssueTable.updateIssuesTable(getSelectedNodes()); - } - - public void setComponentIssueTable(ComponentIssueTable componentIssueTable) { - this.componentIssueTable = componentIssueTable; } @Override public void applyFiltersForAllProjects() { + treeViewer.setInput(scanResults); } @Override public void reset() { super.reset(); - componentIssueTable.updateIssuesTable(Lists.newArrayList()); issuesCountColumn.getColumn().setText("Issues"); treeViewer.setInput(new ArrayList()); } From 71aeeaa5b2e14cd63e05737c67a4bc3ac33464e1 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 16:13:09 +0300 Subject: [PATCH 2/5] minor changes after rebase --- .../java/com/jfrog/ide/eclipse/ui/ComponentDetails.java | 2 +- .../java/com/jfrog/ide/eclipse/ui/SearchableTree.java | 8 +++++--- .../java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java index 987a09a..8bc2e8d 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java @@ -110,7 +110,7 @@ protected void createCommonInfo(FileIssueNode node) { if (!(node instanceof ScaIssueNode)) { addSection("Reason:", node.getReason()); } - addSection("Full Description", node.getFullDescription()); + addSection("Full Description:", node.getFullDescription()); addSection("File Path:", node.getFilePath()); } 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 a9d8552..8955eb5 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 @@ -22,7 +22,6 @@ import com.google.common.collect.Lists; import com.jfrog.ide.common.nodes.FileIssueNode; import com.jfrog.ide.common.nodes.FileTreeNode; -import com.jfrog.ide.eclipse.utils.ProjectsMap; /** * Base class for the issues tree. @@ -71,8 +70,11 @@ public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection().isEmpty()) { return; } - FileIssueNode selection = (FileIssueNode) treeViewer.getStructuredSelection().getFirstElement(); - onClick(selection); + Object selectedElement = treeViewer.getStructuredSelection().getFirstElement(); + if (selectedElement instanceof FileIssueNode) { + FileIssueNode issueNode = (FileIssueNode) selectedElement; + onClick(issueNode); + } } }); } 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 c8b8b9e..0a69e01 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 @@ -6,7 +6,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; -import com.google.common.collect.Lists; +import com.jfrog.ide.common.nodes.FileIssueNode; import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.ui.SearchableTree; From b086d504ec8345a76abc9046ec2d27f7dc963c42 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 16:25:19 +0300 Subject: [PATCH 3/5] minor changes --- bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java | 3 ++- .../main/java/com/jfrog/ide/eclipse/ui/issues/IssuesTree.java | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java index cde56cd..bff30a7 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/UiUtils.java @@ -11,10 +11,11 @@ * @author yahavi */ public class UiUtils { + private static final int GRID_VERTICAL_SPACER = 3; public static void setGridLayout(Composite composite, int numColumns, boolean makeColumnsEqualWidth) { composite.setLayout(GridLayoutFactory.fillDefaults().numColumns(numColumns).equalWidth(makeColumnsEqualWidth) - .spacing(LayoutConstants.getSpacing().x, 3).create()); + .spacing(LayoutConstants.getSpacing().x, GRID_VERTICAL_SPACER).create()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); } 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 0a69e01..bcc3405 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 @@ -38,7 +38,6 @@ protected void onClick(FileIssueNode selection) { @Override public void applyFiltersForAllProjects() { - treeViewer.setInput(scanResults); } @Override From 87e221f4c75ebd19de0f17186722dd994fdb2997 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Mon, 7 Apr 2025 19:46:22 +0300 Subject: [PATCH 4/5] added location info for JAS --- .../com/jfrog/ide/eclipse/ui/ComponentDetails.java | 5 ++--- .../ide/eclipse/ui/issues/ComponentIssueDetails.java | 10 +++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java index 8bc2e8d..c321ea6 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java @@ -107,11 +107,10 @@ protected void createCommonInfo(FileIssueNode node) { addSection("Title:", node.getTitle()); addSection("Reporter:", node.getReporterType().getScannerName()); addSection("Severity:", node.getSeverity().getSeverityName()); - if (!(node instanceof ScaIssueNode)) { - addSection("Reason:", node.getReason()); - } addSection("Full Description:", node.getFullDescription()); addSection("File Path:", node.getFilePath()); + addSection("Line Snippet:", node.getLineSnippet()); + } protected void addSection(String name, String content) { diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java index c544a3c..f4778c1 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java @@ -38,9 +38,9 @@ public void createDetailsView(FileIssueNode node) { addSection("Component Version:", scaNode.getComponentVersion()); addSection("Fixed Versions:", scaNode.getFixedVersions()); addSection("Applicability:", applicability != null ? applicability.getValue() : ""); - } else if (node instanceof SastIssueNode) { - SastIssueNode sastNode = (SastIssueNode) node; - addSection("Rule ID:", sastNode.getRuleId()); + } else { + addSection("Location:", "row: " + node.getRowStart() + " col: " + node.getColStart()); + addSection("Reason:", node.getReason()); } refreshPanel(); } @@ -50,4 +50,8 @@ public static void disposeComponentDetails() { instance.dispose(); } } + + private void createScaDetailsView(ScaIssueNode node) { + + } } From 09aec36f2a1537374a5ac6024db8885ec1970658 Mon Sep 17 00:00:00 2001 From: kerenr-jfrog Date: Tue, 8 Apr 2025 09:48:15 +0300 Subject: [PATCH 5/5] final changes --- .../main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java | 2 -- .../jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java | 5 ----- 2 files changed, 7 deletions(-) diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java index c321ea6..2ab3e36 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/ComponentDetails.java @@ -3,7 +3,6 @@ import static com.jfrog.ide.eclipse.ui.UiUtils.createLabel; import static com.jfrog.ide.eclipse.ui.UiUtils.setGridLayout; -import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; @@ -16,7 +15,6 @@ import org.eclipse.ui.forms.widgets.Hyperlink; import com.jfrog.ide.common.nodes.FileIssueNode; -import com.jfrog.ide.common.nodes.ScaIssueNode; import com.jfrog.ide.eclipse.configuration.XrayGlobalConfiguration; import com.jfrog.ide.eclipse.configuration.XrayServerConfigImpl; diff --git a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java index f4778c1..e49d184 100644 --- a/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java +++ b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java @@ -3,7 +3,6 @@ import org.eclipse.swt.widgets.Composite; import com.jfrog.ide.common.nodes.FileIssueNode; -import com.jfrog.ide.common.nodes.SastIssueNode; import com.jfrog.ide.common.nodes.ScaIssueNode; import com.jfrog.ide.common.parse.Applicability; import com.jfrog.ide.eclipse.ui.ComponentDetails; @@ -50,8 +49,4 @@ public static void disposeComponentDetails() { instance.dispose(); } } - - private void createScaDetailsView(ScaIssueNode node) { - - } }