package org.elixir_lang.errorreport;
import com.intellij.errorreport.bean.ErrorBean;
import com.intellij.ide.BrowserUtil;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.util.Consumer;
import org.elixir_lang.github.issues.create.Request;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.net.URLEncoder;
import static org.elixir_lang.errorreport.Submitter.ISSUES_URL;
class Task extends com.intellij.openapi.progress.Task.Backgroundable {
/*
* CONSTANTS
*/
private static final boolean CAN_BE_CANCELLED = true;
private static final String TITLE = "Opening GitHub Issue";
/*
* Static Methods
*/
private static void create(@NotNull ErrorBean errorBean) throws IOException {
Request request = new Request(errorBean);
BrowserUtil.open(
ISSUES_URL + "/new?" +
"title=" + URLEncoder.encode(request.title, "UTF-8") +
"&" +
"body=" + URLEncoder.encode(request.body, "UTF-8")
);
}
/*
* Fields
*/
@NotNull
private final Consumer<Exception> errorCallback;
@NotNull
private final ErrorBean errorBean;
@NotNull
private final Consumer<Boolean> successCallback;
/*
* Constructors
*/
Task(@Nullable Project project,
@NotNull ErrorBean errorBean,
@NotNull Consumer<Boolean> successCallback,
@NotNull Consumer<Exception> errorCallback) {
super(project, TITLE, CAN_BE_CANCELLED);
this.errorCallback = errorCallback;
this.errorBean = errorBean;
this.successCallback = successCallback;
}
/*
* Instance Methods
*/
@Override
public void run(@NotNull ProgressIndicator indicator) {
indicator.setIndeterminate(true);
try {
create(errorBean);
successCallback.consume(true);
} catch (Exception exception) {
errorCallback.consume(exception);
}
}
}