Skip to content

Commit e728938

Browse files
gdaleckaFylmTM
authored andcommitted
parameters panel for query parameters in json format (#22)
* parameters panel for query parameters in json format * output used query paramters in Log panel * add comment as initial content of parameters tab
1 parent b4d9f11 commit e728938

File tree

17 files changed

+333
-12
lines changed

17 files changed

+333
-12
lines changed

database/api/src/main/java/com/neueda/jetbrains/plugin/graphdb/database/api/GraphDatabaseApi.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
import com.neueda.jetbrains.plugin.graphdb.database.api.query.GraphQueryResult;
44

5+
import java.util.Map;
6+
57
public interface GraphDatabaseApi {
68

79
GraphQueryResult execute(String query);
10+
11+
GraphQueryResult execute(String query, Map<String, Object> statementParameters);
812
}

database/neo4j/src/main/java/com/neueda/jetbrains/plugin/graphdb/database/neo4j/bolt/Neo4jBoltDatabase.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33
import com.neueda.jetbrains.plugin.graphdb.database.api.GraphDatabaseApi;
44
import com.neueda.jetbrains.plugin.graphdb.database.api.query.GraphQueryResult;
55
import com.neueda.jetbrains.plugin.graphdb.database.neo4j.bolt.query.Neo4jBoltQueryResult;
6+
import org.neo4j.driver.v1.AuthToken;
7+
import org.neo4j.driver.v1.AuthTokens;
8+
import org.neo4j.driver.v1.Driver;
9+
import org.neo4j.driver.v1.GraphDatabase;
10+
import org.neo4j.driver.v1.Record;
11+
import org.neo4j.driver.v1.Session;
12+
import org.neo4j.driver.v1.StatementResult;
613

7-
import org.neo4j.driver.v1.*;
8-
14+
import java.util.Collections;
915
import java.util.Map;
1016

1117
/**
@@ -35,13 +41,18 @@ public Neo4jBoltDatabase(Neo4jBoltConfiguration configuration) {
3541

3642
@Override
3743
public GraphQueryResult execute(String query) {
44+
return execute(query, Collections.emptyMap());
45+
}
46+
47+
@Override
48+
public GraphQueryResult execute(String query, Map<String, Object> statementParameters) {
3849
try (Driver driver = GraphDatabase.driver(url, auth);
39-
Session session = driver.session()) {
50+
Session session = driver.session()) {
4051

4152
Neo4jBoltBuffer buffer = new Neo4jBoltBuffer();
4253

4354
long startTime = System.currentTimeMillis();
44-
StatementResult statementResult = session.run(query);
55+
StatementResult statementResult = session.run(query, statementParameters);
4556
buffer.addColumns(statementResult.keys());
4657

4758
for (Record record : statementResult.list()) {

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ versionMockito=1.10.19
1010
versionNeo4jJavaBoltDriver=1.1.0
1111
versionPrefuse=1.0.0
1212
versionGoogleAnalytics=1.1.2
13+
versionJacksonMapper=2.8.6

graph-database-support-plugin/src/main/resources/META-INF/plugin.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@
125125
serviceImplementation="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.GraphConsoleView"/>
126126
<projectService serviceInterface="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.DataSourcesView"
127127
serviceImplementation="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.DataSourcesView"/>
128+
<projectService serviceInterface="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParametersService"
129+
serviceImplementation="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParametersService"/>
128130
<scratch.rootType implementation="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.interactions.GraphDbEditorsConsoleRootType"/>
129131
<applicationConfigurable groupId="tools"
130132
instance="com.neueda.jetbrains.plugin.graphdb.jetbrains.configuration.GraphDatabaseSupportConfiguration"/>

ui/jetbrains/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ dependencies {
1717
exclude group: "org.slf4j", module: "jcl-over-slf4j"
1818
}
1919

20+
compile("com.fasterxml.jackson.core:jackson-core:$versionJacksonMapper")
21+
compile("com.fasterxml.jackson.core:jackson-databind:$versionJacksonMapper")
22+
2023
testCompile "junit:junit:$versionJunit"
2124
testCompile "org.assertj:assertj-core:$versionAssertj"
2225
}

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/actions/execute/ExecuteQueryAction.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.intellij.openapi.actionSystem.AnAction;
55
import com.intellij.openapi.actionSystem.AnActionEvent;
66
import com.intellij.openapi.actionSystem.CommonDataKeys;
7+
import com.intellij.openapi.components.ServiceManager;
78
import com.intellij.openapi.editor.Caret;
89
import com.intellij.openapi.editor.Editor;
910
import com.intellij.openapi.project.Project;
@@ -18,13 +19,16 @@
1819
import com.neueda.jetbrains.plugin.graphdb.jetbrains.component.datasource.state.DataSourceApi;
1920
import com.neueda.jetbrains.plugin.graphdb.jetbrains.psi.PsiTraversalUtilities;
2021
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.ConsoleToolWindow;
22+
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.event.QueryParametersRetrievalErrorEvent;
23+
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParametersService;
2124
import com.neueda.jetbrains.plugin.graphdb.jetbrains.util.NameUtil;
2225
import com.neueda.jetbrains.plugin.graphdb.jetbrains.util.Notifier;
2326
import com.neueda.jetbrains.plugin.graphdb.platform.GraphConstants;
2427
import com.neueda.jetbrains.plugin.graphdb.platform.GraphLanguages;
2528

26-
import java.awt.Component;
29+
import java.awt.*;
2730
import java.awt.event.KeyEvent;
31+
import java.util.Map;
2832
import java.util.Optional;
2933

3034
public class ExecuteQueryAction extends AnAction {
@@ -80,7 +84,16 @@ public void actionPerformed(AnActionEvent e) {
8084
return;
8185
}
8286

83-
ExecuteQueryPayload executeQueryPayload = new ExecuteQueryPayload(content, editor);
87+
Map<String, Object> parameters;
88+
try {
89+
ParametersService service = ServiceManager.getService(project, ParametersService.class);
90+
parameters = service.getParameters();
91+
} catch (Exception exception) {
92+
sendParametersRetrievalErrorEvent(messageBus, exception, editor);
93+
return;
94+
}
95+
96+
ExecuteQueryPayload executeQueryPayload = new ExecuteQueryPayload(content, parameters, editor);
8497
ConsoleToolWindow.ensureOpen(project);
8598

8699
if (virtualFile != null) {
@@ -125,4 +138,10 @@ private String getCypherStatement(PsiFile psiFile, Caret caret) {
125138
return element.getText();
126139
}
127140
}
141+
142+
private void sendParametersRetrievalErrorEvent(MessageBus messageBus, Exception exception, Editor editor) {
143+
QueryParametersRetrievalErrorEvent event = messageBus
144+
.syncPublisher(QueryParametersRetrievalErrorEvent.QUERY_PARAMETERS_RETRIEVAL_ERROR_EVENT_TOPIC);
145+
event.handleError(exception, editor);
146+
}
128147
}

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/actions/execute/ExecuteQueryPayload.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,27 @@
33
import com.intellij.openapi.editor.Editor;
44
import org.jetbrains.annotations.NotNull;
55

6+
import java.util.Collections;
7+
import java.util.Map;
68
import java.util.Optional;
79

810
public class ExecuteQueryPayload {
911

1012
private final String content;
13+
14+
private final Map<String, Object> parameters;
15+
1116
private final Editor editor;
1217

1318
public ExecuteQueryPayload(String content) {
1419
this.content = content;
1520
this.editor = null;
21+
this.parameters = Collections.emptyMap();
1622
}
1723

18-
public ExecuteQueryPayload(String content, Editor editor) {
24+
public ExecuteQueryPayload(String content, Map<String, Object> parameters, Editor editor) {
1925
this.content = content;
26+
this.parameters = parameters;
2027
this.editor = editor;
2128
}
2229

@@ -25,6 +32,10 @@ public String getContent() {
2532
return content;
2633
}
2734

35+
public Map<String, Object> getParameters() {
36+
return parameters;
37+
}
38+
2839
@NotNull
2940
public Optional<Editor> getEditor() {
3041
return Optional.ofNullable(editor);

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/database/QueryExecutionService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ private synchronized void executeInBackground(DataSourceApi dataSource, ExecuteQ
5555
runningQuery = ApplicationManager.getApplication().executeOnPooledThread(() -> {
5656
try {
5757
GraphDatabaseApi database = databaseManager.getDatabaseFor(dataSource);
58-
GraphQueryResult result = database.execute(payload.getContent());
58+
GraphQueryResult result = database.execute(payload.getContent(), payload.getParameters());
5959

6060
ApplicationManager.getApplication().invokeLater(() -> {
6161
event.resultReceived(payload, result);

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/ui/console/GraphConsoleView.form

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,14 @@
9292
</component>
9393
</children>
9494
</scrollpane>
95+
<grid id="d329c" binding="parametersTab" layout-manager="BorderLayout" hgap="0" vgap="0">
96+
<constraints>
97+
<tabbedpane title="Parameters"/>
98+
</constraints>
99+
<properties/>
100+
<border type="none"/>
101+
<children/>
102+
</grid>
95103
</children>
96104
</tabbedpane>
97105
<component id="b903c" class="com.intellij.ui.tabs.impl.JBTabsImpl" binding="consoleTabs" custom-create="true">

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/ui/console/GraphConsoleView.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,14 @@
2525
import com.neueda.jetbrains.plugin.graphdb.jetbrains.component.analytics.Analytics;
2626
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.graph.GraphPanel;
2727
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.log.LogPanel;
28+
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParametersPanel;
2829
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.status.ExecutionStatusBarWidget;
2930
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.table.TablePanel;
3031
import com.neueda.jetbrains.plugin.graphdb.platform.GraphConstants;
3132
import com.neueda.jetbrains.plugin.graphdb.visualization.services.LookAndFeelService;
3233

33-
import javax.swing.JPanel;
34-
import javax.swing.SwingConstants;
35-
import java.awt.BorderLayout;
36-
import java.awt.GridLayout;
34+
import javax.swing.*;
35+
import java.awt.*;
3736

3837
public class GraphConsoleView implements Disposable {
3938

@@ -56,6 +55,7 @@ public class GraphConsoleView implements Disposable {
5655
private JPanel entityDetailsScrollContent;
5756
private JPanel logTab;
5857
private JPanel graphTab;
58+
private JPanel parametersTab;
5959
private JBTabbedPane defaultTabContainer;
6060
private JBSplitter graphSplitter;
6161

@@ -64,13 +64,15 @@ public class GraphConsoleView implements Disposable {
6464
private TablePanel tablePanel;
6565
private GraphPanel graphPanel;
6666
private LogPanel logPanel;
67+
private ParametersPanel parametersPanel;
6768

6869
public GraphConsoleView() {
6970
initialized = false;
7071

7172
tablePanel = new TablePanel();
7273
graphPanel = new GraphPanel();
7374
logPanel = new LogPanel();
75+
parametersPanel = new ParametersPanel();
7476
lookAndFeelService = ServiceManager.getService(LookAndFeelService.class);
7577
}
7678

@@ -95,6 +97,8 @@ public void initToolWindow(Project project, ToolWindow toolWindow) {
9597
.setText("Graph"));
9698
consoleTabs.addTab(new TabInfo(tableScrollPane)
9799
.setText("Table"));
100+
consoleTabs.addTab(new TabInfo(parametersTab)
101+
.setText("Parameters"));
98102
consoleTabs.setSelectionChangeHandler((info, requestFocus, doChangeSelection) -> {
99103
Analytics.event("console", "openTab[" + info.getText() + "]");
100104
ActionCallback callback = doChangeSelection.run();
@@ -126,12 +130,14 @@ private void updateLookAndFeel() {
126130
entityDetailsScrollPane.setBorder(IdeBorderFactory.createEmptyBorder());
127131
logTab.setBorder(IdeBorderFactory.createEmptyBorder());
128132
graphTab.setBorder(IdeBorderFactory.createEmptyBorder());
133+
parametersTab.setBorder(IdeBorderFactory.createEmptyBorder());
129134
}
130135

131136
private void initializeUiComponents(Project project) {
132137
graphPanel.initialize(this, project);
133138
tablePanel.initialize(this, project);
134139
logPanel.initialize(this, project);
140+
parametersPanel.initialize(this, project);
135141
}
136142

137143
private void initializeWidgets(Project project) {
@@ -168,6 +174,10 @@ public JPanel getLogTab() {
168174
return logTab;
169175
}
170176

177+
public JPanel getParametersTab() {
178+
return parametersTab;
179+
}
180+
171181
@Override
172182
public void dispose() {
173183
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.event;
2+
3+
import com.intellij.openapi.editor.Editor;
4+
import com.intellij.util.messages.Topic;
5+
6+
public interface QueryParametersRetrievalErrorEvent {
7+
8+
Topic<QueryParametersRetrievalErrorEvent> QUERY_PARAMETERS_RETRIEVAL_ERROR_EVENT_TOPIC =
9+
Topic.create("GraphDatabaseConsole.QueryParametersRetrievalErrorEventTopic", QueryParametersRetrievalErrorEvent.class);
10+
11+
String PARAMS_ERROR_COMMON_MSG = "Failed to retrieve query parameters";
12+
void handleError(Exception exception, Editor editor);
13+
14+
}

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/ui/console/log/LogPanel.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@
1212
import com.neueda.jetbrains.plugin.graphdb.jetbrains.component.datasource.state.DataSourceApi;
1313
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.GraphConsoleView;
1414
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.event.QueryExecutionProcessEvent;
15+
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.event.QueryParametersRetrievalErrorEvent;
1516
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.metadata.MetadataRetrieveEvent;
1617

1718
import java.awt.*;
19+
import java.util.Map;
20+
21+
import static com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.event.QueryParametersRetrievalErrorEvent.*;
1822

1923
public class LogPanel implements Disposable {
2024

@@ -35,6 +39,10 @@ public void executionStarted(ExecuteQueryPayload payload) {
3539
info("Executing query: ");
3640
userInput(payload.getContent());
3741
newLine();
42+
if (!payload.getParameters().isEmpty()) {
43+
info("With parameters: ");
44+
printParametersMap(payload.getParameters());
45+
}
3846
}
3947

4048
@Override
@@ -80,12 +88,26 @@ public void metadataRefreshFailed(DataSourceApi nodeDataSource, Exception except
8088
newLine();
8189
}
8290
});
91+
92+
messageBus.connect().subscribe(QueryParametersRetrievalErrorEvent.QUERY_PARAMETERS_RETRIEVAL_ERROR_EVENT_TOPIC,
93+
(exception, editor) -> {
94+
error(PARAMS_ERROR_COMMON_MSG);
95+
printException(exception);
96+
});
8397
}
8498

8599
public void userInput(String message) {
86100
log.print(message, ConsoleViewContentType.USER_INPUT);
87101
}
88102

103+
public void printParametersMap(Map<String, Object> parameters) {
104+
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
105+
String message = String.format("%s: %s", entry.getKey(), entry.getValue());
106+
log.print(message, ConsoleViewContentType.USER_INPUT);
107+
newLine();
108+
}
109+
}
110+
89111
public void info(String message) {
90112
log.print(message, ConsoleViewContentType.NORMAL_OUTPUT);
91113
}

0 commit comments

Comments
 (0)