77 lines
2.1 KiB
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;
|
|
}
|
|
|
|
}
|