Skip to content

Commit d8990d1

Browse files
committed
wip: new summary panal
New layout with two browsers $/snyk.scanSummary callback Placeholders for all issues scan tab/delta scan
1 parent a963f9b commit d8990d1

7 files changed

Lines changed: 115 additions & 17 deletions

File tree

plugin/src/main/java/io/snyk/eclipse/plugin/html/StaticPageHtmlProvider.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public static StaticPageHtmlProvider getInstance() {
1818
}
1919
return instance;
2020
}
21-
21+
2222
private String head = """
2323
<head>
2424
<meta charset="UTF-8">
@@ -148,6 +148,31 @@ public String getInitHtml() {
148148
""".formatted(head, base64Image, snykWarningText);
149149
return replaceCssVariables(html);
150150
}
151-
152-
151+
152+
public String getSummaryInitHtml() {
153+
var html = """
154+
<!DOCTYPE html>
155+
<html lang="en">
156+
<body>
157+
<div class="container">
158+
<h3 class="summary-header">SUMMARY</h3>
159+
<button type="button" onclick="window.showAllIssuesTab()">All issues</button>
160+
<button type="button" onclick="window.showDeltaIssuesTab()">Delta issues</button>
161+
<div class="summary-row">
162+
<span class="icon">⚠️</span>
163+
<span class="text">312 issues found in your project</span>
164+
</div>
165+
<div class="summary-row">
166+
<span class="icon">⚡</span>
167+
<span class="text">183 issues are fixable</span>
168+
</div>
169+
170+
</div>
171+
</body>
172+
</html>
173+
"""
174+
.formatted(head);
175+
return replaceCssVariables(html);
176+
}
177+
153178
}

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/BrowserHandler.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55
import java.nio.file.Paths;
66
import java.util.concurrent.CompletableFuture;
77

