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..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; @@ -14,9 +13,8 @@ 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.eclipse.configuration.XrayGlobalConfiguration; import com.jfrog.ide.eclipse.configuration.XrayServerConfigImpl; @@ -40,7 +38,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 +83,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 +98,17 @@ 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()); + addSection("Full Description:", node.getFullDescription()); + addSection("File Path:", node.getFilePath()); + addSection("Line Snippet:", node.getLineSnippet()); - addSection("Artifact:", generalInfo.getArtifactId()); - addSection("Version:", generalInfo.getVersion()); - addSection("Type:", StringUtils.capitalize(generalInfo.getPkgType())); - addSection("Path:", generalInfo.getPath()); - refreshPanel(); } 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..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 @@ -20,8 +20,8 @@ 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; /** * Base class for the issues tree. @@ -70,8 +70,11 @@ public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection().isEmpty()) { return; } - DependencyTree selection = (DependencyTree) treeViewer.getStructuredSelection().getFirstElement(); - onClick(selection); + Object selectedElement = treeViewer.getStructuredSelection().getFirstElement(); + if (selectedElement instanceof FileIssueNode) { + FileIssueNode issueNode = (FileIssueNode) selectedElement; + onClick(issueNode); + } } }); } @@ -80,7 +83,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 +117,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..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, 0).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/ComponentIssueDetails.java b/bundle/src/main/java/com/jfrog/ide/eclipse/ui/issues/ComponentIssueDetails.java index 389b5fd..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 @@ -1,9 +1,10 @@ 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.ScaIssueNode; +import com.jfrog.ide.common.parse.Applicability; import com.jfrog.ide.eclipse.ui.ComponentDetails; /** @@ -23,15 +24,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 { + addSection("Location:", "row: " + node.getRowStart() + " col: " + node.getColStart()); + addSection("Reason:", node.getReason()); + } 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..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 @@ -5,9 +5,8 @@ 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.FileIssueNode; import com.jfrog.ide.common.nodes.FileTreeNode; import com.jfrog.ide.eclipse.ui.SearchableTree; @@ -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,13 +32,8 @@ 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 @@ -50,7 +43,6 @@ public void applyFiltersForAllProjects() { @Override public void reset() { super.reset(); - componentIssueTable.updateIssuesTable(Lists.newArrayList()); issuesCountColumn.getColumn().setText("Issues"); treeViewer.setInput(new ArrayList()); }