Skip to content

Commit

Permalink
#9: - reworked offset/limit processing; - implemented 'assigned to me…
Browse files Browse the repository at this point in the history
…' filter
  • Loading branch information
e1fueg0 committed Apr 4, 2019
1 parent 01a7e1a commit dc98e2a
Show file tree
Hide file tree
Showing 9 changed files with 221 additions and 52 deletions.
4 changes: 4 additions & 0 deletions resources/META-INF/plugin.xml
@@ -1,3 +1,7 @@
<!--
~ Copyright © 2019 by elfuego.biz
-->

<idea-plugin>
<id>biz.elfuego.idea.issues.gitea</id>
<name>Gitea issues</name>
Expand Down
53 changes: 36 additions & 17 deletions src/biz/elfuego/idea/issues/gitea/GiteaRepository.java
@@ -1,9 +1,10 @@
/*
* Copyright © 2018 by elfuego.biz
* Copyright © 2019 by elfuego.biz
*/
package biz.elfuego.idea.issues.gitea;

import biz.elfuego.idea.issues.gitea.model.GiteaTask;
import biz.elfuego.idea.issues.gitea.model.GiteaUser;
import biz.elfuego.idea.issues.gitea.util.Consts;
import biz.elfuego.idea.issues.gitea.util.Consts.CommentFields;
import com.google.gson.JsonArray;
Expand Down Expand Up @@ -31,6 +32,7 @@
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Expand All @@ -43,12 +45,14 @@
@Tag("Gitea")
class GiteaRepository extends BaseRepositoryImpl {
private static final Logger logger = Logger.getInstance(GiteaRepository.class);
private static final int DEFAULT_PAGE = 10;

private String userId = null;
private String userLogin = null;
private String repoName = null;
private String projName = null;
private String token = null;
private boolean assigned = false;

@SuppressWarnings("UnusedDeclaration")
public GiteaRepository() {
Expand All @@ -70,6 +74,7 @@ public GiteaRepository(GiteaRepository other) {
repoName = other.repoName;
projName = other.projName;
token = other.token;
assigned = other.assigned;
}

@Override
Expand All @@ -81,7 +86,8 @@ public boolean equals(Object o) {
equal(userLogin, other.userLogin) &&
equal(repoName, other.repoName) &&
equal(projName, other.projName) &&
equal(token, other.token);
equal(token, other.token) &&
equal(assigned, other.assigned);
}

private boolean equal(Object o1, Object o2) {
Expand Down Expand Up @@ -248,7 +254,7 @@ private Task[] getIssues() throws Exception {
return findIssues(null, -1, -1, false, null);
}

private Task[] findIssues(String query, int offset, int limit, boolean withClosed, ProgressIndicator cancelled) throws Exception {
private Task[] findIssues(String query, int offset, int limit, boolean withClosed, @SuppressWarnings("unused") ProgressIndicator cancelled) throws Exception {
if (!ensureUserId())
return new Task[]{};

Expand All @@ -263,19 +269,18 @@ private Task[] findIssues(String query, int offset, int limit, boolean withClose
List<GiteaTaskImpl> result = new ArrayList<>();
final String url = getApiUrl() + Consts.EndPoint.REPOS + getProject() + Consts.EndPoint.ISSUES + qu.toString();

int firstPage = offset / 10;
int lastPage = (offset + limit) / 10;

for (int p = firstPage + 1; p <= lastPage; p++) {
if (!loadPage(url, result, p))
break;
}
int firstPage = offset / DEFAULT_PAGE;
for (int p = firstPage + 1; ; p++) {
if (!loadPage(url, result, p, limit - result.size(),
assigned ? ((task) -> task.isAssignedTo(userLogin)) : null))
break;
}

Collections.sort(result);
return result.toArray(new Task[0]);
}

private boolean loadPage(String url, List<GiteaTaskImpl> result, int page) throws Exception {
private boolean loadPage(String url, List<GiteaTaskImpl> result, int page, int limit, Function<GiteaTask, Boolean> val) throws Exception {
final JsonElement response = executeMethod(new GetMethod(url + page));
if (response == null)
return false;
Expand All @@ -285,11 +290,15 @@ private boolean loadPage(String url, List<GiteaTaskImpl> result, int page) throw
for (int i = 0; i < tasks.size(); i++) {
JsonObject current = tasks.get(i).getAsJsonObject();
GiteaTask raw = new GiteaTask(getProject(), current);
if (!raw.isValid()) {
if (!raw.isValid())
continue;
if (val != null && !val.apply(raw))
continue;
}
GiteaTaskImpl mapped = new GiteaTaskImpl(this, raw);
result.add(mapped);
limit--;
if (limit < 1)
return false;
}
return true;
}
Expand All @@ -313,10 +322,12 @@ Comment[] getComments(GiteaTaskImpl task) throws Exception {
JsonObject current = comments.get(i).getAsJsonObject();
Date date = getDate(current, CommentFields.DATE);
String text = getString(current, CommentFields.TEXT, "");
JsonObject user = getObject(current, CommentFields.USER);
String author = getString(user, CommentFields.FULLNAME, "");
if (author.isEmpty())
author = getString(user, CommentFields.USERNAME, "");
JsonObject juser = getObject(current, CommentFields.USER);
String author = "";
if (!juser.isJsonNull()) {
GiteaUser user = new GiteaUser(juser);
author = user.getName();
}
result.add(new SimpleComment(date, author, text));
}
Comment[] primArray = new Comment[result.size()];
Expand Down Expand Up @@ -405,4 +416,12 @@ public String getUserLogin() {
public void setUserLogin(String userLogin) {
this.userLogin = userLogin;
}

public void setAssigned(boolean assigned) {
this.assigned = assigned;
}

public boolean getAssigned() {
return assigned;
}
}
14 changes: 13 additions & 1 deletion src/biz/elfuego/idea/issues/gitea/GiteaRepositoryEditor.java
@@ -1,5 +1,5 @@
/*
* Copyright © 2018 by elfuego.biz
* Copyright © 2019 by elfuego.biz
*/
package biz.elfuego.idea.issues.gitea;

Expand All @@ -26,15 +26,20 @@ public class GiteaRepositoryEditor extends BaseRepositoryEditor<GiteaRepository>
private JBLabel tokenLabel;
private JPasswordField token;

private JBLabel assignedLabel;
private JCheckBox assignedCheckBox;

GiteaRepositoryEditor(GiteaRepository repository, Project project, Consumer<GiteaRepository> consumer) {
super(project, repository, consumer);

repoName.setText(repository.getRepoName());
projName.setText(repository.getProjName());
token.setText(repository.getToken());
assignedCheckBox.setSelected(repository.getAssigned());
installListener(repoName);
installListener(projName);
installListener(token);
installListener(assignedCheckBox);

myUserNameText.setVisible(false);
myPasswordText.setVisible(false);
Expand Down Expand Up @@ -64,9 +69,14 @@ protected JComponent createCustomPanel() {
tokenLabel = new JBLabel("Token:", SwingConstants.RIGHT);
tokenLabel.setLabelFor(token);

assignedCheckBox = new JCheckBox();
assignedLabel = new JBLabel("Only issues assigned to me:", SwingConstants.RIGHT);
assignedLabel.setLabelFor(assignedCheckBox);

return new FormBuilder().setAlignLabelOnRight(true)
.addLabeledComponent(repoLabel, panel)
.addLabeledComponent(tokenLabel, token)
.addLabeledComponent(assignedLabel, assignedCheckBox)
.getPanel();
}

Expand All @@ -75,6 +85,7 @@ public void setAnchor(@Nullable JComponent anchor) {
super.setAnchor(anchor);
repoLabel.setAnchor(anchor);
tokenLabel.setAnchor(anchor);
// assignedLabel.setAnchor(anchor);
}

@Override
Expand All @@ -84,6 +95,7 @@ public void apply() {
myRepository.setProjName(projName.getText());
//noinspection deprecation
myRepository.setToken(token.getText());
myRepository.setAssigned(assignedCheckBox.isSelected());
myTestButton.setEnabled(myRepository.isConfigured());
}
}
2 changes: 1 addition & 1 deletion src/biz/elfuego/idea/issues/gitea/GiteaRepositoryType.java
@@ -1,5 +1,5 @@
/*
* Copyright © 2018 by elfuego.biz
* Copyright © 2019 by elfuego.biz
*/
package biz.elfuego.idea.issues.gitea;

Expand Down
2 changes: 1 addition & 1 deletion src/biz/elfuego/idea/issues/gitea/GiteaTaskImpl.java
@@ -1,5 +1,5 @@
/*
* Copyright © 2018 by elfuego.biz
* Copyright © 2019 by elfuego.biz
*/
package biz.elfuego.idea.issues.gitea;

Expand Down
73 changes: 45 additions & 28 deletions src/biz/elfuego/idea/issues/gitea/model/GiteaTask.java
@@ -1,16 +1,19 @@
/*
* Copyright © 2018 by elfuego.biz
* Copyright © 2019 by elfuego.biz
*/
package biz.elfuego.idea.issues.gitea.model;

import biz.elfuego.idea.issues.gitea.util.Consts.TaskFields;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import org.apache.http.util.TextUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import static biz.elfuego.idea.issues.gitea.util.Utils.getDate;
import static biz.elfuego.idea.issues.gitea.util.Utils.getString;
import static biz.elfuego.idea.issues.gitea.util.Utils.*;

/**
* @author Roman Pedchenko <elfuego@elfuego.biz>
Expand All @@ -24,9 +27,10 @@ public class GiteaTask {
private Date createdAt;
private Date updatedAt;
private String state;
private String assignee;
private GiteaUser assignee;
private List<GiteaUser> assignees;

public GiteaTask(String project, JsonObject json) {
public GiteaTask(String project, JsonObject json) throws Exception {
this.project = project;
this.fromJson(json);
}
Expand Down Expand Up @@ -94,15 +98,23 @@ public void setState(String state) {
}

@SuppressWarnings("unused")
public String getAssignee() {
public GiteaUser getAssignee() {
return assignee;
}

@SuppressWarnings("WeakerAccess")
public void setAssignee(String assignee) {
public void setAssignee(GiteaUser assignee) {
this.assignee = assignee;
}

public List<GiteaUser> getAssignees() {
return assignees;
}

public void setAssignees(List<GiteaUser> assignees) {
this.assignees = assignees;
}

public boolean isValid() {
return !(TextUtils.isEmpty(id) ||
TextUtils.isEmpty(title) ||
Expand All @@ -111,27 +123,32 @@ public boolean isValid() {
TextUtils.isEmpty(state));
}

private void fromJson(JsonObject current) {
if (current.has(TaskFields.NUMBER)) {
this.setId(getString(current, TaskFields.NUMBER, ""));
}
if (current.has(TaskFields.TITLE)) {
this.setTitle(getString(current, TaskFields.TITLE, ""));
}
if (current.has(TaskFields.DESCRIPTION)) {
this.setDescription(getString(current, TaskFields.DESCRIPTION, ""));
}
if (current.has(TaskFields.CREATEDAT)) {
this.setCreatedAt(getDate(current, TaskFields.CREATEDAT));
}
if (current.has(TaskFields.UPDATEDAT)) {
this.setUpdatedAt(getDate(current, TaskFields.UPDATEDAT));
}
if (current.has(TaskFields.STATE)) {
this.setState(getString(current, TaskFields.STATE, ""));
}
if (current.has(TaskFields.ASSIGNEE)) {
this.setAssignee(getString(current, TaskFields.ASSIGNEE, ""));
public boolean isAssignedTo(String login) {
if (assignee != null && assignee.getLogin().equals(login))
return true;
if (assignees != null)
for (GiteaUser u : assignees)
if (u.getLogin().equals(login))
return true;
return false;
}

private void fromJson(JsonObject current) throws Exception {
this.setId(getString(current, TaskFields.NUMBER, ""));
this.setTitle(getString(current, TaskFields.TITLE, ""));
this.setDescription(getString(current, TaskFields.DESCRIPTION, ""));
this.setCreatedAt(getDate(current, TaskFields.CREATEDAT));
this.setUpdatedAt(getDate(current, TaskFields.UPDATEDAT));
this.setState(getString(current, TaskFields.STATE, ""));
if (current.has(TaskFields.ASSIGNEE) && current.get(TaskFields.ASSIGNEE).isJsonObject())
this.setAssignee(new GiteaUser(getObject(current, TaskFields.ASSIGNEE)));
if (current.has(TaskFields.ASSIGNEES) && current.get(TaskFields.ASSIGNEES).isJsonArray()) {
JsonArray arr = getArray(current.get(TaskFields.ASSIGNEES));
List<GiteaUser> assignees1 = new ArrayList<>();
for (JsonElement el : arr)
if (el.isJsonObject())
assignees1.add(new GiteaUser(getObject(el)));
this.setAssignees(assignees1);
}
}
}

0 comments on commit dc98e2a

Please sign in to comment.