mirror of
https://github.com/theonedev/onedev.git
synced 2025-12-08 18:26:30 +00:00
Continue to refactor various queries
This commit is contained in:
parent
d850cf14d0
commit
c6b3b68bfa
@ -32,7 +32,6 @@ import javax.validation.Validator;
|
||||
|
||||
import org.apache.commons.lang3.SerializationUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
@ -93,6 +92,7 @@ import io.onedev.server.security.permission.JobPermission;
|
||||
import io.onedev.server.security.permission.ProjectPermission;
|
||||
import io.onedev.server.util.BuildCommitAware;
|
||||
import io.onedev.server.util.JobLogger;
|
||||
import io.onedev.server.util.SecurityUtils;
|
||||
import io.onedev.server.util.inputspec.SecretInput;
|
||||
import io.onedev.server.util.patternset.PatternSet;
|
||||
import io.onedev.server.util.script.identity.JobIdentity;
|
||||
|
||||
@ -15,7 +15,6 @@ import io.onedev.server.entitymanager.BuildManager;
|
||||
import io.onedev.server.entitymanager.ProjectManager;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.security.permission.AccessProject;
|
||||
import io.onedev.server.util.EditContext;
|
||||
import io.onedev.server.util.SecurityUtils;
|
||||
@ -58,8 +57,7 @@ public class ProjectDependency implements Serializable {
|
||||
private static List<String> getProjectChoices() {
|
||||
List<String> choices = new ArrayList<>();
|
||||
Project project = ((ProjectPage)WicketUtils.getPage()).getProject();
|
||||
User user = SecurityUtils.getUser();
|
||||
for (Project each: OneDev.getInstance(ProjectManager.class).getPermittedProjects(user, new AccessProject())) {
|
||||
for (Project each: OneDev.getInstance(ProjectManager.class).getPermittedProjects(new AccessProject())) {
|
||||
if (!each.equals(project))
|
||||
choices.add(each.getName());
|
||||
}
|
||||
|
||||
@ -11,7 +11,6 @@ import org.eclipse.jgit.lib.ObjectId;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Build.Status;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
@ -40,12 +39,11 @@ public interface BuildManager extends EntityManager<Build> {
|
||||
|
||||
Collection<Build> queryUnfinished();
|
||||
|
||||
List<Build> query(Project project, @Nullable User user, String term, int count);
|
||||
List<Build> query(Project project, String term, int count);
|
||||
|
||||
List<Build> query(@Nullable Project project, @Nullable User user,
|
||||
EntityQuery<Build> buildQuery, int firstResult, int maxResults);
|
||||
List<Build> query(@Nullable Project project, EntityQuery<Build> buildQuery, int firstResult, int maxResults);
|
||||
|
||||
int count(@Nullable Project project, @Nullable User user, EntityCriteria<Build> buildCriteria);
|
||||
int count(@Nullable Project project, EntityCriteria<Build> buildCriteria);
|
||||
|
||||
Collection<Long> getBuildIdsByProject(Long projectId);
|
||||
|
||||
@ -53,7 +51,7 @@ public interface BuildManager extends EntityManager<Build> {
|
||||
|
||||
Collection<String> getJobNames(@Nullable Project project);
|
||||
|
||||
List<String> queryVersions(Project project, @Nullable User user, String matchWith, int count);
|
||||
List<String> queryVersions(Project project, String matchWith, int count);
|
||||
|
||||
Map<Project, Collection<String>> getAccessibleJobNames(@Nullable Project project, @Nullable User user);
|
||||
Map<Project, Collection<String>> getAccessibleJobNames(@Nullable Project project);
|
||||
}
|
||||
|
||||
@ -29,10 +29,11 @@ public interface CodeCommentManager extends EntityManager<CodeComment> {
|
||||
|
||||
void create(CodeComment comment, @Nullable PullRequest request);
|
||||
|
||||
List<CodeComment> query(Project project, @Nullable PullRequest request, User user,
|
||||
List<CodeComment> query(Project project, @Nullable PullRequest request,
|
||||
EntityQuery<CodeComment> commentQuery, int firstResult, int maxResults);
|
||||
|
||||
int count(Project project, @Nullable PullRequest request, User user, EntityCriteria<CodeComment> commentCriteria);
|
||||
int count(Project project, @Nullable PullRequest request,
|
||||
EntityCriteria<CodeComment> commentCriteria);
|
||||
|
||||
void delete(User user, CodeComment comment);
|
||||
|
||||
|
||||
@ -10,7 +10,6 @@ import io.onedev.server.issue.StateSpec;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.Milestone;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.search.entity.issue.IssueCriteria;
|
||||
@ -29,14 +28,14 @@ public interface IssueManager extends EntityManager<Issue> {
|
||||
|
||||
void open(Issue issue);
|
||||
|
||||
List<Issue> query(@Nullable Project project, @Nullable User user, EntityQuery<Issue> issueQuery,
|
||||
List<Issue> query(@Nullable Project project, EntityQuery<Issue> issueQuery,
|
||||
int firstResult, int maxResults);
|
||||
|
||||
int count(@Nullable Project project, @Nullable User user, @Nullable IssueCriteria issueCriteria);
|
||||
int count(@Nullable Project project, @Nullable IssueCriteria issueCriteria);
|
||||
|
||||
List<Issue> query(Project project, String term, int count);
|
||||
|
||||
int count(Milestone milestone, @Nullable User user, @Nullable StateSpec.Category category);
|
||||
int count(Milestone milestone, @Nullable StateSpec.Category category);
|
||||
|
||||
Collection<String> getUndefinedStates();
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@ import org.apache.shiro.authz.Permission;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
@ -47,10 +46,10 @@ public interface ProjectManager extends EntityManager<Project> {
|
||||
|
||||
Repository getRepository(Project project);
|
||||
|
||||
Collection<Project> getPermittedProjects(@Nullable User user, Permission permission);
|
||||
Collection<Project> getPermittedProjects(Permission permission);
|
||||
|
||||
List<Project> query(@Nullable User user, EntityQuery<Project> projecQuery, int firstResult, int maxResults);
|
||||
List<Project> query(EntityQuery<Project> projecQuery, int firstResult, int maxResults);
|
||||
|
||||
int count(@Nullable User user, @Nullable EntityCriteria<Project> projectCriteria);
|
||||
int count(EntityCriteria<Project> projectCriteria);
|
||||
|
||||
}
|
||||
|
||||
@ -75,11 +75,10 @@ public interface PullRequestManager extends EntityManager<PullRequest> {
|
||||
|
||||
void checkQuality(PullRequest request);
|
||||
|
||||
List<PullRequest> query(@Nullable Project targetProject, @Nullable User user,
|
||||
List<PullRequest> query(@Nullable Project targetProject,
|
||||
EntityQuery<PullRequest> requestQuery, int firstResult, int maxResults);
|
||||
|
||||
int count(@Nullable Project targetProject, @Nullable User user,
|
||||
EntityCriteria<PullRequest> requestCriteria);
|
||||
int count(@Nullable Project targetProject, EntityCriteria<PullRequest> requestCriteria);
|
||||
|
||||
List<PullRequest> query(Project targetProject, String term, int count);
|
||||
|
||||
|
||||
@ -25,7 +25,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
import javax.persistence.criteria.Selection;
|
||||
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.apache.shiro.util.ThreadContext;
|
||||
import org.eclipse.jgit.errors.MissingObjectException;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
@ -49,12 +49,12 @@ import io.onedev.commons.utils.FileUtils;
|
||||
import io.onedev.commons.utils.match.StringMatcher;
|
||||
import io.onedev.commons.utils.schedule.SchedulableTask;
|
||||
import io.onedev.commons.utils.schedule.TaskScheduler;
|
||||
import io.onedev.server.OneException;
|
||||
import io.onedev.server.entitymanager.BuildDependenceManager;
|
||||
import io.onedev.server.entitymanager.BuildManager;
|
||||
import io.onedev.server.entitymanager.BuildParamManager;
|
||||
import io.onedev.server.entitymanager.GroupManager;
|
||||
import io.onedev.server.entitymanager.ProjectManager;
|
||||
import io.onedev.server.entitymanager.UserManager;
|
||||
import io.onedev.server.event.entity.EntityRemoved;
|
||||
import io.onedev.server.event.system.SystemStarted;
|
||||
import io.onedev.server.event.system.SystemStopping;
|
||||
@ -79,11 +79,9 @@ import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.search.entity.EntitySort;
|
||||
import io.onedev.server.search.entity.EntitySort.Direction;
|
||||
import io.onedev.server.search.entity.build.BuildQuery;
|
||||
import io.onedev.server.security.permission.ManageProject;
|
||||
import io.onedev.server.security.permission.ProjectPermission;
|
||||
import io.onedev.server.security.permission.SystemAdministration;
|
||||
import io.onedev.server.storage.StorageManager;
|
||||
import io.onedev.server.util.ProjectScopedNumber;
|
||||
import io.onedev.server.util.SecurityUtils;
|
||||
import io.onedev.server.util.facade.BuildFacade;
|
||||
import io.onedev.server.util.patternset.PatternSet;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -111,6 +109,8 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
|
||||
private final TransactionManager transactionManager;
|
||||
|
||||
private final UserManager userManager;
|
||||
|
||||
private final Map<Long, BuildFacade> builds = new HashMap<>();
|
||||
|
||||
private final ReadWriteLock buildsLock = new ReentrantReadWriteLock();
|
||||
@ -124,7 +124,7 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
@Inject
|
||||
public DefaultBuildManager(Dao dao, BuildParamManager buildParamManager,
|
||||
TaskScheduler taskScheduler, BuildDependenceManager buildDependenceManager,
|
||||
GroupManager groupManager, StorageManager storageManager,
|
||||
GroupManager groupManager, StorageManager storageManager, UserManager userManager,
|
||||
ProjectManager projectManager, TransactionManager transactionManager) {
|
||||
super(dao);
|
||||
this.buildParamManager = buildParamManager;
|
||||
@ -132,6 +132,7 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
this.storageManager = storageManager;
|
||||
this.groupManager = groupManager;
|
||||
this.projectManager = projectManager;
|
||||
this.userManager = userManager;
|
||||
this.taskScheduler = taskScheduler;
|
||||
this.transactionManager = transactionManager;
|
||||
}
|
||||
@ -292,16 +293,15 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<Build> query(Project project, @Nullable User user, String term, int count) {
|
||||
public List<Build> query(Project project, String term, int count) {
|
||||
List<Build> builds = new ArrayList<>();
|
||||
|
||||
EntityCriteria<Build> criteria = newCriteria();
|
||||
criteria.add(Restrictions.eq(BuildQueryConstants.ATTR_PROJECT, project));
|
||||
|
||||
Subject subject = User.asSubject(user);
|
||||
if (!subject.isPermitted(new ProjectPermission(project, new ManageProject()))) {
|
||||
if (!SecurityUtils.canManage(project)) {
|
||||
List<Criterion> jobCriterions = new ArrayList<>();
|
||||
for (String jobName: getAccessibleJobNames(project, user).get(project))
|
||||
for (String jobName: getAccessibleJobNames(project).get(project))
|
||||
jobCriterions.add(Restrictions.eq(BuildQueryConstants.ATTR_JOB, jobName));
|
||||
if (!jobCriterions.isEmpty())
|
||||
criteria.add(Restrictions.or(jobCriterions.toArray(new Criterion[jobCriterions.size()])));
|
||||
@ -330,13 +330,13 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<String> queryVersions(Project project, @Nullable User user, String matchWith, int count) {
|
||||
public List<String> queryVersions(Project project, String matchWith, int count) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<String> criteriaQuery = builder.createQuery(String.class);
|
||||
Root<Build> root = criteriaQuery.from(Build.class);
|
||||
criteriaQuery.select(root.get(BuildQueryConstants.ATTR_VERSION)).distinct(true);
|
||||
|
||||
Collection<Predicate> predicates = getPredicates(project, root, builder, user);
|
||||
Collection<Predicate> predicates = getPredicates(project, root, builder);
|
||||
predicates.add(builder.like(
|
||||
builder.lower(root.get(BuildQueryConstants.ATTR_VERSION)),
|
||||
"%" + matchWith.toLowerCase() + "%"));
|
||||
@ -365,22 +365,21 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
}
|
||||
|
||||
private Collection<Predicate> getPredicates(@Nullable Project project, Root<Build> root,
|
||||
CriteriaBuilder builder, @Nullable User user) {
|
||||
CriteriaBuilder builder) {
|
||||
Collection<Predicate> predicates = new ArrayList<>();
|
||||
|
||||
Subject subject = User.asSubject(user);
|
||||
if (project != null) {
|
||||
predicates.add(builder.equal(root.get(BuildQueryConstants.ATTR_PROJECT), project));
|
||||
if (!subject.isPermitted(new ProjectPermission(project, new ManageProject()))) {
|
||||
if (!SecurityUtils.canManage(project)) {
|
||||
List<Predicate> jobPredicates = new ArrayList<>();
|
||||
for (String jobName: getAccessibleJobNames(project, user).get(project))
|
||||
for (String jobName: getAccessibleJobNames(project).get(project))
|
||||
jobPredicates.add(builder.equal(root.get(BuildQueryConstants.ATTR_JOB), jobName));
|
||||
predicates.add(builder.or(jobPredicates.toArray(new Predicate[jobPredicates.size()])));
|
||||
}
|
||||
} else if (!subject.isPermitted(new SystemAdministration())) {
|
||||
} else if (!SecurityUtils.isAdministrator()) {
|
||||
List<Predicate> projectPredicates = new ArrayList<>();
|
||||
for (Map.Entry<Project, Collection<String>> entry: getAccessibleJobNames(null, user).entrySet()) {
|
||||
if (subject.isPermitted(new ProjectPermission(project, new ManageProject()))) {
|
||||
for (Map.Entry<Project, Collection<String>> entry: getAccessibleJobNames(null).entrySet()) {
|
||||
if (SecurityUtils.canManage(project)) {
|
||||
projectPredicates.add(builder.equal(root.get(BuildQueryConstants.ATTR_PROJECT), entry.getKey()));
|
||||
} else {
|
||||
List<Predicate> jobPredicates = new ArrayList<>();
|
||||
@ -397,22 +396,23 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
return predicates;
|
||||
}
|
||||
|
||||
private Predicate[] getPredicates(io.onedev.server.search.entity.EntityCriteria<Build> criteria,
|
||||
@Nullable Project project, Root<Build> root, CriteriaBuilder builder, @Nullable User user) {
|
||||
Collection<Predicate> predicates = getPredicates(project, root, builder, user);
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder, user));
|
||||
private Predicate[] getPredicates(@Nullable Project project,
|
||||
io.onedev.server.search.entity.EntityCriteria<Build> criteria,
|
||||
Root<Build> root, CriteriaBuilder builder) {
|
||||
Collection<Predicate> predicates = getPredicates(project, root, builder);
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder));
|
||||
return predicates.toArray(new Predicate[0]);
|
||||
}
|
||||
|
||||
private CriteriaQuery<Build> buildCriteriaQuery(Session session, @Nullable Project project,
|
||||
EntityQuery<Build> buildQuery, @Nullable User user) {
|
||||
private CriteriaQuery<Build> buildCriteriaQuery(@Nullable Project project,
|
||||
Session session, EntityQuery<Build> buildQuery) {
|
||||
CriteriaBuilder builder = session.getCriteriaBuilder();
|
||||
CriteriaQuery<Build> query = builder.createQuery(Build.class);
|
||||
Root<Build> root = query.from(Build.class);
|
||||
query.select(root).distinct(true);
|
||||
|
||||
query.where(getPredicates(buildQuery.getCriteria(), project, root, builder, user));
|
||||
query.where(getPredicates(project, buildQuery.getCriteria(), root, builder));
|
||||
|
||||
List<javax.persistence.criteria.Order> orders = new ArrayList<>();
|
||||
for (EntitySort sort: buildQuery.getSorts()) {
|
||||
@ -431,9 +431,9 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<Build> query(@Nullable Project project, @Nullable User user,
|
||||
EntityQuery<Build> buildQuery, int firstResult, int maxResults) {
|
||||
CriteriaQuery<Build> criteriaQuery = buildCriteriaQuery(getSession(), project, buildQuery, user);
|
||||
public List<Build> query(@Nullable Project project, EntityQuery<Build> buildQuery,
|
||||
int firstResult, int maxResults) {
|
||||
CriteriaQuery<Build> criteriaQuery = buildCriteriaQuery(project, getSession(), buildQuery);
|
||||
Query<Build> query = getSession().createQuery(criteriaQuery);
|
||||
query.setFirstResult(firstResult);
|
||||
query.setMaxResults(maxResults);
|
||||
@ -442,13 +442,12 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(@Nullable Project project, @Nullable User user,
|
||||
io.onedev.server.search.entity.EntityCriteria<Build> buildCriteria) {
|
||||
public int count(@Nullable Project project, io.onedev.server.search.entity.EntityCriteria<Build> buildCriteria) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class);
|
||||
Root<Build> root = criteriaQuery.from(Build.class);
|
||||
|
||||
criteriaQuery.where(getPredicates(buildCriteria, project, root, builder, user));
|
||||
criteriaQuery.where(getPredicates(project, buildCriteria, root, builder));
|
||||
|
||||
criteriaQuery.select(builder.countDistinct(root));
|
||||
return getSession().createQuery(criteriaQuery).uniqueResult().intValue();
|
||||
@ -519,35 +518,45 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
|
||||
@Override
|
||||
public Boolean call() {
|
||||
List<Build> builds = query(criteria, firstResult.get(), CLEANUP_BATCH);
|
||||
if (!builds.isEmpty()) {
|
||||
logger.debug("Checking build preserve condition: {}->{}",
|
||||
firstResult.get()+1, firstResult.get()+builds.size());
|
||||
}
|
||||
for (Build build: builds) {
|
||||
Project project = build.getProject();
|
||||
Optional<BuildQuery> query = preserveConditions.get(project.getId());
|
||||
if (query == null) {
|
||||
try {
|
||||
String queryString = project.getBuildSetting().getBuildsToPreserve();
|
||||
query = Optional.of(BuildQuery.parse(project, queryString));
|
||||
if (query.get().needsLogin())
|
||||
throw new OneException("This query needs login which is not supported here");
|
||||
} catch (Exception e) {
|
||||
logger.error("Error parsing build preserve condition of project '{}'", project.getName(), e);
|
||||
query = Optional.absent();
|
||||
}
|
||||
preserveConditions.put(project.getId(), query);
|
||||
ThreadContext.bind(userManager.getRoot().asSubject());
|
||||
User.push(null); // do not support various 'is me' criterias
|
||||
try {
|
||||
List<Build> builds = query(criteria, firstResult.get(), CLEANUP_BATCH);
|
||||
if (!builds.isEmpty()) {
|
||||
logger.debug("Checking build preserve condition: {}->{}",
|
||||
firstResult.get()+1, firstResult.get()+builds.size());
|
||||
}
|
||||
if (query.isPresent()) {
|
||||
if (!query.get().matches(build, null)) {
|
||||
logger.debug("Preserve condition not satisfied, deleting build {}...", build.getId());
|
||||
delete(build);
|
||||
for (Build build: builds) {
|
||||
Project project = build.getProject();
|
||||
Optional<BuildQuery> query = preserveConditions.get(project.getId());
|
||||
if (query == null) {
|
||||
try {
|
||||
String queryString = project.getBuildSetting().getBuildsToPreserve();
|
||||
query = Optional.of(BuildQuery.parse(project, queryString));
|
||||
} catch (Exception e) {
|
||||
String message = String.format("Error parsing build preserve condition of project '%s'",
|
||||
project.getName());
|
||||
logger.error(message, e);
|
||||
query = Optional.absent();
|
||||
}
|
||||
preserveConditions.put(project.getId(), query);
|
||||
}
|
||||
if (query.isPresent()) {
|
||||
try {
|
||||
if (!query.get().matches(build))
|
||||
delete(build);
|
||||
} catch (Exception e) {
|
||||
String message = String.format("Error preserving build '%s'", build.getFQN());
|
||||
logger.error(message, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
firstResult.set(firstResult.get() + CLEANUP_BATCH);
|
||||
return builds.size() == CLEANUP_BATCH;
|
||||
firstResult.set(firstResult.get() + CLEANUP_BATCH);
|
||||
return builds.size() == CLEANUP_BATCH;
|
||||
} finally {
|
||||
User.pop();
|
||||
ThreadContext.unbindSubject();
|
||||
}
|
||||
}
|
||||
|
||||
})) {}
|
||||
@ -742,12 +751,12 @@ public class DefaultBuildManager extends AbstractEntityManager<Build> implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Project, Collection<String>> getAccessibleJobNames(@Nullable Project project, @Nullable User user) {
|
||||
public Map<Project, Collection<String>> getAccessibleJobNames(@Nullable Project project) {
|
||||
jobNamesLock.readLock().lock();
|
||||
try {
|
||||
Map<Project, Collection<String>> accessibleJobNames = new HashMap<>();
|
||||
Subject subject = User.asSubject(user);
|
||||
if (subject.isPermitted(new SystemAdministration())) {
|
||||
User user = SecurityUtils.getUser();
|
||||
if (SecurityUtils.isAdministrator()) {
|
||||
for (Map.Entry<Long, Collection<String>> entry: jobNames.entrySet())
|
||||
accessibleJobNames.put(projectManager.load(entry.getKey()), new HashSet<>(entry.getValue()));
|
||||
} else {
|
||||
|
||||
@ -236,8 +236,8 @@ public class DefaultCodeCommentManager extends AbstractEntityManager<CodeComment
|
||||
|
||||
}
|
||||
|
||||
private Predicate[] getPredicates(io.onedev.server.search.entity.EntityCriteria<CodeComment> criteria,
|
||||
Project project, PullRequest request, Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
private Predicate[] getPredicates(Project project, io.onedev.server.search.entity.EntityCriteria<CodeComment> criteria,
|
||||
PullRequest request, Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
if (request != null) {
|
||||
Join<?, ?> relations = root.join(CodeCommentQueryConstants.ATTR_RELATIONS, JoinType.INNER);
|
||||
@ -245,19 +245,19 @@ public class DefaultCodeCommentManager extends AbstractEntityManager<CodeComment
|
||||
} else {
|
||||
predicates.add(builder.equal(root.get(CodeCommentQueryConstants.ATTR_PROJECT), project));
|
||||
}
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder, user));
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder));
|
||||
return predicates.toArray(new Predicate[0]);
|
||||
}
|
||||
|
||||
private CriteriaQuery<CodeComment> buildCriteriaQuery(Session session, Project project, PullRequest request,
|
||||
EntityQuery<CodeComment> commentQuery, User user) {
|
||||
private CriteriaQuery<CodeComment> buildCriteriaQuery(Project project, Session session,
|
||||
PullRequest request, EntityQuery<CodeComment> commentQuery) {
|
||||
CriteriaBuilder builder = session.getCriteriaBuilder();
|
||||
CriteriaQuery<CodeComment> query = builder.createQuery(CodeComment.class);
|
||||
Root<CodeComment> root = query.from(CodeComment.class);
|
||||
query.select(root).distinct(true);
|
||||
|
||||
query.where(getPredicates(commentQuery.getCriteria(), project, request, root, builder, user));
|
||||
query.where(getPredicates(project, commentQuery.getCriteria(), request, root, builder));
|
||||
|
||||
List<javax.persistence.criteria.Order> orders = new ArrayList<>();
|
||||
for (EntitySort sort: commentQuery.getSorts()) {
|
||||
@ -276,9 +276,9 @@ public class DefaultCodeCommentManager extends AbstractEntityManager<CodeComment
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<CodeComment> query(Project project, PullRequest request, User user, EntityQuery<CodeComment> commentQuery,
|
||||
int firstResult, int maxResults) {
|
||||
CriteriaQuery<CodeComment> criteriaQuery = buildCriteriaQuery(getSession(), project, request, commentQuery, user);
|
||||
public List<CodeComment> query(Project project, PullRequest request,
|
||||
EntityQuery<CodeComment> commentQuery, int firstResult, int maxResults) {
|
||||
CriteriaQuery<CodeComment> criteriaQuery = buildCriteriaQuery(project, getSession(), request, commentQuery);
|
||||
Query<CodeComment> query = getSession().createQuery(criteriaQuery);
|
||||
query.setFirstResult(firstResult);
|
||||
query.setMaxResults(maxResults);
|
||||
@ -287,13 +287,13 @@ public class DefaultCodeCommentManager extends AbstractEntityManager<CodeComment
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(Project project, PullRequest request, User user,
|
||||
public int count(Project project, PullRequest request,
|
||||
io.onedev.server.search.entity.EntityCriteria<CodeComment> commentCriteria) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class);
|
||||
Root<CodeComment> root = criteriaQuery.from(CodeComment.class);
|
||||
|
||||
criteriaQuery.where(getPredicates(commentCriteria, project, request, root, builder, user));
|
||||
criteriaQuery.where(getPredicates(project, commentCriteria, request, root, builder));
|
||||
|
||||
criteriaQuery.select(builder.countDistinct(root));
|
||||
return getSession().createQuery(criteriaQuery).uniqueResult().intValue();
|
||||
|
||||
@ -11,7 +11,6 @@ import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.wicket.util.lang.Objects;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
|
||||
@ -55,10 +54,12 @@ import io.onedev.server.persistence.TransactionManager;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.AbstractEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
import io.onedev.server.search.entity.issue.IssueCriteria;
|
||||
import io.onedev.server.search.entity.issue.IssueQuery;
|
||||
import io.onedev.server.search.entity.issue.StateCriteria;
|
||||
import io.onedev.server.util.Input;
|
||||
import io.onedev.server.util.SecurityUtils;
|
||||
import io.onedev.server.util.patternset.PatternSet;
|
||||
|
||||
@Singleton
|
||||
@ -228,20 +229,22 @@ public class DefaultIssueChangeManager extends AbstractEntityManager<IssueChange
|
||||
if ((trigger.getJobNames() == null || PatternSet.fromString(trigger.getJobNames()).matches(new StringMatcher(), build.getJobName()))
|
||||
&& build.getStatus() == Build.Status.SUCCESSFUL
|
||||
&& (branches == null || project.isCommitOnBranches(commitId, branches))) {
|
||||
IssueQuery query = IssueQuery.parse(project, trigger.getIssueQuery(), true);
|
||||
List<IssueCriteria> criterias = new ArrayList<>();
|
||||
for (String fromState: transition.getFromStates())
|
||||
criterias.add(new StateCriteria(fromState));
|
||||
criterias.add(query.getCriteria());
|
||||
query = new IssueQuery(IssueCriteria.of(criterias), new ArrayList<>());
|
||||
Build.push(build);
|
||||
User.push(null); // do not support various 'is me' criterias
|
||||
try {
|
||||
IssueQuery query = IssueQuery.parse(project, trigger.getIssueQuery(), true);
|
||||
List<IssueCriteria> criterias = new ArrayList<>();
|
||||
for (String fromState: transition.getFromStates())
|
||||
criterias.add(new StateCriteria(fromState));
|
||||
criterias.add(query.getCriteria());
|
||||
query = new IssueQuery(IssueCriteria.of(criterias), new ArrayList<>());
|
||||
for (Issue issue: issueManager.query(project, null, query, 0, Integer.MAX_VALUE)) {
|
||||
for (Issue issue: issueManager.query(project, query, 0, Integer.MAX_VALUE)) {
|
||||
issue.removeFields(transition.getRemoveFields());
|
||||
changeState(issue, transition.getToState(), new HashMap<>(), null, null);
|
||||
}
|
||||
} finally {
|
||||
Build.pop();
|
||||
User.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -67,8 +67,8 @@ import io.onedev.server.search.entity.issue.IssueCriteria;
|
||||
import io.onedev.server.search.entity.issue.IssueQuery;
|
||||
import io.onedev.server.search.entity.issue.MilestoneCriteria;
|
||||
import io.onedev.server.security.permission.AccessProject;
|
||||
import io.onedev.server.security.permission.SystemAdministration;
|
||||
import io.onedev.server.util.ProjectScopedNumber;
|
||||
import io.onedev.server.util.SecurityUtils;
|
||||
import io.onedev.server.util.ValueSetEdit;
|
||||
import io.onedev.server.util.facade.IssueFacade;
|
||||
import io.onedev.server.util.inputspec.choiceinput.choiceprovider.SpecifiedChoices;
|
||||
@ -180,30 +180,31 @@ public class DefaultIssueManager extends AbstractEntityManager<Issue> implements
|
||||
});
|
||||
}
|
||||
|
||||
private Predicate[] getPredicates(io.onedev.server.search.entity.EntityCriteria<Issue> criteria,
|
||||
@Nullable Project project, Root<Issue> root, CriteriaBuilder builder, @Nullable User user) {
|
||||
private Predicate[] getPredicates(@Nullable Project project,
|
||||
io.onedev.server.search.entity.EntityCriteria<Issue> criteria, Root<Issue> root,
|
||||
CriteriaBuilder builder) {
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
if (project != null) {
|
||||
predicates.add(builder.equal(root.get(IssueQueryConstants.ATTR_PROJECT), project));
|
||||
} else if (!User.asSubject(user).isPermitted(new SystemAdministration())) {
|
||||
Collection<Project> projects = projectManager.getPermittedProjects(user, new AccessProject());
|
||||
} else if (!SecurityUtils.isAdministrator()) {
|
||||
Collection<Project> projects = projectManager.getPermittedProjects(new AccessProject());
|
||||
if (!projects.isEmpty())
|
||||
predicates.add(root.get(IssueQueryConstants.ATTR_PROJECT).in(projects));
|
||||
else
|
||||
predicates.add(builder.disjunction());
|
||||
}
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder, user));
|
||||
predicates.add(criteria.getPredicate(root, builder));
|
||||
return predicates.toArray(new Predicate[0]);
|
||||
}
|
||||
|
||||
private CriteriaQuery<Issue> buildCriteriaQuery(Session session, @Nullable Project project,
|
||||
EntityQuery<Issue> issueQuery, @Nullable User user) {
|
||||
private CriteriaQuery<Issue> buildCriteriaQuery(@Nullable Project project,
|
||||
Session session, EntityQuery<Issue> issueQuery) {
|
||||
CriteriaBuilder builder = session.getCriteriaBuilder();
|
||||
CriteriaQuery<Issue> query = builder.createQuery(Issue.class);
|
||||
Root<Issue> root = query.from(Issue.class);
|
||||
|
||||
query.where(getPredicates(issueQuery.getCriteria(), project, root, builder, user));
|
||||
query.where(getPredicates(project, issueQuery.getCriteria(), root, builder));
|
||||
|
||||
List<javax.persistence.criteria.Order> orders = new ArrayList<>();
|
||||
for (EntitySort sort: issueQuery.getSorts()) {
|
||||
@ -235,9 +236,10 @@ public class DefaultIssueManager extends AbstractEntityManager<Issue> implements
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<Issue> query(@Nullable Project project, @Nullable User user,
|
||||
io.onedev.server.search.entity.EntityQuery<Issue> issueQuery, int firstResult, int maxResults) {
|
||||
CriteriaQuery<Issue> criteriaQuery = buildCriteriaQuery(getSession(), project, issueQuery, user);
|
||||
public List<Issue> query(@Nullable Project project,
|
||||
io.onedev.server.search.entity.EntityQuery<Issue> issueQuery,
|
||||
int firstResult, int maxResults) {
|
||||
CriteriaQuery<Issue> criteriaQuery = buildCriteriaQuery(project, getSession(), issueQuery);
|
||||
Query<Issue> query = getSession().createQuery(criteriaQuery);
|
||||
query.setFirstResult(firstResult);
|
||||
query.setMaxResults(maxResults);
|
||||
@ -256,32 +258,32 @@ public class DefaultIssueManager extends AbstractEntityManager<Issue> implements
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(@Nullable Project project, @Nullable User user, IssueCriteria issueCriteria) {
|
||||
public int count(@Nullable Project project,IssueCriteria issueCriteria) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class);
|
||||
Root<Issue> root = criteriaQuery.from(Issue.class);
|
||||
|
||||
criteriaQuery.where(getPredicates(issueCriteria, project, root, builder, user));
|
||||
criteriaQuery.where(getPredicates(project, issueCriteria, root, builder));
|
||||
|
||||
criteriaQuery.select(builder.count(root));
|
||||
return getSession().createQuery(criteriaQuery).uniqueResult().intValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int count(Milestone milestone, @Nullable User user, @Nullable StateSpec.Category category) {
|
||||
public int count(Milestone milestone, @Nullable StateSpec.Category category) {
|
||||
if (category != null) {
|
||||
IssueCriteria criteria = getIssueSetting().getCategoryCriteria(category);
|
||||
if (criteria != null) {
|
||||
List<IssueCriteria> criterias = new ArrayList<>();
|
||||
criterias.add(new MilestoneCriteria(milestone.getName()));
|
||||
criterias.add(criteria);
|
||||
return count(milestone.getProject(), user, new AndCriteria(criterias));
|
||||
return count(milestone.getProject(), new AndCriteria(criterias));
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
IssueCriteria criteria = new MilestoneCriteria(milestone.getName());
|
||||
return count(milestone.getProject(), user, criteria);
|
||||
return count(milestone.getProject(), criteria);
|
||||
}
|
||||
}
|
||||
|
||||
@ -631,5 +633,6 @@ public class DefaultIssueManager extends AbstractEntityManager<Issue> implements
|
||||
} finally {
|
||||
issuesLock.readLock().unlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
@ -79,7 +78,6 @@ import io.onedev.server.search.entity.EntitySort;
|
||||
import io.onedev.server.search.entity.EntitySort.Direction;
|
||||
import io.onedev.server.search.entity.project.ProjectQuery;
|
||||
import io.onedev.server.security.permission.AccessProject;
|
||||
import io.onedev.server.security.permission.SystemAdministration;
|
||||
import io.onedev.server.util.SecurityUtils;
|
||||
import io.onedev.server.util.Usage;
|
||||
import io.onedev.server.util.patternset.PatternSet;
|
||||
@ -447,12 +445,13 @@ public class DefaultProjectManager extends AbstractEntityManager<Project> implem
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public Collection<Project> getPermittedProjects(@Nullable User user, Permission permission) {
|
||||
public Collection<Project> getPermittedProjects(Permission permission) {
|
||||
Collection<Project> projects = new HashSet<>();
|
||||
|
||||
if (User.asSubject(user).isPermitted(new SystemAdministration())) {
|
||||
if (SecurityUtils.isAdministrator()) {
|
||||
projects.addAll(query());
|
||||
} else {
|
||||
User user = SecurityUtils.getUser();
|
||||
if (user != null) {
|
||||
for (Membership membership: user.getMemberships()) {
|
||||
for (GroupAuthorization authorization: membership.getGroup().getProjectAuthorizations()) {
|
||||
@ -477,14 +476,13 @@ public class DefaultProjectManager extends AbstractEntityManager<Project> implem
|
||||
return projects;
|
||||
}
|
||||
|
||||
private CriteriaQuery<Project> buildCriteriaQuery(Session session, EntityQuery<Project> projectQuery,
|
||||
@Nullable User user) {
|
||||
private CriteriaQuery<Project> buildCriteriaQuery(Session session, EntityQuery<Project> projectQuery) {
|
||||
CriteriaBuilder builder = session.getCriteriaBuilder();
|
||||
CriteriaQuery<Project> query = builder.createQuery(Project.class);
|
||||
Root<Project> root = query.from(Project.class);
|
||||
query.select(root).distinct(true);
|
||||
|
||||
query.where(getPredicates(projectQuery.getCriteria(), root, builder, user));
|
||||
query.where(getPredicates(projectQuery.getCriteria(), root, builder));
|
||||
|
||||
List<javax.persistence.criteria.Order> orders = new ArrayList<>();
|
||||
for (EntitySort sort: projectQuery.getSorts()) {
|
||||
@ -502,25 +500,25 @@ public class DefaultProjectManager extends AbstractEntityManager<Project> implem
|
||||
}
|
||||
|
||||
private Predicate[] getPredicates(io.onedev.server.search.entity.EntityCriteria<Project> criteria,
|
||||
Root<Project> root, CriteriaBuilder builder, @Nullable User user) {
|
||||
Root<Project> root, CriteriaBuilder builder) {
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
if (!User.asSubject(user).isPermitted(new SystemAdministration())) {
|
||||
Collection<Long> projectIds = getPermittedProjects(user, new AccessProject())
|
||||
if (!SecurityUtils.isAdministrator()) {
|
||||
Collection<Long> projectIds = getPermittedProjects(new AccessProject())
|
||||
.stream().map(it->it.getId()).collect(Collectors.toSet());
|
||||
if (!projectIds.isEmpty())
|
||||
predicates.add(root.get(ProjectQueryConstants.ATTR_ID).in(projectIds));
|
||||
else
|
||||
predicates.add(builder.disjunction());
|
||||
}
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder, user));
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder));
|
||||
return predicates.toArray(new Predicate[0]);
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<Project> query(User user, EntityQuery<Project> projectQuery, int firstResult, int maxResults) {
|
||||
CriteriaQuery<Project> criteriaQuery = buildCriteriaQuery(getSession(), projectQuery, user);
|
||||
public List<Project> query(EntityQuery<Project> projectQuery, int firstResult, int maxResults) {
|
||||
CriteriaQuery<Project> criteriaQuery = buildCriteriaQuery(getSession(), projectQuery);
|
||||
Query<Project> query = getSession().createQuery(criteriaQuery);
|
||||
query.setFirstResult(firstResult);
|
||||
query.setMaxResults(maxResults);
|
||||
@ -529,12 +527,12 @@ public class DefaultProjectManager extends AbstractEntityManager<Project> implem
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(User user, io.onedev.server.search.entity.EntityCriteria<Project> projectCriteria) {
|
||||
public int count(io.onedev.server.search.entity.EntityCriteria<Project> projectCriteria) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class);
|
||||
Root<Project> root = criteriaQuery.from(Project.class);
|
||||
|
||||
criteriaQuery.where(getPredicates(projectCriteria, root, builder, user));
|
||||
criteriaQuery.where(getPredicates(projectCriteria, root, builder));
|
||||
|
||||
criteriaQuery.select(builder.count(root));
|
||||
return getSession().createQuery(criteriaQuery).uniqueResult().intValue();
|
||||
|
||||
@ -123,7 +123,6 @@ import io.onedev.server.search.entity.EntitySort.Direction;
|
||||
import io.onedev.server.search.entity.pullrequest.PullRequestQuery;
|
||||
import io.onedev.server.security.permission.ProjectPermission;
|
||||
import io.onedev.server.security.permission.ReadCode;
|
||||
import io.onedev.server.security.permission.SystemAdministration;
|
||||
import io.onedev.server.security.permission.WriteCode;
|
||||
import io.onedev.server.util.ProjectAndBranch;
|
||||
import io.onedev.server.util.ProjectScopedNumber;
|
||||
@ -952,32 +951,33 @@ public class DefaultPullRequestManager extends AbstractEntityManager<PullRequest
|
||||
return addedContributions;
|
||||
}
|
||||
|
||||
private Predicate[] getPredicates(io.onedev.server.search.entity.EntityCriteria<PullRequest> criteria,
|
||||
@Nullable Project targetProject, @Nullable User user, Root<PullRequest> root, CriteriaBuilder builder) {
|
||||
private Predicate[] getPredicates(@Nullable Project targetProject,
|
||||
io.onedev.server.search.entity.EntityCriteria<PullRequest> criteria,
|
||||
Root<PullRequest> root, CriteriaBuilder builder) {
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
if (targetProject != null) {
|
||||
predicates.add(builder.equal(root.get("targetProject"), targetProject));
|
||||
} else if (!User.asSubject(user).isPermitted(new SystemAdministration())) {
|
||||
Collection<Project> projects = projectManager.getPermittedProjects(user, new ReadCode());
|
||||
} else if (!SecurityUtils.isAdministrator()) {
|
||||
Collection<Project> projects = projectManager.getPermittedProjects(new ReadCode());
|
||||
if (!projects.isEmpty())
|
||||
predicates.add(root.get(PullRequestQueryConstants.ATTR_TARGET_PROJECT).in(projects));
|
||||
else
|
||||
predicates.add(builder.disjunction());
|
||||
}
|
||||
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder, user));
|
||||
if (criteria != null)
|
||||
predicates.add(criteria.getPredicate(root, builder));
|
||||
return predicates.toArray(new Predicate[0]);
|
||||
}
|
||||
|
||||
private CriteriaQuery<PullRequest> buildCriteriaQuery(Session session, @Nullable Project targetProject,
|
||||
User user, EntityQuery<PullRequest> requestQuery) {
|
||||
EntityQuery<PullRequest> requestQuery) {
|
||||
CriteriaBuilder builder = session.getCriteriaBuilder();
|
||||
CriteriaQuery<PullRequest> query = builder.createQuery(PullRequest.class);
|
||||
Root<PullRequest> root = query.from(PullRequest.class);
|
||||
query.select(root).distinct(true);
|
||||
|
||||
query.where(getPredicates(requestQuery.getCriteria(), targetProject, user, root, builder));
|
||||
query.where(getPredicates(targetProject, requestQuery.getCriteria(), root, builder));
|
||||
|
||||
List<javax.persistence.criteria.Order> orders = new ArrayList<>();
|
||||
for (EntitySort sort: requestQuery.getSorts()) {
|
||||
@ -999,9 +999,9 @@ public class DefaultPullRequestManager extends AbstractEntityManager<PullRequest
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<PullRequest> query(@Nullable Project targetProject, @Nullable User user,
|
||||
public List<PullRequest> query(@Nullable Project targetProject,
|
||||
EntityQuery<PullRequest> requestQuery, int firstResult, int maxResults) {
|
||||
CriteriaQuery<PullRequest> criteriaQuery = buildCriteriaQuery(getSession(), targetProject, user, requestQuery);
|
||||
CriteriaQuery<PullRequest> criteriaQuery = buildCriteriaQuery(getSession(), targetProject, requestQuery);
|
||||
Query<PullRequest> query = getSession().createQuery(criteriaQuery);
|
||||
query.setFirstResult(firstResult);
|
||||
query.setMaxResults(maxResults);
|
||||
@ -1010,13 +1010,13 @@ public class DefaultPullRequestManager extends AbstractEntityManager<PullRequest
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(@Nullable Project targetProject, @Nullable User user,
|
||||
public int count(@Nullable Project targetProject,
|
||||
io.onedev.server.search.entity.EntityCriteria<PullRequest> requestCriteria) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class);
|
||||
Root<PullRequest> root = criteriaQuery.from(PullRequest.class);
|
||||
|
||||
criteriaQuery.where(getPredicates(requestCriteria, targetProject, user, root, builder));
|
||||
criteriaQuery.where(getPredicates(targetProject, requestCriteria, root, builder));
|
||||
|
||||
criteriaQuery.select(builder.countDistinct(root));
|
||||
return getSession().createQuery(criteriaQuery).uniqueResult().intValue();
|
||||
|
||||
@ -70,7 +70,7 @@ public class BoardSpec implements Serializable {
|
||||
}
|
||||
|
||||
@Editable(order=200, description="Optionally specify a base query to filter/order issues of the board")
|
||||
@IssueQuery
|
||||
@IssueQuery(withCurrentUserCriteria = true, withCurrentBuildCriteria = false)
|
||||
@Nullable
|
||||
public String getBaseQuery() {
|
||||
return baseQuery;
|
||||
@ -82,7 +82,7 @@ public class BoardSpec implements Serializable {
|
||||
|
||||
@Editable(order=250, description="Optionally specify a base query to filter/order issues in backlog. "
|
||||
+ "Backlog issues are those not associating with any milestones")
|
||||
@IssueQuery
|
||||
@IssueQuery(withCurrentUserCriteria = true, withCurrentBuildCriteria = false)
|
||||
@Nullable
|
||||
public String getBacklogBaseQuery() {
|
||||
return backlogBaseQuery;
|
||||
|
||||
@ -74,7 +74,7 @@ public class BuildSuccessfulTrigger extends TransitionTrigger {
|
||||
|
||||
@Editable(order=300, description="Specify an issue query to filter issues eligible for this transition."
|
||||
+ "This query will be combined with 'from states' criteria of this transition")
|
||||
@IssueQuery
|
||||
@IssueQuery(withCurrentUserCriteria = false, withCurrentBuildCriteria = true)
|
||||
@NotEmpty
|
||||
public String getIssueQuery() {
|
||||
return issueQuery;
|
||||
|
||||
@ -702,6 +702,10 @@ public class Build extends AbstractEntity implements Referenceable {
|
||||
}
|
||||
}
|
||||
|
||||
public String getFQN() {
|
||||
return getProject().getName() + "#" + getNumber();
|
||||
}
|
||||
|
||||
public Collection<String> getOnBranches() {
|
||||
CommitInfoManager commitInfoManager = OneDev.getInstance(CommitInfoManager.class);
|
||||
Collection<ObjectId> descendants = commitInfoManager.getDescendants(
|
||||
|
||||
@ -505,5 +505,9 @@ public class Issue extends AbstractEntity implements Referenceable, AttachmentSt
|
||||
public Project getAttachmentProject() {
|
||||
return getProject();
|
||||
}
|
||||
|
||||
public String getFQN() {
|
||||
return getProject() + "#" + getNumber();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -868,4 +868,8 @@ public class PullRequest extends AbstractEntity implements Referenceable, Attach
|
||||
return getTargetProject();
|
||||
}
|
||||
|
||||
public String getFQN() {
|
||||
return getTargetProject() + "#" + getNumber();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Stack;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@ -15,7 +16,6 @@ import javax.persistence.Lob;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.AuthenticationInfo;
|
||||
import org.apache.shiro.subject.PrincipalCollection;
|
||||
import org.apache.shiro.subject.SimplePrincipalCollection;
|
||||
@ -38,6 +38,7 @@ import io.onedev.server.model.support.NamedProjectQuery;
|
||||
import io.onedev.server.model.support.QuerySetting;
|
||||
import io.onedev.server.model.support.issue.NamedIssueQuery;
|
||||
import io.onedev.server.model.support.pullrequest.NamedPullRequestQuery;
|
||||
import io.onedev.server.util.SecurityUtils;
|
||||
import io.onedev.server.util.jackson.DefaultView;
|
||||
import io.onedev.server.util.validation.annotation.UserName;
|
||||
import io.onedev.server.util.watch.QuerySubscriptionSupport;
|
||||
@ -55,7 +56,16 @@ public class User extends AbstractEntity implements AuthenticationInfo {
|
||||
|
||||
public static final Long ROOT_ID = 1L;
|
||||
|
||||
@Column(unique=true, nullable=false)
|
||||
private static ThreadLocal<Stack<User>> stack = new ThreadLocal<Stack<User>>() {
|
||||
|
||||
@Override
|
||||
protected Stack<User> initialValue() {
|
||||
return new Stack<User>();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@Column(unique=true, nullable=false)
|
||||
private String name;
|
||||
|
||||
@Column(length=1024, nullable=false)
|
||||
@ -477,4 +487,20 @@ public class User extends AbstractEntity implements AuthenticationInfo {
|
||||
return groups;
|
||||
}
|
||||
|
||||
public static void push(User user) {
|
||||
stack.get().push(user);
|
||||
}
|
||||
|
||||
public static void pop() {
|
||||
stack.get().pop();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static User get() {
|
||||
if (!stack.get().isEmpty())
|
||||
return stack.get().peek();
|
||||
else
|
||||
return SecurityUtils.getUser();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ public class NamedBuildQuery implements NamedQuery {
|
||||
}
|
||||
|
||||
@Editable
|
||||
@BuildQuery
|
||||
@BuildQuery(withCurrentUserCriteria = true)
|
||||
@NotEmpty
|
||||
@Override
|
||||
public String getQuery() {
|
||||
|
||||
@ -29,7 +29,7 @@ public class ProjectBuildSetting implements Serializable {
|
||||
|
||||
@Editable(description="Specify builds to preserve. OneDev will run every night to remove builds not matching "
|
||||
+ "query specified here")
|
||||
@BuildQuery
|
||||
@BuildQuery(withCurrentUserCriteria = false)
|
||||
@NotEmpty
|
||||
public String getBuildsToPreserve() {
|
||||
return buildsToPreserve;
|
||||
|
||||
@ -16,7 +16,7 @@ public class GlobalProjectSetting implements Serializable {
|
||||
|
||||
public GlobalProjectSetting() {
|
||||
namedQueries.add(new NamedProjectQuery("All projects", "all"));
|
||||
namedQueries.add(new NamedProjectQuery("My projects", "\"Owner\" is me"));
|
||||
namedQueries.add(new NamedProjectQuery("My projects", "owned by me"));
|
||||
}
|
||||
|
||||
public List<NamedProjectQuery> getNamedQueries() {
|
||||
|
||||
@ -35,7 +35,7 @@ public class NamedIssueQuery implements NamedQuery {
|
||||
}
|
||||
|
||||
@Editable
|
||||
@IssueQuery
|
||||
@IssueQuery(withCurrentUserCriteria = true, withCurrentBuildCriteria = false)
|
||||
@NotEmpty
|
||||
@Override
|
||||
public String getQuery() {
|
||||
|
||||
@ -9,6 +9,9 @@ import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import io.onedev.commons.launcher.loader.Listen;
|
||||
import io.onedev.server.entitymanager.SettingManager;
|
||||
import io.onedev.server.entitymanager.UrlManager;
|
||||
@ -25,6 +28,8 @@ import io.onedev.server.search.entity.build.BuildQuery;
|
||||
@Singleton
|
||||
public class BuildNotificationManager {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(BuildNotificationManager.class);
|
||||
|
||||
private final MailManager mailManager;
|
||||
|
||||
private final UrlManager urlManager;
|
||||
@ -89,12 +94,18 @@ public class BuildNotificationManager {
|
||||
for (Map.Entry<User, Collection<String>> entry: subscribedQueryStrings.entrySet()) {
|
||||
User user = entry.getKey();
|
||||
for (String queryString: entry.getValue()) {
|
||||
User.push(user);
|
||||
try {
|
||||
if (BuildQuery.parse(event.getProject(), queryString).matches(build, user)) {
|
||||
if (BuildQuery.parse(event.getProject(), queryString).matches(build)) {
|
||||
notifyEmails.add(user.getEmail());
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String message = String.format("Error processing build subscription (user: %s, build: %s, query: %s)",
|
||||
user.getName(), build.getFQN(), queryString);
|
||||
logger.error(message, e);
|
||||
} finally {
|
||||
User.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -114,12 +125,18 @@ public class BuildNotificationManager {
|
||||
for (Map.Entry<User, Collection<String>> entry: subscribedQueryStrings.entrySet()) {
|
||||
User user = entry.getKey();
|
||||
for (String queryString: entry.getValue()) {
|
||||
User.push(user);
|
||||
try {
|
||||
if (BuildQuery.parse(null, queryString).matches(build, user)) {
|
||||
if (BuildQuery.parse(null, queryString).matches(build)) {
|
||||
notifyEmails.add(user.getEmail());
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String message = String.format("Error processing build subscription (user: %s, build: %s, query: %s)",
|
||||
user.getName(), build.getFQN(), queryString);
|
||||
logger.error(message, e);
|
||||
} finally {
|
||||
User.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,8 @@ import javax.inject.Singleton;
|
||||
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import io.onedev.commons.launcher.loader.Listen;
|
||||
import io.onedev.server.entitymanager.UrlManager;
|
||||
@ -20,11 +22,14 @@ import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.model.support.NamedQuery;
|
||||
import io.onedev.server.persistence.annotation.Sessional;
|
||||
|
||||
import io.onedev.server.search.commit.CommitQuery;
|
||||
|
||||
@Singleton
|
||||
public class CommitNotificationManager {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(CommitNotificationManager.class);
|
||||
|
||||
private final MailManager mailManager;
|
||||
|
||||
private final UrlManager urlManager;
|
||||
@ -63,12 +68,18 @@ public class CommitNotificationManager {
|
||||
for (Map.Entry<User, Collection<String>> entry: subscribedQueryStrings.entrySet()) {
|
||||
User user = entry.getKey();
|
||||
for (String queryString: entry.getValue()) {
|
||||
User.push(user);
|
||||
try {
|
||||
if (CommitQuery.parse(event.getProject(), queryString).matches(event, user)) {
|
||||
if (CommitQuery.parse(project, queryString).matches(event)) {
|
||||
notifyEmails.add(user.getEmail());
|
||||
break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String message = String.format("Error processing commit subscription (user: %s, project: %s, commit: %s, query: %s)",
|
||||
user.getName(), project.getName(), event.getNewCommitId().name(), queryString);
|
||||
logger.error(message, e);
|
||||
} finally {
|
||||
User.pop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,7 +9,6 @@ import com.google.common.base.Preconditions;
|
||||
import io.onedev.server.event.RefUpdated;
|
||||
import io.onedev.server.git.command.RevListCommand;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.util.DateUtils;
|
||||
|
||||
public class AfterCriteria extends CommitCriteria {
|
||||
@ -23,11 +22,6 @@ public class AfterCriteria extends CommitCriteria {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Project project, RevListCommand command) {
|
||||
for (String value: values)
|
||||
@ -35,7 +29,7 @@ public class AfterCriteria extends CommitCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
RevCommit commit = event.getProject().getRevCommit(event.getNewCommitId(), true);
|
||||
for (String value: values) {
|
||||
if (!commit.getCommitterIdent().getWhen().after(DateUtils.parseRelaxed(value)))
|
||||
|
||||
@ -25,15 +25,6 @@ public class AuthorCriteria extends CommitCriteria {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
for (String value: values) {
|
||||
if (value == null) // authored by me
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Project project, RevListCommand command) {
|
||||
for (String value: values) {
|
||||
@ -49,11 +40,14 @@ public class AuthorCriteria extends CommitCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
RevCommit commit = event.getProject().getRevCommit(event.getNewCommitId(), true);
|
||||
String authorEmail = commit.getAuthorIdent().getEmailAddress();
|
||||
for (String value: values) {
|
||||
if (value == null) { // authored by me
|
||||
if (user.getEmail().equals(commit.getAuthorIdent().getEmailAddress()))
|
||||
if (User.get() == null)
|
||||
throw new OneException("Please login to perform this query");
|
||||
else if (User.get().getEmail().equals(authorEmail))
|
||||
return true;
|
||||
} else {
|
||||
if (matches("*" + value + "*", commit.getAuthorIdent()))
|
||||
|
||||
@ -9,7 +9,6 @@ import com.google.common.base.Preconditions;
|
||||
import io.onedev.server.event.RefUpdated;
|
||||
import io.onedev.server.git.command.RevListCommand;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.util.DateUtils;
|
||||
|
||||
public class BeforeCriteria extends CommitCriteria {
|
||||
@ -23,11 +22,6 @@ public class BeforeCriteria extends CommitCriteria {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Project project, RevListCommand command) {
|
||||
for (String value: values)
|
||||
@ -35,7 +29,7 @@ public class BeforeCriteria extends CommitCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
RevCommit commit = event.getProject().getRevCommit(event.getNewCommitId(), true);
|
||||
for (String value: values) {
|
||||
if (!commit.getCommitterIdent().getWhen().before(DateUtils.parseRelaxed(value)))
|
||||
|
||||
@ -8,7 +8,6 @@ import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.event.RefUpdated;
|
||||
import io.onedev.server.git.command.RevListCommand;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
public abstract class CommitCriteria implements Serializable {
|
||||
|
||||
@ -19,10 +18,8 @@ public abstract class CommitCriteria implements Serializable {
|
||||
return WildcardUtils.matchString(value, formatted);
|
||||
}
|
||||
|
||||
public abstract boolean needsLogin();
|
||||
|
||||
public abstract void fill(Project project, RevListCommand command);
|
||||
|
||||
public abstract boolean matches(RefUpdated event, User user);
|
||||
public abstract boolean matches(RefUpdated event);
|
||||
|
||||
}
|
||||
|
||||
@ -28,7 +28,6 @@ import io.onedev.server.event.RefUpdated;
|
||||
import io.onedev.server.git.command.RevListCommand;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.search.commit.CommitQueryParser.CriteriaContext;
|
||||
|
||||
public class CommitQuery implements Serializable {
|
||||
@ -144,18 +143,14 @@ public class CommitQuery implements Serializable {
|
||||
|
||||
return new CommitQuery(criterias);
|
||||
}
|
||||
|
||||
public boolean needsLogin() {
|
||||
return criterias.stream().anyMatch(it->it.needsLogin());
|
||||
}
|
||||
|
||||
private static String getValue(TerminalNode valueNode) {
|
||||
return StringUtils.unescape(FenceAware.unfence(valueNode.getText()));
|
||||
}
|
||||
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
if (!event.getNewCommitId().equals(ObjectId.zeroId()))
|
||||
return criterias.stream().allMatch(it->it.matches(event, user));
|
||||
return criterias.stream().allMatch(it->it.matches(event));
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -25,15 +25,6 @@ public class CommitterCriteria extends CommitCriteria {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
for (String value: values) {
|
||||
if (value == null) // committed by me
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Project project, RevListCommand command) {
|
||||
for (String value: values) {
|
||||
@ -49,11 +40,14 @@ public class CommitterCriteria extends CommitCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
RevCommit commit = event.getProject().getRevCommit(event.getNewCommitId(), true);
|
||||
String committerEmail = commit.getCommitterIdent().getEmailAddress();
|
||||
for (String value: values) {
|
||||
if (value == null) { // committed by me
|
||||
if (user.getEmail().equals(commit.getCommitterIdent().getEmailAddress()))
|
||||
if (User.get() == null)
|
||||
throw new OneException("Please login to perform this query");
|
||||
else if (User.get().getEmail().equals(committerEmail))
|
||||
return true;
|
||||
} else {
|
||||
if (matches("*" + value + "*", commit.getCommitterIdent()))
|
||||
|
||||
@ -10,7 +10,7 @@ import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.event.RefUpdated;
|
||||
import io.onedev.server.git.command.RevListCommand;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
|
||||
public class MessageCriteria extends CommitCriteria {
|
||||
|
||||
@ -23,11 +23,6 @@ public class MessageCriteria extends CommitCriteria {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public List<String> getValues() {
|
||||
return values;
|
||||
}
|
||||
@ -39,7 +34,7 @@ public class MessageCriteria extends CommitCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
RevCommit commit = event.getProject().getRevCommit(event.getNewCommitId(), true);
|
||||
for (String value: values) {
|
||||
if (WildcardUtils.matchString("*" + value + "*", commit.getFullMessage()))
|
||||
|
||||
@ -15,7 +15,7 @@ import io.onedev.server.event.RefUpdated;
|
||||
import io.onedev.server.git.GitUtils;
|
||||
import io.onedev.server.git.command.RevListCommand;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
|
||||
public class PathCriteria extends CommitCriteria {
|
||||
|
||||
@ -32,11 +32,6 @@ public class PathCriteria extends CommitCriteria {
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Project project, RevListCommand command) {
|
||||
for (String value: values)
|
||||
@ -44,7 +39,7 @@ public class PathCriteria extends CommitCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
Project project = event.getProject();
|
||||
RevCommit commit = project.getRevCommit(event.getNewCommitId(), true);
|
||||
|
||||
|
||||
@ -11,7 +11,6 @@ import com.google.common.base.Preconditions;
|
||||
import io.onedev.server.event.RefUpdated;
|
||||
import io.onedev.server.git.command.RevListCommand;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.search.commit.Revision.Scope;
|
||||
|
||||
public class RevisionCriteria extends CommitCriteria {
|
||||
@ -25,11 +24,6 @@ public class RevisionCriteria extends CommitCriteria {
|
||||
this.revisions = revisions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fill(Project project, RevListCommand command) {
|
||||
boolean ranged = false;
|
||||
@ -52,7 +46,7 @@ public class RevisionCriteria extends CommitCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(RefUpdated event, User user) {
|
||||
public boolean matches(RefUpdated event) {
|
||||
List<Revision> untilRevisions = revisions.stream().filter(it->it.getScope() != Scope.SINCE).collect(Collectors.toList());
|
||||
if (!untilRevisions.isEmpty()) {
|
||||
for (Revision revision: untilRevisions) {
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.AbstractEntity;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
|
||||
public class AndCriteriaHelper<T extends AbstractEntity> extends EntityCriteria<T> {
|
||||
|
||||
@ -21,31 +21,22 @@ public class AndCriteriaHelper<T extends AbstractEntity> extends EntityCriteria<
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<T> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<T> root, CriteriaBuilder builder) {
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
for (EntityCriteria<T> criteria: criterias)
|
||||
predicates.add(criteria.getPredicate(root, builder, user));
|
||||
predicates.add(criteria.getPredicate(root, builder));
|
||||
return builder.and(predicates.toArray(new Predicate[0]));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(T entity, User user) {
|
||||
public boolean matches(T entity) {
|
||||
for (EntityCriteria<T> criteria: criterias) {
|
||||
if (!criteria.matches(entity, user))
|
||||
if (!criteria.matches(entity))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
for (EntityCriteria<T> criteria: criterias) {
|
||||
if (criteria.needsLogin())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
@ -5,7 +5,6 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.Path;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
@ -14,7 +13,6 @@ import javax.persistence.criteria.Root;
|
||||
import edu.emory.mathcs.backport.java.util.Collections;
|
||||
import io.onedev.commons.utils.RangeBuilder;
|
||||
import io.onedev.server.model.AbstractEntity;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
public abstract class EntityCriteria<T extends AbstractEntity> implements Serializable {
|
||||
|
||||
@ -22,11 +20,9 @@ public abstract class EntityCriteria<T extends AbstractEntity> implements Serial
|
||||
|
||||
public static final int IN_CLAUSE_LIMIT = 1000;
|
||||
|
||||
public abstract Predicate getPredicate(Root<T> root, CriteriaBuilder builder, @Nullable User user);
|
||||
public abstract Predicate getPredicate(Root<T> root, CriteriaBuilder builder);
|
||||
|
||||
public abstract boolean matches(T entity, @Nullable User user);
|
||||
|
||||
public abstract boolean needsLogin();
|
||||
public abstract boolean matches(T entity);
|
||||
|
||||
protected Predicate inManyValues(CriteriaBuilder builder, Path<Long> attribute, Collection<Long> inValues,
|
||||
Collection<Long> allValues) {
|
||||
|
||||
@ -174,12 +174,8 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
|
||||
throw new OneException("Unable to find milestone: " + value);
|
||||
}
|
||||
|
||||
public boolean needsLogin() {
|
||||
return getCriteria() != null && getCriteria().needsLogin();
|
||||
}
|
||||
|
||||
public boolean matches(T entity, User user) {
|
||||
return getCriteria() == null || getCriteria().matches(entity, user);
|
||||
public boolean matches(T entity) {
|
||||
return getCriteria() == null || getCriteria().matches(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -5,7 +5,6 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.AbstractEntity;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
public class NotCriteriaHelper<T extends AbstractEntity> extends EntityCriteria<T> {
|
||||
|
||||
@ -18,18 +17,13 @@ public class NotCriteriaHelper<T extends AbstractEntity> extends EntityCriteria<
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<T> root, CriteriaBuilder builder, User user) {
|
||||
return criteria.getPredicate(root, builder, user).not();
|
||||
public Predicate getPredicate(Root<T> root, CriteriaBuilder builder) {
|
||||
return criteria.getPredicate(root, builder).not();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(T entity, User user) {
|
||||
return !criteria.matches(entity, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return criteria.needsLogin();
|
||||
public boolean matches(T entity) {
|
||||
return !criteria.matches(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.AbstractEntity;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
|
||||
public class OrCriteriaHelper<T extends AbstractEntity> extends EntityCriteria<T> {
|
||||
|
||||
@ -21,26 +21,17 @@ public class OrCriteriaHelper<T extends AbstractEntity> extends EntityCriteria<T
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<T> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<T> root, CriteriaBuilder builder) {
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
for (EntityCriteria<T> criteria: criterias)
|
||||
predicates.add(criteria.getPredicate(root, builder, user));
|
||||
predicates.add(criteria.getPredicate(root, builder));
|
||||
return builder.or(predicates.toArray(new Predicate[0]));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(T entity, User user) {
|
||||
public boolean matches(T entity) {
|
||||
for (EntityCriteria<T> criteria: criterias) {
|
||||
if (criteria.matches(entity, user))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
for (EntityCriteria<T> criteria: criterias) {
|
||||
if (criteria.needsLogin())
|
||||
if (criteria.matches(entity))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@ -7,13 +7,21 @@ import java.util.Optional;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import io.onedev.server.model.AbstractEntity;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.PullRequest;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.model.support.NamedQuery;
|
||||
import io.onedev.server.model.support.QuerySetting;
|
||||
|
||||
|
||||
public abstract class QueryWatchBuilder<T extends AbstractEntity> {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(QueryWatchBuilder.class);
|
||||
|
||||
private final Map<String, Optional<EntityQuery<T>>> parsedQueries = new HashMap<>();
|
||||
|
||||
private final Map<User, Boolean> watches = new HashMap<>();
|
||||
@ -42,19 +50,37 @@ public abstract class QueryWatchBuilder<T extends AbstractEntity> {
|
||||
|
||||
private boolean matches(@Nullable NamedQuery namedQuery, User user) {
|
||||
if (namedQuery != null) {
|
||||
Optional<EntityQuery<T>> entityQuery = parsedQueries.get(namedQuery.getQuery());
|
||||
if (entityQuery == null) {
|
||||
try {
|
||||
entityQuery = Optional.of(parse(namedQuery.getQuery()));
|
||||
} catch (Exception e) {
|
||||
entityQuery = Optional.empty();
|
||||
User.push(user);
|
||||
try {
|
||||
Optional<EntityQuery<T>> entityQuery = parsedQueries.get(namedQuery.getQuery());
|
||||
if (entityQuery == null) {
|
||||
try {
|
||||
entityQuery = Optional.of(parse(namedQuery.getQuery()));
|
||||
} catch (Exception e) {
|
||||
entityQuery = Optional.empty();
|
||||
}
|
||||
parsedQueries.put(namedQuery.getQuery(), entityQuery);
|
||||
}
|
||||
parsedQueries.put(namedQuery.getQuery(), entityQuery);
|
||||
return entityQuery.isPresent() && entityQuery.get().matches(getEntity());
|
||||
} catch (Exception e) {
|
||||
String message;
|
||||
if (getEntity() instanceof Issue) {
|
||||
Issue issue = (Issue) getEntity();
|
||||
message = String.format("Error processing watches (user: %s, issue: %s, query: %s)",
|
||||
user.getName(), issue.getFQN(), namedQuery.getQuery());
|
||||
} else if (getEntity() instanceof PullRequest) {
|
||||
PullRequest request = (PullRequest) getEntity();
|
||||
message = String.format("Error processing watches (user: %s, pull request: %s, query: %s)",
|
||||
user.getName(), request.getFQN(), namedQuery.getQuery());
|
||||
} else {
|
||||
throw new RuntimeException("Unexpected watch entity type: " + getEntity().getClass());
|
||||
}
|
||||
logger.error(message, e);
|
||||
} finally {
|
||||
User.pop();
|
||||
}
|
||||
return entityQuery.isPresent() && entityQuery.get().matches(getEntity(), user);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected abstract T getEntity();
|
||||
|
||||
@ -11,7 +11,7 @@ import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.PullRequest;
|
||||
import io.onedev.server.model.PullRequestBuild;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -30,7 +30,7 @@ public class AssociatedWithPullRequestCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(BuildQueryConstants.ATTR_PULL_REQUEST_BUILDS, JoinType.LEFT);
|
||||
return builder.and(
|
||||
builder.equal(root.get(BuildQueryConstants.ATTR_PROJECT), request.getTargetProject()),
|
||||
@ -38,16 +38,11 @@ public class AssociatedWithPullRequestCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getProject().equals(request.getTargetProject())
|
||||
&& build.getPullRequestBuilds().stream().anyMatch(it -> it.getRequest().equals(request));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.AssociatedWithPullRequest) + " " + BuildQuery.quote(value);
|
||||
|
||||
@ -5,7 +5,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -14,20 +14,15 @@ public class AssociatedWithPullRequestsCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
return builder.isNotEmpty(root.get(BuildQueryConstants.ATTR_PULL_REQUEST_BUILDS));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return !build.getPullRequestBuilds().isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.AssociatedWithPullRequests);
|
||||
|
||||
@ -9,6 +9,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -27,21 +28,16 @@ public class CancelledByCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<User> attribute = root.get(BuildQueryConstants.ATTR_CANCELLER);
|
||||
return builder.equal(attribute, this.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return Objects.equals(build.getCanceller(), this.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.CancelledBy) + " " + BuildQuery.quote(value);
|
||||
|
||||
@ -5,6 +5,7 @@ import javax.persistence.criteria.Path;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.OneException;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
@ -15,26 +16,21 @@ public class CancelledByMeCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
if (user != null) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
if (User.get() != null) {
|
||||
Path<User> attribute = root.get(BuildQueryConstants.ATTR_CANCELLER);
|
||||
return builder.equal(attribute, user);
|
||||
return builder.equal(attribute, User.get());
|
||||
} else {
|
||||
return builder.disjunction();
|
||||
throw new OneException("Please login to perform this query");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
if (user != null)
|
||||
return user.equals(build.getCanceller());
|
||||
public boolean matches(Build build) {
|
||||
if (User.get() != null)
|
||||
return User.get().equals(build.getCanceller());
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return true;
|
||||
throw new OneException("Please login to perform this query");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -15,21 +15,16 @@ public class CancelledCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> attribute = root.get(BuildQueryConstants.ATTR_STATUS);
|
||||
return builder.equal(attribute, Build.Status.CANCELLED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getStatus() == Build.Status.CANCELLED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.Cancelled);
|
||||
|
||||
@ -9,7 +9,7 @@ import org.eclipse.jgit.lib.ObjectId;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -27,7 +27,7 @@ public class CommitCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> projectAttribute = BuildQuery.getPath(root, BuildQueryConstants.ATTR_PROJECT);
|
||||
Path<?> commitAttribute = BuildQuery.getPath(root, BuildQueryConstants.ATTR_COMMIT);
|
||||
return builder.and(
|
||||
@ -36,15 +36,10 @@ public class CommitCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getProject().equals(project) && build.getCommitHash().equals(commitId.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_COMMIT) + " " + BuildQuery.getRuleName(BuildQueryLexer.Is) + " " + BuildQuery.quote(commitId.name());
|
||||
|
||||
@ -10,7 +10,7 @@ import javax.persistence.criteria.Root;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.BuildDependence;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -29,13 +29,13 @@ public class DependenciesOfCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(BuildQueryConstants.ATTR_DEPENDENTS, JoinType.LEFT);
|
||||
return builder.equal(join.get(BuildDependence.ATTR_DEPENDENT), build);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
for (BuildDependence dependence: this.build.getDependencies()) {
|
||||
if (dependence.getDependency().equals(build))
|
||||
return true;
|
||||
@ -43,11 +43,6 @@ public class DependenciesOfCriteria extends EntityCriteria<Build> {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.DependenciesOf) + " " + BuildQuery.quote(value);
|
||||
|
||||
@ -10,7 +10,7 @@ import javax.persistence.criteria.Root;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.BuildDependence;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -29,13 +29,13 @@ public class DependsOnCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(BuildQueryConstants.ATTR_DEPENDENCIES, JoinType.LEFT);
|
||||
return builder.equal(join.get(BuildDependence.ATTR_DEPENDENCY), build);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
for (BuildDependence dependence: this.build.getDependents()) {
|
||||
if (dependence.getDependent().equals(build))
|
||||
return true;
|
||||
@ -43,11 +43,6 @@ public class DependsOnCriteria extends EntityCriteria<Build> {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.DependsOn) + " " + BuildQuery.quote(value);
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -15,21 +15,16 @@ public class FailedCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> attribute = root.get(BuildQueryConstants.ATTR_STATUS);
|
||||
return builder.equal(attribute, Build.Status.FAILED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getStatus() == Build.Status.FAILED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.Failed);
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -30,7 +30,7 @@ public class FinishDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<Date> attribute = root.get(BuildQueryConstants.ATTR_FINISH_DATE);
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return builder.lessThan(attribute, date);
|
||||
@ -39,18 +39,13 @@ public class FinishDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return build.getFinishDate().before(date);
|
||||
else
|
||||
return build.getFinishDate().after(date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_FINISH_DATE) + " "
|
||||
|
||||
@ -18,7 +18,7 @@ import io.onedev.server.infomanager.CommitInfoManager;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -46,7 +46,7 @@ public class FixedIssueCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<Long> attribute = root.get(BuildQueryConstants.ATTR_ID);
|
||||
Project project = issue.getProject();
|
||||
Collection<ObjectId> fixCommits = getCommitInfoManager().getFixCommits(project, issue.getNumber());
|
||||
@ -61,7 +61,7 @@ public class FixedIssueCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
if (build.getProject().equals(issue.getProject())) {
|
||||
Collection<ObjectId> fixCommits = getCommitInfoManager().getFixCommits(build.getProject(), issue.getNumber());
|
||||
for (ObjectId commit: fixCommits) {
|
||||
@ -73,11 +73,6 @@ public class FixedIssueCriteria extends EntityCriteria<Build> {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.FixedIssue) + " " + BuildQuery.quote(value);
|
||||
|
||||
@ -7,7 +7,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -22,22 +22,17 @@ public class JobCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<String> attribute = root.get(BuildQueryConstants.ATTR_JOB);
|
||||
String normalized = jobName.toLowerCase().replace("*", "%");
|
||||
return builder.like(builder.lower(attribute), normalized);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return WildcardUtils.matchString(jobName.toLowerCase(), build.getJobName().toLowerCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_JOB) + " "
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.ProjectScopedNumber;
|
||||
@ -31,7 +31,7 @@ public class NumberCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<Long> attribute = root.get(BuildQueryConstants.ATTR_NUMBER);
|
||||
Predicate numberPredicate;
|
||||
if (operator == BuildQueryLexer.Is)
|
||||
@ -46,7 +46,7 @@ public class NumberCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
if (build.getProject().equals(number.getProject())) {
|
||||
if (operator == BuildQueryLexer.Is)
|
||||
return build.getNumber() == number.getNumber();
|
||||
@ -59,11 +59,6 @@ public class NumberCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_NUMBER) + " "
|
||||
|
||||
@ -10,7 +10,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.BuildParam;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -28,7 +28,7 @@ public class ParamCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(BuildQueryConstants.ATTR_PARAMS, JoinType.LEFT);
|
||||
return builder.and(
|
||||
builder.equal(join.get(BuildParam.ATTR_NAME), name),
|
||||
@ -36,7 +36,7 @@ public class ParamCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
List<String> paramValues = build.getParamMap().get(name);
|
||||
if (paramValues == null || paramValues.isEmpty())
|
||||
return value == null;
|
||||
@ -44,11 +44,6 @@ public class ParamCriteria extends EntityCriteria<Build> {
|
||||
return paramValues.contains(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(name) + " "
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -15,21 +15,16 @@ public class PendingCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> attribute = root.get(BuildQueryConstants.ATTR_STATUS);
|
||||
return builder.equal(attribute, Build.Status.PENDING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getStatus() == Build.Status.PENDING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.Pending);
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
import io.onedev.server.util.query.ProjectQueryConstants;
|
||||
@ -24,7 +24,7 @@ public class ProjectCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<String> attribute = root
|
||||
.join(BuildQueryConstants.ATTR_PROJECT, JoinType.INNER)
|
||||
.get(ProjectQueryConstants.ATTR_NAME);
|
||||
@ -33,16 +33,11 @@ public class ProjectCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return WildcardUtils.matchString(projectName.toLowerCase(),
|
||||
build.getProject().getName().toLowerCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_PROJECT) + " "
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -30,7 +30,7 @@ public class QueueingDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<Date> attribute = root.get(BuildQueryConstants.ATTR_QUEUEING_DATE);
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return builder.lessThan(attribute, date);
|
||||
@ -39,18 +39,13 @@ public class QueueingDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return build.getPendingDate().before(date);
|
||||
else
|
||||
return build.getPendingDate().after(date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_QUEUEING_DATE) + " "
|
||||
|
||||
@ -11,7 +11,7 @@ import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.PullRequest;
|
||||
import io.onedev.server.model.PullRequestBuild;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -30,7 +30,7 @@ public class RequiredByPullRequestCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(BuildQueryConstants.ATTR_PULL_REQUEST_BUILDS, JoinType.LEFT);
|
||||
|
||||
return builder.and(
|
||||
@ -40,16 +40,11 @@ public class RequiredByPullRequestCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getProject().equals(request.getTargetProject())
|
||||
&& build.getPullRequestBuilds().stream().anyMatch(it -> it.getRequest().equals(request) && it.isRequired());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.RequiredByPullRequest) + " " + BuildQuery.quote(value);
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.PullRequestBuild;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -17,21 +17,16 @@ public class RequiredByPullRequestsCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(BuildQueryConstants.ATTR_PULL_REQUEST_BUILDS, JoinType.LEFT);
|
||||
return builder.equal(join.get(PullRequestBuild.ATTR_REQUIRED), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getPullRequestBuilds().stream().anyMatch(it->it.isRequired());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.RequiredByPullRequests);
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -15,21 +15,16 @@ public class RunningCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> attribute = root.get(BuildQueryConstants.ATTR_STATUS);
|
||||
return builder.equal(attribute, Build.Status.RUNNING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getStatus() == Build.Status.RUNNING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.Running);
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -30,7 +30,7 @@ public class RunningDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<Date> attribute = root.get(BuildQueryConstants.ATTR_RUNNING_DATE);
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return builder.lessThan(attribute, date);
|
||||
@ -39,18 +39,13 @@ public class RunningDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return build.getRunningDate().before(date);
|
||||
else
|
||||
return build.getRunningDate().after(date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_RUNNING_DATE) + " "
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -30,7 +30,7 @@ public class SubmitDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<Date> attribute = root.get(BuildQueryConstants.ATTR_SUBMIT_DATE);
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return builder.lessThan(attribute, date);
|
||||
@ -39,18 +39,13 @@ public class SubmitDateCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
if (operator == BuildQueryLexer.IsBefore)
|
||||
return build.getSubmitDate().before(date);
|
||||
else
|
||||
return build.getSubmitDate().after(date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_SUBMIT_DATE) + " "
|
||||
|
||||
@ -9,6 +9,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
@ -27,21 +28,16 @@ public class SubmittedByCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<User> attribute = root.get(BuildQueryConstants.ATTR_SUBMITTER);
|
||||
return builder.equal(attribute, this.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return Objects.equals(build.getSubmitter(), this.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.SubmittedBy) + " " + BuildQuery.quote(value);
|
||||
|
||||
@ -5,6 +5,7 @@ import javax.persistence.criteria.Path;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.OneException;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
@ -15,26 +16,21 @@ public class SubmittedByMeCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
if (user != null) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
if (User.get() != null) {
|
||||
Path<User> attribute = root.get(BuildQueryConstants.ATTR_SUBMITTER);
|
||||
return builder.equal(attribute, user);
|
||||
return builder.equal(attribute, User.get());
|
||||
} else {
|
||||
return builder.disjunction();
|
||||
throw new OneException("Please login to perform this query");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
if (user != null)
|
||||
return user.equals(build.getSubmitter());
|
||||
public boolean matches(Build build) {
|
||||
if (User.get() != null)
|
||||
return User.get().equals(build.getSubmitter());
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return true;
|
||||
throw new OneException("Please login to perform this query");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -15,21 +15,16 @@ public class SuccessfulCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> attribute = root.get(BuildQueryConstants.ATTR_STATUS);
|
||||
return builder.equal(attribute, Build.Status.SUCCESSFUL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getStatus() == Build.Status.SUCCESSFUL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.Successful);
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -15,21 +15,16 @@ public class TimedOutCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> attribute = root.get(BuildQueryConstants.ATTR_STATUS);
|
||||
return builder.equal(attribute, Build.Status.TIMED_OUT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getStatus() == Build.Status.TIMED_OUT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.TimedOut);
|
||||
|
||||
@ -7,7 +7,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -22,23 +22,18 @@ public class VersionCriteria extends EntityCriteria<Build> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<String> attribute = root.get(BuildQueryConstants.ATTR_VERSION);
|
||||
String normalized = value.toLowerCase().replace("*", "%");
|
||||
return builder.like(builder.lower(attribute), normalized);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
String version = build.getVersion();
|
||||
return version != null && WildcardUtils.matchString(value.toLowerCase(), version.toLowerCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.quote(BuildQueryConstants.FIELD_VERSION) + " "
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.BuildQueryConstants;
|
||||
|
||||
@ -15,21 +15,16 @@ public class WaitingCriteria extends EntityCriteria<Build> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Build> root, CriteriaBuilder builder) {
|
||||
Path<?> attribute = root.get(BuildQueryConstants.ATTR_STATUS);
|
||||
return builder.equal(attribute, Build.Status.WAITING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Build build, User user) {
|
||||
public boolean matches(Build build) {
|
||||
return build.getStatus() == Build.Status.WAITING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return BuildQuery.getRuleName(BuildQueryLexer.Waiting);
|
||||
|
||||
@ -7,7 +7,7 @@ query
|
||||
;
|
||||
|
||||
criteria
|
||||
: CreatedByMe #OperatorCriteria
|
||||
: operator=CreatedByMe #OperatorCriteria
|
||||
| operator=(CreatedBy|OnCommit) WS+ criteriaValue=Quoted #OperatorValueCriteria
|
||||
| criteriaField=Quoted WS+ operator=(Is|IsBefore|IsAfter|IsGreaterThan|IsLessThan|Contains) WS+ criteriaValue=Quoted #FieldOperatorValueCriteria
|
||||
| criteria WS+ And WS+ criteria #AndCriteria
|
||||
|
||||
@ -7,7 +7,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.CodeCommentQueryConstants;
|
||||
|
||||
@ -22,22 +22,17 @@ public class ContentCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
Expression<String> attribute = root.get(CodeCommentQueryConstants.ATTR_CONTENT);
|
||||
return builder.like(builder.lower(attribute), "%" + value.toLowerCase().replace('*', '%') + "%");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
String content = comment.getContent();
|
||||
return WildcardUtils.matchString("*" + value.toLowerCase() + "*", content);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.quote(CodeCommentQueryConstants.FIELD_CONTENT) + " "
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.CodeCommentQueryConstants;
|
||||
|
||||
@ -29,7 +29,7 @@ public class CreateDateCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
Path<Date> attribute = root.get(CodeCommentQueryConstants.ATTR_CREATE_DATE);
|
||||
if (operator == CodeCommentQueryLexer.IsBefore)
|
||||
return builder.lessThan(attribute, value);
|
||||
@ -38,18 +38,13 @@ public class CreateDateCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
if (operator == CodeCommentQueryLexer.IsBefore)
|
||||
return comment.getCreateDate().before(value);
|
||||
else
|
||||
return comment.getCreateDate().after(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.quote(CodeCommentQueryConstants.FIELD_CREATE_DATE) + " "
|
||||
|
||||
@ -27,21 +27,16 @@ public class CreatedByCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
Path<User> attribute = root.get(CodeCommentQueryConstants.ATTR_USER);
|
||||
return builder.equal(attribute, this.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
return Objects.equals(comment.getUser(), this.user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.getRuleName(CodeCommentQueryLexer.CreatedBy)
|
||||
|
||||
@ -5,6 +5,7 @@ import javax.persistence.criteria.Path;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.OneException;
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
@ -15,26 +16,21 @@ public class CreatedByMeCriteria extends EntityCriteria<CodeComment> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
if (user != null) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
if (User.get() != null) {
|
||||
Path<?> attribute = root.get(CodeCommentQueryConstants.ATTR_USER);
|
||||
return builder.equal(attribute, user);
|
||||
return builder.equal(attribute, User.get());
|
||||
} else {
|
||||
return builder.disjunction();
|
||||
throw new OneException("Please login to perform this query");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
if (user != null)
|
||||
return user.equals(comment.getUser());
|
||||
public boolean matches(CodeComment comment) {
|
||||
if (User.get() != null)
|
||||
return User.get().equals(comment.getUser());
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return true;
|
||||
throw new OneException("Please login to perform this query");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -9,7 +9,7 @@ import org.eclipse.jgit.lib.ObjectId;
|
||||
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.CodeCommentQueryConstants;
|
||||
|
||||
@ -27,7 +27,7 @@ public class OnCommitCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
Path<?> projectAttribute = CodeCommentQuery.getPath(root, CodeCommentQueryConstants.ATTR_PROJECT);
|
||||
Path<?> commitAttribute = CodeCommentQuery.getPath(root, CodeCommentQueryConstants.ATTR_COMMIT);
|
||||
return builder.and(
|
||||
@ -36,16 +36,11 @@ public class OnCommitCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
return comment.getProject().equals(project)
|
||||
&& comment.getMarkPos().getCommit().equals(commitId.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.getRuleName(CodeCommentQueryLexer.OnCommit) + " " + CodeCommentQuery.quote(commitId.name());
|
||||
|
||||
@ -7,7 +7,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.CodeCommentQueryConstants;
|
||||
|
||||
@ -22,7 +22,7 @@ public class PathCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
Path<String> attribute = CodeCommentQuery.getPath(root, CodeCommentQueryConstants.ATTR_PATH);
|
||||
String normalized = value.toLowerCase().replace('*', '%');
|
||||
if (normalized.endsWith("/"))
|
||||
@ -31,15 +31,10 @@ public class PathCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
return WildcardUtils.matchPath(value.toLowerCase(), comment.getMarkPos().getPath().toLowerCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.quote(CodeCommentQueryConstants.FIELD_PATH) + " "
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.CodeCommentQueryConstants;
|
||||
|
||||
@ -24,7 +24,7 @@ public class ReplyCountCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
Path<Integer> attribute = root.get(CodeCommentQueryConstants.ATTR_REPLY_COUNT);
|
||||
if (operator == CodeCommentQueryLexer.Is)
|
||||
return builder.equal(attribute, value);
|
||||
@ -35,7 +35,7 @@ public class ReplyCountCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
if (operator == CodeCommentQueryLexer.Is)
|
||||
return comment.getReplyCount() == value;
|
||||
else if (operator == CodeCommentQueryLexer.IsLessThan)
|
||||
@ -44,11 +44,6 @@ public class ReplyCountCriteria extends EntityCriteria<CodeComment> {
|
||||
return comment.getReplyCount() > value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.quote(CodeCommentQueryConstants.FIELD_REPLY_COUNT) + " " + CodeCommentQuery.getRuleName(operator) + " " + CodeCommentQuery.quote(String.valueOf(value));
|
||||
|
||||
@ -10,7 +10,7 @@ import javax.persistence.criteria.Root;
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.CodeCommentReply;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.CodeCommentQueryConstants;
|
||||
|
||||
@ -25,14 +25,14 @@ public class ReplyCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(CodeCommentQueryConstants.ATTR_REPLIES, JoinType.LEFT);
|
||||
Path<String> attribute = join.get(CodeCommentReply.ATTR_CONTENT);
|
||||
return builder.like(builder.lower(attribute), "%" + value.toLowerCase().replace('*', '%') + "%");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
for (CodeCommentReply reply: comment.getReplies()) {
|
||||
String content = reply.getContent();
|
||||
if (WildcardUtils.matchString("*" + value.toLowerCase() + "*", content))
|
||||
@ -41,11 +41,6 @@ public class ReplyCriteria extends EntityCriteria<CodeComment> {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.quote(CodeCommentQueryConstants.FIELD_REPLY) + " " + CodeCommentQuery.getRuleName(CodeCommentQueryLexer.Contains) + " " + CodeCommentQuery.quote(value);
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityCriteria;
|
||||
import io.onedev.server.util.query.CodeCommentQueryConstants;
|
||||
|
||||
@ -29,7 +29,7 @@ public class UpdateDateCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<CodeComment> root, CriteriaBuilder builder) {
|
||||
Path<Date> attribute = CodeCommentQuery.getPath(root, CodeCommentQueryConstants.ATTR_UPDATE_DATE);
|
||||
if (operator == CodeCommentQueryLexer.IsBefore)
|
||||
return builder.lessThan(attribute, value);
|
||||
@ -38,21 +38,18 @@ public class UpdateDateCriteria extends EntityCriteria<CodeComment> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CodeComment comment, User user) {
|
||||
public boolean matches(CodeComment comment) {
|
||||
if (operator == CodeCommentQueryLexer.IsBefore)
|
||||
return comment.getUpdateDate().before(value);
|
||||
else
|
||||
return comment.getUpdateDate().after(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return CodeCommentQuery.quote(CodeCommentQueryConstants.FIELD_UPDATE_DATE) + " " + CodeCommentQuery.getRuleName(operator) + " " + CodeCommentQuery.quote(rawValue);
|
||||
return CodeCommentQuery.quote(CodeCommentQueryConstants.FIELD_UPDATE_DATE) + " "
|
||||
+ CodeCommentQuery.getRuleName(operator) + " "
|
||||
+ CodeCommentQuery.quote(rawValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -12,7 +12,6 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.search.entity.AndCriteriaHelper;
|
||||
import io.onedev.server.search.entity.ParensAware;
|
||||
import io.onedev.server.util.ValueSetEdit;
|
||||
@ -29,18 +28,13 @@ public class AndCriteria extends IssueCriteria implements ParensAware {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
return new AndCriteriaHelper<Issue>(criterias).getPredicate(root, builder, user);
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
return new AndCriteriaHelper<Issue>(criterias).getPredicate(root, builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
return new AndCriteriaHelper<Issue>(criterias).matches(issue, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return new AndCriteriaHelper<Issue>(criterias).needsLogin();
|
||||
public boolean matches(Issue issue) {
|
||||
return new AndCriteriaHelper<Issue>(criterias).matches(issue);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -9,7 +9,7 @@ import javax.persistence.criteria.Predicate;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
|
||||
public class BooleanFieldCriteria extends FieldCriteria {
|
||||
|
||||
@ -23,20 +23,15 @@ public class BooleanFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user) {
|
||||
public Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder) {
|
||||
return builder.equal(field.get(IssueField.ATTR_VALUE), String.valueOf(value));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
return Objects.equals(value, issue.getFieldValue(getFieldName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(getFieldName()) + " " + IssueQuery.getRuleName(IssueQueryLexer.Is) + " " + IssueQuery.quote(String.valueOf(value));
|
||||
|
||||
@ -11,7 +11,7 @@ import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
@ -30,23 +30,18 @@ public class BuildFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user) {
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder) {
|
||||
return builder.and(
|
||||
builder.equal(field.getParent().get(IssueQueryConstants.ATTR_PROJECT), build.getProject()),
|
||||
builder.equal(field.get(IssueField.ATTR_ORDINAL), build.getNumber()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
Object fieldValue = issue.getFieldValue(getFieldName());
|
||||
return issue.getProject().equals(build.getProject()) && Objects.equals(fieldValue, build.getNumber());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(getFieldName()) + " "
|
||||
|
||||
@ -15,8 +15,8 @@ import io.onedev.server.OneDev;
|
||||
import io.onedev.server.entitymanager.SettingManager;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.model.support.administration.GlobalIssueSetting;
|
||||
|
||||
import io.onedev.server.util.ValueSetEdit;
|
||||
import io.onedev.server.util.inputspec.choiceinput.choiceprovider.SpecifiedChoices;
|
||||
import io.onedev.server.web.component.issue.workflowreconcile.UndefinedFieldValue;
|
||||
@ -42,7 +42,7 @@ public class ChoiceFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user) {
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder) {
|
||||
if (allowMultiple) {
|
||||
return builder.equal(field.get(IssueField.ATTR_VALUE), value);
|
||||
} else {
|
||||
@ -57,7 +57,7 @@ public class ChoiceFieldCriteria extends FieldCriteria {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
Object fieldValue = issue.getFieldValue(getFieldName());
|
||||
if (allowMultiple) {
|
||||
return ((List<String>)fieldValue).contains(value);
|
||||
@ -71,11 +71,6 @@ public class ChoiceFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(getFieldName()) + " " + IssueQuery.getRuleName(operator) + " " + IssueQuery.quote(value);
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
public class CommentCountCriteria extends IssueCriteria {
|
||||
@ -23,7 +23,7 @@ public class CommentCountCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Path<Integer> attribute = root.get(IssueQueryConstants.ATTR_COMMENT_COUNT);
|
||||
if (operator == IssueQueryLexer.Is)
|
||||
return builder.equal(attribute, value);
|
||||
@ -34,7 +34,7 @@ public class CommentCountCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
if (operator == IssueQueryLexer.Is)
|
||||
return issue.getCommentCount() == value;
|
||||
else if (operator == IssueQueryLexer.IsGreaterThan)
|
||||
@ -43,11 +43,6 @@ public class CommentCountCriteria extends IssueCriteria {
|
||||
return issue.getCommentCount() < value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(IssueQueryConstants.FIELD_COMMENT_COUNT) + " "
|
||||
|
||||
@ -9,7 +9,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueComment;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
public class CommentCriteria extends IssueCriteria {
|
||||
@ -23,14 +23,14 @@ public class CommentCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
From<?, ?> join = root.join(IssueQueryConstants.ATTR_COMMENTS, JoinType.LEFT);
|
||||
Path<String> attribute = join.get(IssueComment.PATH_CONTENT);
|
||||
return builder.like(builder.lower(attribute), "%" + value.toLowerCase() + "%");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
for (IssueComment comment: issue.getComments()) {
|
||||
if (comment.getContent().toLowerCase().contains(value.toLowerCase()))
|
||||
return true;
|
||||
@ -38,11 +38,6 @@ public class CommentCriteria extends IssueCriteria {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(IssueQueryConstants.FIELD_COMMENT) + " "
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Predicate;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
|
||||
public class DateFieldCriteria extends FieldCriteria {
|
||||
@ -29,7 +29,7 @@ public class DateFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user) {
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder) {
|
||||
if (operator == IssueQueryLexer.IsBefore)
|
||||
return builder.lessThan(field.get(IssueField.ATTR_ORDINAL), date.getTime());
|
||||
else
|
||||
@ -37,7 +37,7 @@ public class DateFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
Date fieldValue = (Date) issue.getFieldValue(getFieldName());
|
||||
if (operator == IssueQueryLexer.IsBefore)
|
||||
return fieldValue != null && fieldValue.before(date);
|
||||
@ -45,11 +45,6 @@ public class DateFieldCriteria extends FieldCriteria {
|
||||
return fieldValue != null && fieldValue.after(date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(getFieldName()) + " " + IssueQuery.getRuleName(operator)
|
||||
|
||||
@ -7,7 +7,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
public class DescriptionCriteria extends IssueCriteria {
|
||||
@ -21,22 +21,17 @@ public class DescriptionCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Expression<String> attribute = root.get(IssueQueryConstants.ATTR_DESCRIPTION);
|
||||
return builder.like(builder.lower(attribute), "%" + value.toLowerCase().replace('*', '%') + "%");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
String description = issue.getDescription();
|
||||
return description != null && WildcardUtils.matchString("*" + value.toLowerCase() + "*", description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(IssueQueryConstants.FIELD_DESCRIPTION) + " "
|
||||
|
||||
@ -14,8 +14,8 @@ import io.onedev.server.OneDev;
|
||||
import io.onedev.server.entitymanager.SettingManager;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.model.support.administration.GlobalIssueSetting;
|
||||
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
public abstract class FieldCriteria extends IssueCriteria {
|
||||
@ -33,13 +33,13 @@ public abstract class FieldCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public final Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Join<?, ?> join = root.join(IssueQueryConstants.ATTR_FIELDS, JoinType.LEFT);
|
||||
Predicate namePredicate = builder.equal(join.get(IssueField.ATTR_NAME), getFieldName());
|
||||
return builder.and(namePredicate, getValuePredicate(join, builder, user));
|
||||
return builder.and(namePredicate, getValuePredicate(join, builder));
|
||||
}
|
||||
|
||||
protected abstract Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user);
|
||||
protected abstract Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder);
|
||||
|
||||
@Override
|
||||
public Collection<String> getUndefinedFields() {
|
||||
|
||||
@ -10,6 +10,7 @@ import javax.persistence.criteria.Join;
|
||||
import javax.persistence.criteria.Path;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
|
||||
import io.onedev.server.OneException;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
@ -29,15 +30,15 @@ public class FieldOperatorCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user) {
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder) {
|
||||
Path<?> attribute = field.get(IssueField.ATTR_VALUE);
|
||||
if (operator == IssueQueryLexer.IsEmpty) {
|
||||
return builder.isNull(attribute);
|
||||
} else if (operator == IssueQueryLexer.IsMe) {
|
||||
if (user != null)
|
||||
return builder.equal(attribute, user.getName());
|
||||
if (User.get() != null)
|
||||
return builder.equal(attribute, User.get().getName());
|
||||
else
|
||||
return builder.disjunction();
|
||||
throw new OneException("Please login to perform this query");
|
||||
} else {
|
||||
Build build = Build.get();
|
||||
if (build != null) {
|
||||
@ -51,21 +52,21 @@ public class FieldOperatorCriteria extends FieldCriteria {
|
||||
return builder.disjunction();
|
||||
}
|
||||
} else {
|
||||
return builder.disjunction();
|
||||
throw new OneException("No build in query context");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
Object fieldValue = issue.getFieldValue(getFieldName());
|
||||
if (operator == IssueQueryLexer.IsEmpty) {
|
||||
return fieldValue == null;
|
||||
} else if (operator == IssueQueryLexer.IsMe) {
|
||||
if (user != null)
|
||||
return Objects.equals(fieldValue, user.getName());
|
||||
if (User.get() != null)
|
||||
return Objects.equals(fieldValue, User.get().getName());
|
||||
else
|
||||
return false;
|
||||
throw new OneException("Please login to perform this query");
|
||||
} else {
|
||||
Build build = Build.get();
|
||||
if (build != null) {
|
||||
@ -77,16 +78,11 @@ public class FieldOperatorCriteria extends FieldCriteria {
|
||||
.anyMatch(it->it.equals(fieldValue));
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
throw new OneException("No build in query context");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return operator == IssueQueryLexer.IsMe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(getFieldName()) + " " + IssueQuery.getRuleName(operator);
|
||||
|
||||
@ -26,7 +26,7 @@ import io.onedev.server.git.GitUtils;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.IssueUtils;
|
||||
import io.onedev.server.util.ProjectAwareCommitId;
|
||||
@ -79,7 +79,7 @@ public class FixedBetweenCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Set<Long> fixedIssueNumbers = new HashSet<>();
|
||||
|
||||
Repository repository = project.getRepository();
|
||||
@ -114,7 +114,7 @@ public class FixedBetweenCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
if (project.equals(issue.getProject())) {
|
||||
Repository repository = issue.getProject().getRepository();
|
||||
ObjectId mergeBaseId = GitUtils.getMergeBase(repository, firstCommitId, secondCommitId);
|
||||
@ -138,11 +138,6 @@ public class FixedBetweenCriteria extends IssueCriteria {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getRuleName(IssueQueryLexer.FixedBetween) + " "
|
||||
|
||||
@ -10,7 +10,7 @@ import javax.persistence.criteria.Root;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
@ -33,7 +33,7 @@ public class FixedInCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Collection<Long> fixedIssueNumbers = build.getFixedIssueNumbers();
|
||||
if (!fixedIssueNumbers.isEmpty()) {
|
||||
return builder.and(
|
||||
@ -45,16 +45,11 @@ public class FixedInCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
return issue.getProject().equals(build.getProject())
|
||||
&& build.getFixedIssueNumbers().contains(issue.getNumber());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.getRuleName(IssueQueryLexer.FixedInBuild) + " " + IssueQuery.quote(value);
|
||||
|
||||
@ -4,35 +4,29 @@ import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.OneException;
|
||||
import io.onedev.server.model.Build;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
|
||||
public class FixedInCurrentBuildCriteria extends IssueCriteria {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
Build build = Build.get();
|
||||
if (build != null)
|
||||
return new FixedInCriteria(build).getPredicate(root, builder, user);
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
if (Build.get() != null)
|
||||
return new FixedInCriteria(Build.get()).getPredicate(root, builder);
|
||||
else
|
||||
return builder.disjunction();
|
||||
throw new OneException("No build in query context");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
Build build = Build.get();
|
||||
if (build != null)
|
||||
return new FixedInCriteria(build).matches(issue, user);
|
||||
public boolean matches(Issue issue) {
|
||||
if (Build.get() != null)
|
||||
return new FixedInCriteria(Build.get()).matches(issue);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
throw new OneException("No build in query context");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -10,7 +10,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
@ -29,23 +29,18 @@ public class IssueFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user) {
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder) {
|
||||
return builder.and(
|
||||
builder.equal(field.getParent().get(IssueQueryConstants.ATTR_PROJECT), issue.getProject()),
|
||||
builder.equal(field.get(IssueField.ATTR_ORDINAL), issue.getNumber()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
Object fieldValue = issue.getFieldValue(getFieldName());
|
||||
return issue.getProject().equals(this.issue.getProject()) && Objects.equals(fieldValue, this.issue.getNumber());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(getFieldName()) + " "
|
||||
|
||||
@ -35,7 +35,6 @@ import io.onedev.server.issue.fieldspec.TextField;
|
||||
import io.onedev.server.issue.fieldspec.UserChoiceField;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.model.support.administration.GlobalIssueSetting;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.search.entity.EntitySort;
|
||||
@ -404,13 +403,8 @@ public class IssueQuery extends EntityQuery<Issue> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return criteria != null && criteria.needsLogin();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
return criteria == null || criteria.matches(issue, user);
|
||||
public boolean matches(Issue issue) {
|
||||
return criteria == null || criteria.matches(issue);
|
||||
}
|
||||
|
||||
public static String getRuleName(int rule) {
|
||||
|
||||
@ -11,7 +11,7 @@ import javax.persistence.criteria.Root;
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.Milestone;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
public class MilestoneCriteria extends IssueCriteria {
|
||||
@ -25,25 +25,20 @@ public class MilestoneCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Path<String> attribute = root.join(IssueQueryConstants.ATTR_MILESTONE, JoinType.LEFT).get(Milestone.ATTR_NAME);
|
||||
String normalized = milestoneName.toLowerCase().replace("*", "%");
|
||||
return builder.like(builder.lower(attribute), normalized);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
if (issue.getMilestone() != null)
|
||||
return WildcardUtils.matchString(milestoneName.toLowerCase(), issue.getMilestone().getName().toLowerCase());
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(IssueQueryConstants.FIELD_MILESTONE) + " "
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
|
||||
public class MilestoneIsEmptyCriteria extends IssueCriteria {
|
||||
@ -14,20 +14,15 @@ public class MilestoneIsEmptyCriteria extends IssueCriteria {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
return builder.isNull(root.join(IssueQueryConstants.ATTR_MILESTONE, JoinType.LEFT));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
return issue.getMilestone() == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(IssueQueryConstants.FIELD_MILESTONE) + " "
|
||||
|
||||
@ -7,7 +7,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.NotCriteriaHelper;
|
||||
import io.onedev.server.util.ValueSetEdit;
|
||||
import io.onedev.server.web.component.issue.workflowreconcile.UndefinedFieldValue;
|
||||
@ -23,18 +23,13 @@ public class NotCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
return new NotCriteriaHelper<Issue>(criteria).getPredicate(root, builder, user);
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
return new NotCriteriaHelper<Issue>(criteria).getPredicate(root, builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
return new NotCriteriaHelper<Issue>(criteria).matches(issue, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return new NotCriteriaHelper<Issue>(criteria).needsLogin();
|
||||
public boolean matches(Issue issue) {
|
||||
return new NotCriteriaHelper<Issue>(criteria).matches(issue);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.ProjectScopedNumber;
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
@ -30,7 +30,7 @@ public class NumberCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Path<Long> attribute = root.get(IssueQueryConstants.ATTR_NUMBER);
|
||||
Predicate numberPredicate;
|
||||
|
||||
@ -47,7 +47,7 @@ public class NumberCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
if (issue.getProject().equals(number.getProject())) {
|
||||
if (operator == IssueQueryLexer.Is)
|
||||
return issue.getNumber() == number.getNumber();
|
||||
@ -60,11 +60,6 @@ public class NumberCriteria extends IssueCriteria {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(IssueQueryConstants.FIELD_NUMBER) + " "
|
||||
|
||||
@ -10,7 +10,7 @@ import javax.persistence.criteria.Predicate;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueField;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
|
||||
public class NumericFieldCriteria extends FieldCriteria {
|
||||
|
||||
@ -27,7 +27,7 @@ public class NumericFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder, User user) {
|
||||
protected Predicate getValuePredicate(Join<?, ?> field, CriteriaBuilder builder) {
|
||||
Path<Integer> attribute = field.get(IssueField.ATTR_ORDINAL);
|
||||
if (operator == IssueQueryLexer.Is)
|
||||
return builder.equal(attribute, value);
|
||||
@ -38,7 +38,7 @@ public class NumericFieldCriteria extends FieldCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
Integer fieldValue = (Integer) issue.getFieldValue(getFieldName());
|
||||
if (operator == IssueQueryLexer.Is)
|
||||
return Objects.equals(fieldValue, value);
|
||||
@ -48,11 +48,6 @@ public class NumericFieldCriteria extends FieldCriteria {
|
||||
return fieldValue != null && fieldValue < value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(getFieldName()) + " " + IssueQuery.getRuleName(operator) + " "
|
||||
|
||||
@ -12,7 +12,7 @@ import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.search.entity.OrCriteriaHelper;
|
||||
import io.onedev.server.search.entity.ParensAware;
|
||||
import io.onedev.server.util.ValueSetEdit;
|
||||
@ -29,18 +29,13 @@ public class OrCriteria extends IssueCriteria implements ParensAware {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
return new OrCriteriaHelper<Issue>(criterias).getPredicate(root, builder, user);
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
return new OrCriteriaHelper<Issue>(criterias).getPredicate(root, builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
return new OrCriteriaHelper<Issue>(criterias).matches(issue, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return new OrCriteriaHelper<Issue>(criterias).needsLogin();
|
||||
public boolean matches(Issue issue) {
|
||||
return new OrCriteriaHelper<Issue>(criterias).matches(issue);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -8,7 +8,7 @@ import javax.persistence.criteria.Root;
|
||||
|
||||
import io.onedev.commons.utils.match.WildcardUtils;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.User;
|
||||
|
||||
import io.onedev.server.util.query.IssueQueryConstants;
|
||||
import io.onedev.server.util.query.ProjectQueryConstants;
|
||||
|
||||
@ -23,7 +23,7 @@ public class ProjectCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder, User user) {
|
||||
public Predicate getPredicate(Root<Issue> root, CriteriaBuilder builder) {
|
||||
Path<String> attribute = root
|
||||
.join(IssueQueryConstants.ATTR_PROJECT, JoinType.INNER)
|
||||
.get(ProjectQueryConstants.ATTR_NAME);
|
||||
@ -32,16 +32,11 @@ public class ProjectCriteria extends IssueCriteria {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Issue issue, User user) {
|
||||
public boolean matches(Issue issue) {
|
||||
return WildcardUtils.matchString(projectName.toLowerCase(),
|
||||
issue.getProject().getName().toLowerCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean needsLogin() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return IssueQuery.quote(IssueQueryConstants.FIELD_PROJECT) + " "
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user