}
}
+ public static void setIssueState(@NotNull GithubConnection connection,
+ @NotNull String user,
+ @NotNull String repo,
+ @NotNull String id,
+ boolean open)
+ throws IOException {
+ try {
+ String path = "/repos/" + user + "/" + repo + "/issues/" + id;
+
+ GithubChangeIssueStateRequest request = new GithubChangeIssueStateRequest(open ? "open" : "closed");
+
+ JsonElement result = connection.patchRequest(path, gson.toJson(request), ACCEPT_V3_JSON);
+
+ createDataFromRaw(fromJson(result, GithubIssueRaw.class), GithubIssue.class);
+ }
+ catch (GithubConfusingException e) {
+ e.setDetails("Can't set issue state: " + user + "/" + repo + " - " + id + "@" + (open ? "open" : "closed"));
+ throw e;
+ }
+ }
+
+
@NotNull
public static GithubCommitDetailed getCommit(@NotNull GithubConnection connection,
@NotNull String user,
--- /dev/null
+package org.jetbrains.plugins.github.api;
+
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
+public class GithubChangeIssueStateRequest {
+ @NotNull private final String state;
+
+ public GithubChangeIssueStateRequest(@NotNull String state) {
+ this.state = state;
+ }
+}
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.PasswordUtil;
import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.tasks.Comment;
-import com.intellij.tasks.Task;
-import com.intellij.tasks.TaskRepository;
-import com.intellij.tasks.TaskType;
+import com.intellij.tasks.*;
import com.intellij.tasks.impl.BaseRepository;
import com.intellij.tasks.impl.BaseRepositoryImpl;
import com.intellij.util.Function;
}
}
+ @Override
+ public void setTaskState(@NotNull Task task, @NotNull TaskState state) throws Exception {
+ GithubConnection connection = getConnection();
+ try {
+ boolean isOpen;
+ switch (state) {
+ case OPEN:
+ isOpen = true;
+ break;
+ case RESOLVED:
+ isOpen = false;
+ break;
+ default:
+ throw new IllegalStateException("Unknown state: " + state);
+ }
+ GithubApiUtil.setIssueState(connection, getRepoAuthor(), getRepoName(), task.getNumber(), isOpen);
+ }
+ finally {
+ connection.close();
+ }
+ }
+
@NotNull
@Override
public BaseRepository clone() {
@Override
protected int getFeatures() {
- return super.getFeatures() | BASIC_HTTP_AUTHORIZATION;
+ return super.getFeatures() | STATE_UPDATING;
}
}
import com.intellij.openapi.project.Project;
import com.intellij.tasks.TaskRepository;
+import com.intellij.tasks.TaskState;
import com.intellij.tasks.config.TaskRepositoryEditor;
import com.intellij.tasks.impl.BaseRepositoryType;
import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
+import java.util.EnumSet;
/**
* @author Dennis.Ushakov
Consumer<GithubRepository> changeListener) {
return new GithubRepositoryEditor(project, repository, changeListener);
}
+
+ public EnumSet<TaskState> getPossibleTaskStates() {
+ return EnumSet.of(TaskState.OPEN, TaskState.RESOLVED);
+ }
+
}