Skip to content

Commit 57efd72

Browse files
committed
Context menus added
1 parent ca7860d commit 57efd72

File tree

9 files changed

+143
-13
lines changed

9 files changed

+143
-13
lines changed

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

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

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

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.neueda.jetbrains.plugin.graphdb.jetbrains.util.Notifier;
2626
import com.neueda.jetbrains.plugin.graphdb.platform.GraphConstants;
2727
import com.neueda.jetbrains.plugin.graphdb.platform.GraphLanguages;
28+
import org.jetbrains.annotations.Nullable;
2829

2930
import java.awt.*;
3031
import java.awt.event.KeyEvent;
@@ -67,17 +68,7 @@ public void actionPerformed(AnActionEvent e) {
6768

6869
Caret caret = editor.getCaretModel().getPrimaryCaret();
6970

70-
String content = null;
71-
if (caret.hasSelection()) {
72-
content = caret.getSelectedText();
73-
} else if (psiFile != null) {
74-
if (psiFile.getLanguage().getID().equals(GraphLanguages.CYPHER)) {
75-
String cypherStatement = getCypherStatement(psiFile, caret);
76-
if (cypherStatement != null) {
77-
content = cypherStatement;
78-
}
79-
}
80-
}
71+
String content = getContent(psiFile, caret);
8172

8273
if (content == null) {
8374
Notifier.error("Query execution error", "No query selected");
@@ -124,6 +115,22 @@ public void actionPerformed(AnActionEvent e) {
124115
}
125116
}
126117

118+
@Nullable
119+
protected String getContent(PsiFile psiFile, Caret caret) {
120+
String content = null;
121+
if (caret.hasSelection()) {
122+
content = caret.getSelectedText();
123+
} else if (psiFile != null) {
124+
if (psiFile.getLanguage().getID().equals(GraphLanguages.CYPHER)) {
125+
String cypherStatement = getCypherStatement(psiFile, caret);
126+
if (cypherStatement != null) {
127+
content = cypherStatement;
128+
}
129+
}
130+
}
131+
return content;
132+
}
133+
127134
public void executeQuery(MessageBus messageBus, DataSourceApi dataSource, ExecuteQueryPayload payload) {
128135
ExecuteQueryEvent executeQueryEvent = messageBus.syncPublisher(ExecuteQueryEvent.EXECUTE_QUERY_TOPIC);
129136
executeQueryEvent.executeQuery(dataSource, payload);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.actions.execute;
2+
3+
import com.intellij.openapi.editor.Caret;
4+
import com.intellij.psi.PsiFile;
5+
import org.jetbrains.annotations.Nullable;
6+
7+
public class ExplainQueryAction extends ExecuteQueryAction {
8+
@Nullable
9+
@Override
10+
protected String getContent(PsiFile psiFile, Caret caret) {
11+
return "EXPLAIN " + super.getContent(psiFile, caret);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.actions.execute;
2+
3+
import com.intellij.openapi.editor.Caret;
4+
import com.intellij.psi.PsiFile;
5+
import org.jetbrains.annotations.Nullable;
6+
7+
public class ProfileQueryAction extends ExecuteQueryAction {
8+
@Nullable
9+
@Override
10+
protected String getContent(PsiFile psiFile, Caret caret) {
11+
return "PROFILE " + super.getContent(psiFile, caret);
12+
}
13+
}

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)