Skip to content

Commit c5359d9

Browse files
VoragoFylmTM
authored andcommitted
Context menus added (#33)
* Context menus added * comments fixed
1 parent 82749e6 commit c5359d9

File tree

9 files changed

+125
-9
lines changed

9 files changed

+125
-9
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,18 @@
173173
<keyboard-shortcut first-keystroke="ctrl ENTER"
174174
keymap="$default"/>
175175
</action>
176+
<action id="GraphDatabaseActionGroup.ExplainQuery"
177+
class="com.neueda.jetbrains.plugin.graphdb.jetbrains.actions.execute.ExplainQueryAction"
178+
text="Explain query"
179+
icon="/general/run.png"
180+
description="Explain query">
181+
</action>
182+
<action id="GraphDatabaseActionGroup.ProfileQuery"
183+
class="com.neueda.jetbrains.plugin.graphdb.jetbrains.actions.execute.ProfileQueryAction"
184+
text="Profile query"
185+
icon="/general/run.png"
186+
description="Profile query">
187+
</action>
176188
<add-to-group group-id="EditorPopupMenu"/>
177189
</group>
178190

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,15 @@ public void actionPerformed(AnActionEvent e) {
6868

6969
Caret caret = editor.getCaretModel().getPrimaryCaret();
7070

71-
String content = null;
72-
PsiElement cypherStatement = null;
71+
String query = null;
7372
Map<String, Object> parameters = Collections.emptyMap();
7473
if (caret.hasSelection()) {
75-
content = caret.getSelectedText();
74+
query = caret.getSelectedText();
7675
} else if (psiFile != null) {
7776
if (psiFile.getLanguage().getID().equals(GraphLanguages.CYPHER)) {
78-
cypherStatement = getCypherStatement(psiFile, caret);
77+
PsiElement cypherStatement = getCypherStatement(psiFile, caret);
7978
if (cypherStatement != null) {
80-
content = cypherStatement.getText();
79+
query = cypherStatement.getText();
8180
try { // support parameters for PsiElement only
8281
ParametersService service = ServiceManager.getService(project, ParametersService.class);
8382
parameters = service.getParameters(cypherStatement);
@@ -91,12 +90,14 @@ public void actionPerformed(AnActionEvent e) {
9190

9291
Analytics.event("query-content", caret.hasSelection() ? "contentFromSelect" : "contentFromCaret");
9392

94-
if (content == null) {
93+
if (query == null) {
9594
Notifier.error("Query execution error", "No query selected");
9695
return;
9796
}
9897

99-
ExecuteQueryPayload executeQueryPayload = new ExecuteQueryPayload(content, parameters, editor);
98+
query = decorateQuery(query);
99+
100+
ExecuteQueryPayload executeQueryPayload = new ExecuteQueryPayload(query, parameters, editor);
100101
ConsoleToolWindow.ensureOpen(project);
101102

102103
if (virtualFile != null) {
@@ -132,6 +133,10 @@ public void executeQuery(MessageBus messageBus, DataSourceApi dataSource, Execut
132133
executeQueryEvent.executeQuery(dataSource, payload);
133134
}
134135

136+
protected String decorateQuery(String query) {
137+
return query;
138+
}
139+
135140
private PsiElement getCypherStatement(PsiFile psiFile, Caret caret) {
136141
return PsiTraversalUtilities.Cypher.getCypherStatementAtOffset(psiFile, caret.getOffset());
137142
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.actions.execute;
2+
3+
public class ExplainQueryAction extends ExecuteQueryAction {
4+
5+
@Override
6+
protected String decorateQuery(String query) {
7+
return "EXPLAIN " + super.decorateQuery(query);
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.actions.execute;
2+
3+
public class ProfileQueryAction extends ExecuteQueryAction {
4+
5+
@Override
6+
protected String decorateQuery(String query) {
7+
return "PROFILE " + super.decorateQuery(query);
8+
}
9+
}

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/ui/datasource/actions/DataSourceActionGroup.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ public DataSourceActionGroup(DataSourceApi dataSourceApi) {
1818
@NotNull
1919
@Override
2020
public AnAction[] getChildren(@Nullable AnActionEvent e) {
21-
return new AnAction[]{new DataSourceAction("Open editor", "", null, dataSourceApi)};
21+
return new AnAction[]{
22+
new DataSourceAction("Open editor", "", null, dataSourceApi),
23+
new DataSourceOpenBrowserAction("Open in browser", "", null, dataSourceApi)
24+
};
2225
}
2326
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.actions;
2+
3+
import com.intellij.openapi.actionSystem.AnAction;
4+
import com.intellij.openapi.actionSystem.AnActionEvent;
5+
import com.neueda.jetbrains.plugin.graphdb.database.neo4j.bolt.Neo4jBoltConfiguration;
6+
import com.neueda.jetbrains.plugin.graphdb.jetbrains.component.datasource.state.DataSourceApi;
7+
8+
import javax.swing.*;
9+
import java.awt.*;
10+
import java.io.IOException;
11+
import java.net.URI;
12+
import java.net.URISyntaxException;
13+
14+
public class DataSourceOpenBrowserAction extends AnAction {
15+
16+
private DataSourceApi dataSource;
17+
18+
DataSourceOpenBrowserAction(String title, String description, Icon icon, DataSourceApi dataSource) {
19+
super(title, description, icon);
20+
this.dataSource = dataSource;
21+
}
22+
23+
@Override
24+
public void actionPerformed(AnActionEvent e) {
25+
try {
26+
String host = dataSource.getConfiguration().get(Neo4jBoltConfiguration.HOST);
27+
openWebpage(new URI("http://" + host + ":7474"));
28+
} catch (IOException | URISyntaxException ex) {
29+
ex.printStackTrace();
30+
}
31+
}
32+
33+
private void openWebpage(URI uri) throws IOException {
34+
Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
35+
if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
36+
desktop.browse(uri);
37+
}
38+
}
39+
40+
}

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/ui/datasource/metadata/actions/MetadataActionGroup.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ public AnAction[] getChildren(@Nullable AnActionEvent e) {
2828
if (type == Neo4jTreeNodeType.RELATIONSHIP) {
2929
return new AnAction[]{new MetadataRelationshipAction(data, dataSourceUuid, "Query this relationship", "", NEO4J)};
3030
} else if (type == Neo4jTreeNodeType.LABEL) {
31-
return new AnAction[]{new MetadataLabelAction(data, dataSourceUuid, "Query this label", "", NEO4J)};
31+
return new AnAction[]{
32+
new MetadataLabelAction(data, dataSourceUuid, "Nodes with this label", "", NEO4J),
33+
new MetadataLabelFromAction(data, dataSourceUuid, "Outgoing relationships", "", NEO4J),
34+
new MetadataLabelToAction(data, dataSourceUuid, "Incoming relationships", "", NEO4J)
35+
};
3236
} else if (type == Neo4jTreeNodeType.PROPERTY_KEY) {
3337
return new AnAction[]{new MetadataPropertyKeyAction(data, dataSourceUuid, "Query this property", "", NEO4J)};
3438
} else {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.metadata.actions;
2+
3+
import javax.swing.*;
4+
5+
public class MetadataLabelFromAction extends MetadataAction {
6+
7+
private static final String QUERY = "MATCH (n:%s)-[r]->() RETURN type(r), r LIMIT 25";
8+
9+
MetadataLabelFromAction(String data, String dataSourceUuid, String title, String description, Icon icon) {
10+
super(data, dataSourceUuid, title, description, icon);
11+
}
12+
13+
@Override
14+
protected String getQuery(String data) {
15+
return String.format(QUERY, data);
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.metadata.actions;
2+
3+
import javax.swing.*;
4+
5+
public class MetadataLabelToAction extends MetadataAction {
6+
7+
private static final String QUERY = "MATCH (n:%s)<-[r]-() RETURN type(r), r LIMIT 25";
8+
9+
MetadataLabelToAction(String data, String dataSourceUuid, String title, String description, Icon icon) {
10+
super(data, dataSourceUuid, title, description, icon);
11+
}
12+
13+
@Override
14+
protected String getQuery(String data) {
15+
return String.format(QUERY, data);
16+
}
17+
}

0 commit comments

Comments
 (0)