Skip to content

Parameters json editor #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 26, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@
<projectService serviceInterface="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParametersService"
serviceImplementation="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParametersService"/>
<scratch.rootType implementation="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.interactions.GraphDbEditorsConsoleRootType"/>
<scratch.rootType implementation="com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParameterRootType"/>
<applicationConfigurable groupId="tools"
instance="com.neueda.jetbrains.plugin.graphdb.jetbrains.configuration.GraphDatabaseSupportConfiguration"/>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params;

import com.intellij.execution.console.ConsoleRootType;
import org.jetbrains.annotations.NotNull;

public class ParameterRootType extends ConsoleRootType {

@NotNull
public static ParameterRootType getInstance() {
return findByClass(ParameterRootType.class);
}

ParameterRootType() {
super("graphdb-parameters", "Graph Database parameters");
}
}
Original file line number Diff line number Diff line change
@@ -1,39 +1,48 @@
package com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params;

import com.google.common.base.Throwables;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.json.JsonFileType;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.EditorTextField;
import com.intellij.util.messages.MessageBus;
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.GraphConsoleView;
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.event.QueryParametersRetrievalErrorEvent;
import com.neueda.jetbrains.plugin.graphdb.jetbrains.util.FileUtil;

import javax.swing.*;
import java.awt.*;
import java.io.IOException;

import static com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.event.QueryParametersRetrievalErrorEvent.*;

public class ParametersPanel implements ParametersProvider {

private static final FileDocumentManager FILE_DOCUMENT_MANAGER = FileDocumentManager.getInstance();

private EditorTextField editor;
private Editor editor;
private GraphConsoleView graphConsoleView;
private MessageBus messageBus;
private ParametersService service;

public void initialize(GraphConsoleView graphConsoleView, Project project) {
MessageBus messageBus = project.getMessageBus();

editor = getJsonEditorFromScratchFile(project);
setInitialContent(editor.getDocument());
this.graphConsoleView = graphConsoleView;
this.messageBus = project.getMessageBus();
this.service = ServiceManager.getService(project, ParametersService.class);
setupEditor(project);
}

graphConsoleView.getParametersTab().add(editor, BorderLayout.CENTER);
public String getParametersJson() {
return editor.getDocument().getText();
}

ParametersService service = ServiceManager.getService(project, ParametersService.class);
private void initializeUi() {
graphConsoleView.getParametersTab().add(editor.getComponent(), BorderLayout.CENTER);
service.registerParametersProvider(this);

messageBus.connect().subscribe(QueryParametersRetrievalErrorEvent.QUERY_PARAMETERS_RETRIEVAL_ERROR_EVENT_TOPIC,
Expand All @@ -48,28 +57,31 @@ public void initialize(GraphConsoleView graphConsoleView, Project project) {
});
}

private static EditorTextField getJsonEditorFromScratchFile(Project project) {
VirtualFile file;
try {
file = FileUtil.getScratchFile(project, "Neo4jGraphDbConsoleParametersPanel");
} catch (IOException e) {
throw new RuntimeException(e);
}
Document document = FILE_DOCUMENT_MANAGER.getDocument(file);

return new EditorTextField(document, project, new JsonFileType(), false, false);
private void setupEditor(Project project) {
ApplicationManager.getApplication().runWriteAction(() -> {
try {
VirtualFile file = FileUtil.getScratchFile(project, "Neo4jGraphDbConsoleParametersPanel.json");
Document document = FILE_DOCUMENT_MANAGER.getDocument(file);
editor = createEditor(project, document);
editor.setHeaderComponent(new JLabel("Provide query parameters in JSON format here:"));
setInitialContent(document);
initializeUi();
} catch (Throwable e) {
throw Throwables.propagate(e);
}
});
}

private void setInitialContent(Document document) {
if (document.getText().isEmpty()) {
final Runnable setTextRunner = () -> document.setText("// Provide query parameters in JSON format here:");
final Runnable setTextRunner = () -> document.setText("{}");
ApplicationManager.getApplication()
.invokeLater(() -> ApplicationManager.getApplication().runWriteAction(setTextRunner));
}
}

public String getParametersJson() {
return editor.getText();
private static Editor createEditor(Project project, Document document) {
return EditorFactory.getInstance().createEditor(document, project, new JsonFileType(), false);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.neueda.jetbrains.plugin.graphdb.jetbrains.component.datasource.state.DataSourceApi;
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.params.ParameterRootType;
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.datasource.interactions.GraphDbEditorsConsoleRootType;

import java.io.IOException;
Expand All @@ -22,8 +23,8 @@ public static VirtualFile getDataSourceFile(Project project, DataSourceApi dataS

public static VirtualFile getScratchFile(Project project, String fileName) throws IOException {
return ScratchFileService.getInstance().findFile(
GraphDbEditorsConsoleRootType.getInstance(),
fileName + project.getName(),
ParameterRootType.getInstance(),
project.getName() + fileName,
ScratchFileService.Option.create_if_missing
);
}
Expand Down