// 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 labels = new ArrayList(); 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 matchedLabels = new ArrayList(); 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; } }