8-
import org.eclipse.core.commands.ExecutionException;
9-
import org.eclipse.core.commands.NotEnabledException;
10-
import org.eclipse.core.commands.NotHandledException;
118
import org.eclipse.core.commands.common.CommandException;
12-
import org.eclipse.core.commands.common.NotDefinedException;
139
import org.eclipse.jface.viewers.TreeNode;
1410
import org.eclipse.lsp4e.LSPEclipseUtils;
1511
import org.eclipse.lsp4j.Location;

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/ISnykToolView.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ public interface ISnykToolView {
8080
*/
8181
abstract void refreshBrowser(String status);
8282

83+
/**
84+
* Refreshes the SummaryPanel
85+
*/
86+
abstract void refreshSummary(String status);
87+
8388
/**
8489
* Returns the tree root
8590
*

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/SnykToolView.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,27 @@ public class SnykToolView extends ViewPart implements ISnykToolView {
6767
private TreeViewer treeViewer;
6868
private Browser browser;
6969
private BrowserHandler browserHandler;
70+
private Browser summaryBrowser;
71+
private SummaryBrowserHandler summaryBrowserHandler;
7072
private FolderConfigs folderConfigs = FolderConfigs.getInstance();
7173
private TreeNode selectedNode;
7274

7375
@Override
7476
public void createPartControl(Composite parent) {
75-
SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
76-
sashForm.setLayout(new FillLayout());
77+
SashForm horizontalSashForm = new SashForm(parent, SWT.HORIZONTAL);
78+
horizontalSashForm.setLayout(new FillLayout());
79+
80+
// Create vertical SashForm for new Browser and TreeViewer
81+
SashForm verticalSashForm = new SashForm(horizontalSashForm, SWT.VERTICAL);
82+
verticalSashForm.setLayout(new FillLayout());
83+
84+
// Create new Browser (top quarter)
85+
summaryBrowser = new Browser(verticalSashForm, SWT.EDGE);
86+
summaryBrowserHandler = new SummaryBrowserHandler(summaryBrowser);
87+
summaryBrowserHandler.initialize();
7788

7889
// Create TreeViewer
79-
treeViewer = new TreeViewer(sashForm, SWT.BORDER);
90+
treeViewer = new TreeViewer(verticalSashForm, SWT.BORDER);
8091
Tree tree = treeViewer.getTree();
8192
tree.setHeaderVisible(false);
8293
tree.setLinesVisible(false);
@@ -93,13 +104,15 @@ public void createPartControl(Composite parent) {
93104

94105
registerTreeContextMenu(treeViewer.getControl());
95106

107+
verticalSashForm.setWeights(new int[] { 1, 3 });
108+
96109
// Create Browser
97110
// SWT.EDGE will be ignored if OS not windows and will be set to SWT.NONE.
98-
browser = new Browser(sashForm, SWT.EDGE);
111+
browser = new Browser(horizontalSashForm, SWT.EDGE);
99112
browserHandler = new BrowserHandler(browser);
100113
browserHandler.initialize();
101114
// Set sash weights
102-
sashForm.setWeights(new int[] { 1, 2 });
115+
horizontalSashForm.setWeights(new int[] { 1, 1 });
103116

104117
// Add selection listener to the tree
105118
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@@ -133,7 +146,7 @@ public void selectionChanged(SelectionChangedEvent event) {
133146

134147
if (Preferences.isDeltaEnabled())
135148
this.enableDelta();
136-
149+
137150
// initialize the filters
138151
TreeFilterManager.getInstance();
139152
}
@@ -164,7 +177,7 @@ public void run() {
164177
protected IStatus run(IProgressMonitor monitor) {
165178
try {
166179
var result = CommandHandler.getInstance().ignoreIssue(issue).get(10, TimeUnit.SECONDS);
167-
outputCommandResult(result);
180+
outputCommandResult(result);
168181
itn.setText("[ IGNORED ] " + itn.getText());
169182
Display.getDefault().asyncExec(() -> {
170183
treeViewer.refresh(itn, true);
@@ -318,6 +331,11 @@ public void refreshBrowser(String status) {
318331
});
319332
};
320333

334+
@Override
335+
public void refreshSummary(String summary) {
336+
this.summaryBrowserHandler.setBrowserText(summary);
337+
}
338+
321339
@Override
322340
public void resetNode(BaseTreeNode node) {
323341
if (node != null)
@@ -446,8 +464,9 @@ protected void outputCommandResult(Object result) {
446464
SnykExtendedLanguageClient.getInstance().showMessage(messageParams);
447465
} else {
448466
SnykLogger.logError(new RuntimeException(stdOut));
467+
449468
}
450469
}
451470
}
452471

453-
}
472+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.snyk.eclipse.plugin.views.snyktoolview;
2+
3+
import org.eclipse.swt.browser.Browser;
4+
import org.eclipse.swt.browser.BrowserFunction;
5+
6+
import io.snyk.eclipse.plugin.html.StaticPageHtmlProvider;
7+
8+
public class SummaryBrowserHandler {
9+
private Browser browser;
10+
11+
public SummaryBrowserHandler(Browser browser) {
12+
this.browser = browser;
13+
}
14+
15+
public void initialize() {
16+
17+
new BrowserFunction(browser, "showAllIssuesTab") {
18+
@Override
19+
public Object function(Object[] arguments) {
20+
// TODO show all scan results
21+
browser.execute("document.body.innerHTML += '<p>All issues tab clicked</p>';");
22+
return null;
23+
}
24+
};
25+
26+
new BrowserFunction(browser, "showDeltaIssuesTab") {
27+
@Override
28+
public Object function(Object[] arguments) {
29+
// TODO launch delta scan or show delta scan results
30+
browser.execute("document.body.innerHTML += '<p>Delta issues tab clicked</p>';");
31+
return null;
32+
}
33+
};
34+
35+
setDefaultBrowserText();
36+
}
37+
38+
public void setDefaultBrowserText() {
39+
browser.setText(StaticPageHtmlProvider.getInstance().getSummaryInitHtml());
40+
}
41+
42+
public void setBrowserText(String summary) {
43+
browser.setText(summary);
44+
}
45+
46+
}

plugin/src/main/java/io/snyk/languageserver/LsConstants.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ public interface LsConstants {
1212
String COMMAND_GET_FEATURE_FLAG_STATUS = "snyk.getFeatureFlagStatus";
1313
String COMMAND_CODE_FIX_DIFFS = "snyk.code.fixDiffs";
1414
String COMMAND_CODE_SUBMIT_FIX_FEEDBACK = "snyk.code.submitFixFeedback";
15+
String COMMAND_SNYK_CLI = "snyk.executeCLI";
1516
String SNYK_HAS_AUTHENTICATED = "$/snyk.hasAuthenticated";
1617
String SNYK_IS_AVAILABLE_CLI = "$/snyk.isAvailableCli";
1718
String SNYK_ADD_TRUSTED_FOLDERS = "$/snyk.addTrustedFolders";
1819
String SNYK_SCAN = "$/snyk.scan";
1920
String SNYK_PUBLISH_DIAGNOSTICS_316 = "$/snyk.publishDiagnostics316";
2021
String SNYK_FOLDER_CONFIG = "$/snyk.folderConfigs";
21-
String COMMAND_SNYK_CLI = "snyk.executeCLI";
22+
String SNYK_SCAN_SUMMARY = "$/snyk.scanSummary";
2223
}

plugin/src/main/java/io/snyk/languageserver/protocolextension/SnykExtendedLanguageClient.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public LanguageServer getConnectedLanguageServer() {
132132
}
133133
return super.getLanguageServer();
134134
}
135-
135+
136136
public void updateConfiguration() {
137137
this.configurationUpdater.configurationChanged();
138138
if (this.toolView != null) {
@@ -381,6 +381,12 @@ public void snykScan(SnykScanParam param) {
381381
this.toolView.refreshBrowser(param.getStatus());
382382
}
383383

384+
// TODO what data is returned in the SNYK_SCAN_SUMMARY?
385+
@JsonNotification(value = LsConstants.SNYK_SCAN_SUMMARY)
386+
public void updateSummaryPanel(String summary) {
387+
this.toolView.refreshSummary(summary);
388+
}
389+
384390
@JsonNotification(value = LsConstants.SNYK_FOLDER_CONFIG)
385391
public void folderConfig(FolderConfigsParam folderConfigParam) {
386392
List<FolderConfig> folderConfigs = folderConfigParam != null ? folderConfigParam.getFolderConfigs() : List.of();

0 commit comments

Comments
 (0)