mylyn-gitea/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaIssueSearch.java

77 lines
2.1 KiB
Java

// Copyright (c) 2021, Fr.Terrot. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package io.gitea.mylyn.core;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import io.gitea.model.IssueState;
import io.gitea.model.Issue;
import io.gitea.model.Label;
public class GiteaIssueSearch {
private String assignee;
private String milestone;
private Boolean opened;
private Boolean closed;
private List<Pattern> labels = new ArrayList<Pattern>();
public GiteaIssueSearch(IRepositoryQuery query) {
assignee = query.getAttribute("assignee");
milestone = query.getAttribute("milestone");
opened = Boolean.parseBoolean(query.getAttribute("opened"));
closed = Boolean.parseBoolean(query.getAttribute("closed"));
for (String label : query.getAttribute("labels").split(",")) {
if (label.trim().length() > 0) {
labels.add(Pattern.compile(label.trim()));
}
}
}
public boolean doesMatch(Issue issue) {
if (!assignee.equals("") && (issue.getAssignee() == null || !(assignee.equals(issue.getAssignee().getLogin())
|| assignee.equals(issue.getAssignee().getFullName())))) {
return false;
}
if (!milestone.equals("")
&& (issue.getMilestone() == null || !milestone.equals(issue.getMilestone().getTitle()))) {
return false;
}
List<Pattern> matchedLabels = new ArrayList<Pattern>();
for (Pattern p : labels) {
for (Label label : issue.getLabels()) {
if (p.matcher(label.getName()).find()) {
matchedLabels.add(p);
}
}
}
if (matchedLabels.size() < labels.size()) {
return false;
}
if (!closed && IssueState.isClosed(issue)) {
return false;
}
if (!opened && IssueState.isOpen(issue)) {
return false;
}
return true;
}
}