mirror of
https://github.com/theonedev/onedev.git
synced 2026-02-01 17:37:19 +00:00
Refactoring various model managers
This commit is contained in:
parent
f99fc59ded
commit
a811bb52cc
@ -81,7 +81,7 @@ public class CloseMilestoneStep extends ServerSideStep {
|
||||
|
||||
if (build.canCloseMilestone(getAccessTokenSecret(), milestoneName)) {
|
||||
milestone.setClosed(true);
|
||||
milestoneManager.save(milestone);
|
||||
milestoneManager.createOrUpdate(milestone);
|
||||
} else {
|
||||
throw new ExplicitException("This build is not authorized to close milestone '" + milestoneName + "'");
|
||||
}
|
||||
|
||||
@ -8,6 +8,8 @@ import io.onedev.server.model.AgentAttribute;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface AgentAttributeManager extends EntityManager<AgentAttribute> {
|
||||
|
||||
void create(AgentAttribute attribute);
|
||||
|
||||
List<String> getAttributeNames();
|
||||
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.eclipse.jetty.websocket.api.Session;
|
||||
|
||||
import io.onedev.agent.AgentData;
|
||||
import io.onedev.server.model.Agent;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
import io.onedev.server.search.entity.EntityQuery;
|
||||
import io.onedev.server.util.criteria.Criteria;
|
||||
import org.eclipse.jetty.websocket.api.Session;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface AgentManager extends EntityManager<Agent> {
|
||||
|
||||
void createOrUpdate(Agent agent);
|
||||
|
||||
String getAgentVersion();
|
||||
|
||||
Collection<String> getAgentLibs();
|
||||
|
||||
@ -9,6 +9,8 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface AgentTokenManager extends EntityManager<AgentToken> {
|
||||
|
||||
void create(AgentToken token);
|
||||
|
||||
@Nullable
|
||||
AgentToken find(String value);
|
||||
|
||||
|
||||
@ -5,4 +5,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface BuildDependenceManager extends EntityManager<BuildDependence> {
|
||||
|
||||
void create(BuildDependence dependence);
|
||||
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ import io.onedev.server.util.StatusInfo;
|
||||
import io.onedev.server.util.criteria.Criteria;
|
||||
|
||||
public interface BuildManager extends EntityManager<Build> {
|
||||
|
||||
|
||||
@Nullable
|
||||
Build find(Project project, long number);
|
||||
|
||||
@ -55,6 +55,8 @@ public interface BuildManager extends EntityManager<Build> {
|
||||
Map<ObjectId, Map<String, Collection<StatusInfo>>> queryStatus(Project project, Collection<ObjectId> commitIds);
|
||||
|
||||
void create(Build build);
|
||||
|
||||
void update(Build build);
|
||||
|
||||
Map<Long, Long> queryUnfinished();
|
||||
|
||||
|
||||
@ -11,8 +11,10 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface BuildParamManager extends EntityManager<BuildParam> {
|
||||
|
||||
void create(BuildParam param);
|
||||
|
||||
void deleteParams(Build build);
|
||||
|
||||
Collection<String> getParamNames(@Nullable Project project);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -8,5 +8,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
public interface BuildQueryPersonalizationManager extends EntityManager<BuildQueryPersonalization> {
|
||||
|
||||
BuildQueryPersonalization find(Project project, User user);
|
||||
|
||||
|
||||
void createOrUpdate(BuildQueryPersonalization buildQueryPersonalization);
|
||||
}
|
||||
|
||||
@ -33,5 +33,6 @@ public interface CodeCommentManager extends EntityManager<CodeComment> {
|
||||
|
||||
@Nullable
|
||||
CodeComment findByUUID(String uuid);
|
||||
|
||||
|
||||
void createOrUpdate(CodeComment comment);
|
||||
}
|
||||
@ -1,10 +1,12 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import io.onedev.server.model.*;
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.CodeCommentMention;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface CodeCommentMentionManager extends EntityManager<CodeCommentMention> {
|
||||
|
||||
void mention(CodeComment comment, User user);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -8,5 +8,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
public interface CodeCommentQueryPersonalizationManager extends EntityManager<CodeCommentQueryPersonalization> {
|
||||
|
||||
CodeCommentQueryPersonalization find(Project project, User user);
|
||||
|
||||
|
||||
void createOrUpdate(CodeCommentQueryPersonalization codeCommentQueryPersonalization);
|
||||
}
|
||||
|
||||
@ -5,6 +5,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface CodeCommentReplyManager extends EntityManager<CodeCommentReply> {
|
||||
|
||||
void save(CodeCommentReply reply);
|
||||
void createOrUpdate(CodeCommentReply reply);
|
||||
|
||||
}
|
||||
|
||||
@ -8,5 +8,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
public interface CommitQueryPersonalizationManager extends EntityManager<CommitQueryPersonalization> {
|
||||
|
||||
CommitQueryPersonalization find(Project project, User user);
|
||||
|
||||
|
||||
void createOrUpdate(CommitQueryPersonalization commitQueryPersonalization);
|
||||
}
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import io.onedev.server.model.Dashboard;
|
||||
import io.onedev.server.model.DashboardGroupShare;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface DashboardGroupShareManager extends EntityManager<DashboardGroupShare> {
|
||||
|
||||
void syncShares(Dashboard dashboard, Collection<String> groupNames);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import io.onedev.server.model.Dashboard;
|
||||
import io.onedev.server.model.DashboardUserShare;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface DashboardUserShareManager extends EntityManager<DashboardUserShare> {
|
||||
|
||||
void syncShares(Dashboard dashboard, Collection<String> userNames);
|
||||
|
||||
|
||||
}
|
||||
@ -37,4 +37,6 @@ public interface EmailAddressManager extends EntityManager<EmailAddress> {
|
||||
void sendVerificationEmail(EmailAddress emailAddress);
|
||||
|
||||
EmailAddressCache cloneCache();
|
||||
|
||||
void createOrUpdate(EmailAddress address);
|
||||
}
|
||||
@ -6,5 +6,7 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
public interface GitLfsLockManager extends EntityManager<GitLfsLock> {
|
||||
|
||||
GitLfsLock find(String path);
|
||||
|
||||
void create(GitLfsLock lock);
|
||||
|
||||
}
|
||||
|
||||
@ -10,5 +10,6 @@ public interface GpgKeyManager extends EntityManager<GpgKey> {
|
||||
|
||||
@Nullable
|
||||
SignatureVerificationKey findSignatureVerificationKey(long keyId);
|
||||
|
||||
|
||||
void create(GpgKey gpgKey);
|
||||
}
|
||||
|
||||
@ -9,5 +9,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
public interface GroupAuthorizationManager extends EntityManager<GroupAuthorization> {
|
||||
|
||||
void syncAuthorizations(Group group, Collection<GroupAuthorization> authorizations);
|
||||
|
||||
|
||||
void createOrUpdate(GroupAuthorization authorization);
|
||||
}
|
||||
|
||||
@ -9,4 +9,5 @@ public interface IssueAuthorizationManager extends EntityManager<IssueAuthorizat
|
||||
|
||||
void authorize(Issue issue, User user);
|
||||
|
||||
void createOrUpdate(IssueAuthorization authorization);
|
||||
}
|
||||
@ -11,8 +11,10 @@ public interface IssueFieldManager extends EntityManager<IssueField> {
|
||||
void saveFields(Issue issue);
|
||||
|
||||
void onRenameUser(String oldName, String newName);
|
||||
|
||||
void onRenameGroup(String oldName, String newName);
|
||||
|
||||
void create(IssueField entity);
|
||||
|
||||
void onRenameGroup(String oldName, String newName);
|
||||
|
||||
void populateFields(Collection<Issue> issues);
|
||||
|
||||
|
||||
@ -1,17 +1,19 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueLink;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface IssueLinkManager extends EntityManager<IssueLink> {
|
||||
|
||||
void syncLinks(LinkSpec spec, Issue issue, Collection<Issue> linkedIssues, boolean opposite);
|
||||
|
||||
void populateLinks(Collection<Issue> issues);
|
||||
|
||||
void create(IssueLink link);
|
||||
|
||||
void populateLinks(Collection<Issue> issues);
|
||||
|
||||
void loadDeepLinks(Issue issue);
|
||||
|
||||
|
||||
@ -2,12 +2,11 @@ package io.onedev.server.entitymanager;
|
||||
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueMention;
|
||||
import io.onedev.server.model.IssueVote;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface IssueMentionManager extends EntityManager<IssueMention> {
|
||||
|
||||
void mention(Issue issue, User user);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import io.onedev.server.model.IssueQueryPersonalization;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.model.IssueQueryPersonalization;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface IssueQueryPersonalizationManager extends EntityManager<IssueQueryPersonalization> {
|
||||
|
||||
IssueQueryPersonalization find(Project project, User user);
|
||||
|
||||
|
||||
void createOrUpdate(IssueQueryPersonalization personalization);
|
||||
}
|
||||
|
||||
@ -10,5 +10,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
public interface IssueScheduleManager extends EntityManager<IssueSchedule> {
|
||||
|
||||
void syncMilestones(Issue issue, Collection<Milestone> milestones);
|
||||
|
||||
|
||||
void create(IssueSchedule schedule);
|
||||
}
|
||||
@ -5,4 +5,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface IssueVoteManager extends EntityManager<IssueVote> {
|
||||
|
||||
void create(IssueVote vote);
|
||||
|
||||
}
|
||||
|
||||
@ -13,5 +13,6 @@ public interface IssueWatchManager extends EntityManager<IssueWatch> {
|
||||
IssueWatch find(Issue issue, User user);
|
||||
|
||||
void watch(Issue issue, User user, boolean watching);
|
||||
|
||||
|
||||
void createOrUpdate(IssueWatch watch);
|
||||
}
|
||||
|
||||
@ -1,14 +1,15 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import io.onedev.server.model.LinkAuthorization;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.model.Role;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface LinkAuthorizationManager extends EntityManager<LinkAuthorization> {
|
||||
|
||||
void syncAuthorizations(Role role, Collection<LinkSpec> authorizedLinks);
|
||||
|
||||
|
||||
void create(LinkAuthorization authorization);
|
||||
}
|
||||
|
||||
@ -16,5 +16,7 @@ public interface LinkSpecManager extends EntityManager<LinkSpec> {
|
||||
|
||||
void updateOrders(List<LinkSpec> links);
|
||||
|
||||
void save(LinkSpec spec, @Nullable String oldName, @Nullable String oldOppositeName);
|
||||
void update(LinkSpec spec, @Nullable String oldName, @Nullable String oldOppositeName);
|
||||
|
||||
void create(LinkSpec link);
|
||||
}
|
||||
|
||||
@ -1,18 +1,20 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import io.onedev.server.model.Membership;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface MembershipManager extends EntityManager<Membership> {
|
||||
|
||||
void delete(Collection<Membership> memberships);
|
||||
|
||||
void syncMemberships(User user, Collection<String> groupNames);
|
||||
|
||||
List<User> queryMembers(User user);
|
||||
|
||||
void create(Membership membership);
|
||||
|
||||
List<User> queryMembers(User user);
|
||||
|
||||
}
|
||||
|
||||
@ -17,4 +17,6 @@ public interface MilestoneManager extends EntityManager<Milestone> {
|
||||
|
||||
@Nullable
|
||||
Milestone findNextOpen(Project project);
|
||||
|
||||
void createOrUpdate(Milestone milestone);
|
||||
}
|
||||
@ -18,5 +18,6 @@ public interface PendingSuggestionApplyManager extends EntityManager<PendingSugg
|
||||
void discard(@Nullable User user, PullRequest request);
|
||||
|
||||
List<PendingSuggestionApply> query(User user, PullRequest request);
|
||||
|
||||
|
||||
void create(PendingSuggestionApply pendingApply);
|
||||
}
|
||||
@ -5,4 +5,6 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface ProjectDynamicsManager extends EntityManager<ProjectDynamics> {
|
||||
|
||||
void create(ProjectDynamics dynamics);
|
||||
|
||||
}
|
||||
|
||||
@ -47,6 +47,8 @@ public interface ProjectManager extends EntityManager<Project> {
|
||||
|
||||
void create(Project project);
|
||||
|
||||
void update(Project project);
|
||||
|
||||
void onDeleteBranch(Project project, String branchName);
|
||||
|
||||
void clone(Project project, String repositoryUrl);
|
||||
|
||||
@ -4,5 +4,6 @@ import io.onedev.server.model.PullRequestAssignment;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface PullRequestAssignmentManager extends EntityManager<PullRequestAssignment> {
|
||||
|
||||
|
||||
void create(PullRequestAssignment assignment);
|
||||
}
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import io.onedev.server.model.PullRequestComment;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface PullRequestCommentManager extends EntityManager<PullRequestComment> {
|
||||
|
||||
void save(PullRequestComment comment, Collection<String> notifiedEmailAddresses);
|
||||
void createOrUpdate(PullRequestComment comment);
|
||||
|
||||
void createOrUpdate(PullRequestComment comment, Collection<String> notifiedEmailAddresses);
|
||||
|
||||
}
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
package io.onedev.server.entitymanager;
|
||||
|
||||
import io.onedev.server.model.*;
|
||||
import io.onedev.server.model.PullRequest;
|
||||
import io.onedev.server.model.PullRequestMention;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.EntityManager;
|
||||
|
||||
public interface PullRequestMentionManager extends EntityManager<PullRequestMention> {
|
||||
|
||||
void mention(PullRequest request, User user);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -8,5 +8,7 @@ import io.onedev.server.persistence.dao.EntityManager;
|
||||
public interface PullRequestQueryPersonalizationManager extends EntityManager<PullRequestQueryPersonalization> {
|
||||
|
||||
PullRequestQueryPersonalization find(Project project, User user);
|
||||
|
||||
void createOrUpdate(PullRequestQueryPersonalization personalization);
|
||||
|
||||
}
|
||||
|
||||
@ -13,5 +13,6 @@ public interface PullRequestReviewManager extends EntityManager<PullRequestRevie
|
||||
void review(PullRequest request, boolean approved, @Nullable String note);
|
||||
|
||||
void populateReviews(Collection<PullRequest> requests);
|
||||
|
||||
|
||||
void createOrUpdate(PullRequestReview review);
|
||||
}
|
||||
|
||||
@ -11,5 +11,7 @@ public interface PullRequestUpdateManager extends EntityManager<PullRequestUpdat
|
||||
void checkUpdate(PullRequest request);
|
||||
|
||||
List<PullRequestUpdate> queryAfter(Long projectId, Long afterUpdateId, int count);
|
||||
|
||||
void create(PullRequestUpdate update);
|
||||
|
||||
}
|
||||
|
||||
@ -13,4 +13,6 @@ public interface PullRequestWatchManager extends EntityManager<PullRequestWatch>
|
||||
PullRequestWatch find(PullRequest request, User user);
|
||||
|
||||
void watch(PullRequest request, User user, boolean watching);
|
||||
|
||||
void createOrUpdate(PullRequestWatch watch);
|
||||
}
|
||||
|
||||
@ -14,4 +14,7 @@ public interface SshKeyManager extends EntityManager<SshKey> {
|
||||
SshKey findByDigest(String digest);
|
||||
|
||||
void syncSshKeys(User user, Collection<String> sshKeys);
|
||||
|
||||
void create(SshKey sshKey);
|
||||
|
||||
}
|
||||
|
||||
@ -12,5 +12,6 @@ public interface UserAuthorizationManager extends EntityManager<UserAuthorizatio
|
||||
void syncAuthorizations(User user, Collection<UserAuthorization> authorizations);
|
||||
|
||||
void syncAuthorizations(Project project, Collection<UserAuthorization> authorizations);
|
||||
|
||||
|
||||
void createOrUpdate(UserAuthorization authorization);
|
||||
}
|
||||
@ -20,5 +20,6 @@ public interface UserInvitationManager extends EntityManager<UserInvitation> {
|
||||
int count(@Nullable String term);
|
||||
|
||||
List<UserInvitation> query(@Nullable String term, int firstResult, int maxResults);
|
||||
|
||||
|
||||
void create(UserInvitation invitation);
|
||||
}
|
||||
|
||||
@ -1,48 +1,47 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import io.onedev.server.entitymanager.LabelManager;
|
||||
import io.onedev.server.model.AbstractEntity;
|
||||
import io.onedev.server.model.LabelSpec;
|
||||
import io.onedev.server.model.support.EntityLabel;
|
||||
import io.onedev.server.model.support.LabelSupport;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
public abstract class BaseEntityLabelManager<T extends EntityLabel> extends BaseEntityManager<T> {
|
||||
|
||||
private final LabelManager labelManager;
|
||||
|
||||
@Inject
|
||||
public BaseEntityLabelManager(Dao dao, LabelManager labelManager) {
|
||||
super(dao);
|
||||
this.labelManager = labelManager;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void sync(LabelSupport<T> entity, Collection<String> labelNames) {
|
||||
var labelsToRemove = new HashSet<>();
|
||||
entity.getLabels().stream()
|
||||
.filter(it->!labelNames.contains(it.getSpec().getName()))
|
||||
.forEach(it-> {delete(it); labelsToRemove.add(it);});
|
||||
entity.getLabels().removeAll(labelsToRemove);
|
||||
|
||||
Collection<String> existingLabelNames = entity.getLabels().stream()
|
||||
.map(it->it.getSpec().getName())
|
||||
.collect(Collectors.toSet());
|
||||
labelNames.stream().filter(it->!existingLabelNames.contains(it)).forEach(it-> {
|
||||
var label = newEntityLabel((AbstractEntity) entity, labelManager.find(it));
|
||||
save(label);
|
||||
entity.getLabels().add(label);
|
||||
});
|
||||
}
|
||||
|
||||
protected abstract T newEntityLabel(AbstractEntity entity, LabelSpec spec);
|
||||
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import io.onedev.server.entitymanager.LabelManager;
|
||||
import io.onedev.server.model.AbstractEntity;
|
||||
import io.onedev.server.model.LabelSpec;
|
||||
import io.onedev.server.model.support.EntityLabel;
|
||||
import io.onedev.server.model.support.LabelSupport;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public abstract class BaseEntityLabelManager<T extends EntityLabel> extends BaseEntityManager<T> {
|
||||
|
||||
private final LabelManager labelManager;
|
||||
|
||||
@Inject
|
||||
public BaseEntityLabelManager(Dao dao, LabelManager labelManager) {
|
||||
super(dao);
|
||||
this.labelManager = labelManager;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void sync(LabelSupport<T> entity, Collection<String> labelNames) {
|
||||
var labelsToRemove = new HashSet<>();
|
||||
entity.getLabels().stream()
|
||||
.filter(it->!labelNames.contains(it.getSpec().getName()))
|
||||
.forEach(it-> {delete(it); labelsToRemove.add(it);});
|
||||
entity.getLabels().removeAll(labelsToRemove);
|
||||
|
||||
Collection<String> existingLabelNames = entity.getLabels().stream()
|
||||
.map(it->it.getSpec().getName())
|
||||
.collect(Collectors.toSet());
|
||||
labelNames.stream().filter(it->!existingLabelNames.contains(it)).forEach(it-> {
|
||||
var label = newEntityLabel((AbstractEntity) entity, labelManager.find(it));
|
||||
dao.persist(label);
|
||||
entity.getLabels().add(label);
|
||||
});
|
||||
}
|
||||
|
||||
protected abstract T newEntityLabel(AbstractEntity entity, LabelSpec spec);
|
||||
|
||||
}
|
||||
@ -59,8 +59,8 @@ public class DefaultAgentAttributeManager extends BaseEntityManager<AgentAttribu
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(AgentAttribute attribute) {
|
||||
super.save(attribute);
|
||||
public void create(AgentAttribute attribute) {
|
||||
dao.persist(attribute);
|
||||
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
|
||||
@ -101,7 +101,7 @@ public class DefaultAgentAttributeManager extends BaseEntityManager<AgentAttribu
|
||||
attribute.setAgent(agent);
|
||||
attribute.setName(entry.getKey());
|
||||
attribute.setValue(entry.getValue());
|
||||
save(attribute);
|
||||
create(attribute);
|
||||
agent.getAttributes().add(attribute);
|
||||
}
|
||||
}
|
||||
|
||||
@ -192,14 +192,14 @@ public class DefaultAgentManager extends BaseEntityManager<Agent> implements Age
|
||||
agent.setCpus(data.getCpus());
|
||||
agent.setTemporal(data.isTemporal());
|
||||
agent.setIpAddress(data.getIpAddress());
|
||||
save(agent);
|
||||
createOrUpdate(agent);
|
||||
|
||||
for (Map.Entry<String, String> entry: data.getAttributes().entrySet()) {
|
||||
AgentAttribute attribute = new AgentAttribute();
|
||||
attribute.setAgent(agent);
|
||||
attribute.setName(entry.getKey());
|
||||
attribute.setValue(entry.getValue());
|
||||
attributeManager.save(attribute);
|
||||
attributeManager.create(attribute);
|
||||
agent.getAttributes().add(attribute);
|
||||
}
|
||||
} else if (agentSessions.containsKey(agent.getId())) {
|
||||
@ -211,7 +211,7 @@ public class DefaultAgentManager extends BaseEntityManager<Agent> implements Age
|
||||
agent.setIpAddress(data.getIpAddress());
|
||||
agent.setCpus(data.getCpus());
|
||||
agent.setTemporal(data.isTemporal());
|
||||
save(agent);
|
||||
createOrUpdate(agent);
|
||||
attributeManager.syncAttributes(agent, data.getAttributes());
|
||||
}
|
||||
|
||||
@ -245,21 +245,6 @@ public class DefaultAgentManager extends BaseEntityManager<Agent> implements Age
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(Agent agent) {
|
||||
super.save(agent);
|
||||
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
osNames.put(agent.getOsName(), agent.getOsName());
|
||||
osArchs.put(agent.getOsArch(), agent.getOsArch());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private void removeReferences(Agent agent) {
|
||||
Query<?> query = getSession().createQuery("update Build set agent=null where agent=:agent");
|
||||
query.setParameter("agent", agent);
|
||||
@ -401,18 +386,33 @@ public class DefaultAgentManager extends BaseEntityManager<Agent> implements Age
|
||||
dao.remove(agent.getToken());
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void createOrUpdate(Agent agent) {
|
||||
dao.persist(agent);
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
osNames.put(agent.getOsName(), agent.getOsName());
|
||||
osArchs.put(agent.getOsArch(), agent.getOsArch());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void pause(Agent agent) {
|
||||
agent.setPaused(true);
|
||||
save(agent);
|
||||
createOrUpdate(agent);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void resume(Agent agent) {
|
||||
agent.setPaused(false);
|
||||
save(agent);
|
||||
createOrUpdate(agent);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -23,6 +23,11 @@ public class DefaultAgentTokenManager extends BaseEntityManager<AgentToken> impl
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create(AgentToken token) {
|
||||
dao.persist(token);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AgentToken find(String value) {
|
||||
EntityCriteria<AgentToken> criteria = newCriteria();
|
||||
|
||||
@ -5,6 +5,7 @@ import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.entitymanager.BuildDependenceManager;
|
||||
import io.onedev.server.model.BuildDependence;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
@ -16,4 +17,10 @@ public class DefaultBuildDependenceManager extends BaseEntityManager<BuildDepend
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(BuildDependence dependence) {
|
||||
dao.persist(dependence);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -184,9 +184,12 @@ public class DefaultBuildManager extends BaseEntityManager<Build> implements Bui
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(Build build) {
|
||||
super.save(build);
|
||||
|
||||
public void update(Build build) {
|
||||
dao.persist(build);
|
||||
updateCacheAfterCommit(build);
|
||||
}
|
||||
|
||||
private void updateCacheAfterCommit(Build build) {
|
||||
BuildFacade facade = build.getFacade();
|
||||
String jobName = build.getJobName();
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
@ -196,7 +199,7 @@ public class DefaultBuildManager extends BaseEntityManager<Build> implements Bui
|
||||
cache.put(facade.getId(), facade);
|
||||
populateJobNames(facade.getProjectId(), jobName);
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ -429,11 +432,14 @@ public class DefaultBuildManager extends BaseEntityManager<Build> implements Bui
|
||||
Preconditions.checkArgument(build.isNew());
|
||||
build.setNumberScope(build.getProject().getForkRoot());
|
||||
build.setNumber(numberGenerator.getNextSequence(build.getNumberScope()));
|
||||
save(build);
|
||||
|
||||
dao.persist(build);
|
||||
updateCacheAfterCommit(build);
|
||||
|
||||
for (BuildParam param: build.getParams())
|
||||
buildParamManager.save(param);
|
||||
buildParamManager.create(param);
|
||||
for (BuildDependence dependence: build.getDependencies())
|
||||
buildDependenceManager.save(dependence);
|
||||
buildDependenceManager.create(dependence);
|
||||
}
|
||||
|
||||
private Collection<Predicate> getPredicates(@Nullable Project project, From<Build, Build> root, CriteriaBuilder builder) {
|
||||
|
||||
@ -1,19 +1,5 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.query.Query;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import io.onedev.server.cluster.ClusterManager;
|
||||
import io.onedev.server.entitymanager.BuildParamManager;
|
||||
import io.onedev.server.event.Listen;
|
||||
@ -27,6 +13,14 @@ import io.onedev.server.persistence.annotation.Sessional;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import org.hibernate.query.Query;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.*;
|
||||
|
||||
@Singleton
|
||||
public class DefaultBuildParamManager extends BaseEntityManager<BuildParam> implements BuildParamManager {
|
||||
@ -78,8 +72,8 @@ public class DefaultBuildParamManager extends BaseEntityManager<BuildParam> impl
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(BuildParam param) {
|
||||
super.save(param);
|
||||
public void create(BuildParam param) {
|
||||
dao.persist(param);
|
||||
|
||||
Long projectId = param.getBuild().getProject().getId();
|
||||
String paramName = param.getName();
|
||||
@ -111,7 +105,7 @@ public class DefaultBuildParamManager extends BaseEntityManager<BuildParam> impl
|
||||
}
|
||||
return paramNames;
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Listen
|
||||
public void on(EntityRemoved event) {
|
||||
|
||||
@ -40,7 +40,7 @@ public class DefaultBuildQueryPersonalizationManager extends BaseEntityManager<B
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(BuildQueryPersonalization personalization) {
|
||||
public void createOrUpdate(BuildQueryPersonalization personalization) {
|
||||
Collection<String> retainNames = new HashSet<>();
|
||||
retainNames.addAll(personalization.getQueries().stream()
|
||||
.map(it->NamedQuery.PERSONAL_NAME_PREFIX+it.getName()).collect(Collectors.toSet()));
|
||||
@ -52,7 +52,7 @@ public class DefaultBuildQueryPersonalizationManager extends BaseEntityManager<B
|
||||
if (!personalization.isNew())
|
||||
delete(personalization);
|
||||
} else {
|
||||
super.save(personalization);
|
||||
dao.persist(personalization);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -89,7 +89,7 @@ public class DefaultCodeCommentManager extends BaseEntityManager<CodeComment> im
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(CodeComment comment) {
|
||||
public void createOrUpdate(CodeComment comment) {
|
||||
if (comment.isNew()) {
|
||||
LastActivity lastActivity = new LastActivity();
|
||||
lastActivity.setUser(comment.getUser());
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import io.onedev.server.entitymanager.CodeCommentMentionManager;
|
||||
import io.onedev.server.entitymanager.IssueMentionManager;
|
||||
import io.onedev.server.model.*;
|
||||
import io.onedev.server.model.CodeComment;
|
||||
import io.onedev.server.model.CodeCommentMention;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
@ -24,8 +25,8 @@ public class DefaultCodeCommentMentionManager extends BaseEntityManager<CodeComm
|
||||
CodeCommentMention mention = new CodeCommentMention();
|
||||
mention.setComment(comment);
|
||||
mention.setUser(user);
|
||||
save(mention);
|
||||
dao.persist(mention);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -35,12 +35,12 @@ public class DefaultCodeCommentQueryPersonalizationManager extends BaseEntityMan
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(CodeCommentQueryPersonalization setting) {
|
||||
public void createOrUpdate(CodeCommentQueryPersonalization setting) {
|
||||
if (setting.getQueries().isEmpty()) {
|
||||
if (!setting.isNew())
|
||||
delete(setting);
|
||||
} else {
|
||||
super.save(setting);
|
||||
dao.persist(setting);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ public class DefaultCodeCommentReplyManager extends BaseEntityManager<CodeCommen
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(CodeCommentReply reply) {
|
||||
public void createOrUpdate(CodeCommentReply reply) {
|
||||
if (reply.isNew()) {
|
||||
dao.persist(reply);
|
||||
|
||||
|
||||
@ -1,14 +1,5 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import io.onedev.server.entitymanager.CommitQueryPersonalizationManager;
|
||||
import io.onedev.server.model.CommitQueryPersonalization;
|
||||
import io.onedev.server.model.Project;
|
||||
@ -19,6 +10,13 @@ import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import io.onedev.server.persistence.dao.EntityCriteria;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Singleton
|
||||
public class DefaultCommitQueryPersonalizationManager extends BaseEntityManager<CommitQueryPersonalization>
|
||||
@ -40,7 +38,7 @@ public class DefaultCommitQueryPersonalizationManager extends BaseEntityManager<
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(CommitQueryPersonalization personalization) {
|
||||
public void createOrUpdate(CommitQueryPersonalization personalization) {
|
||||
Collection<String> retainNames = new HashSet<>();
|
||||
retainNames.addAll(personalization.getQueries().stream()
|
||||
.map(it->NamedQuery.PERSONAL_NAME_PREFIX+it.getName()).collect(Collectors.toSet()));
|
||||
@ -52,7 +50,7 @@ public class DefaultCommitQueryPersonalizationManager extends BaseEntityManager<
|
||||
if (!personalization.isNew())
|
||||
delete(personalization);
|
||||
} else {
|
||||
super.save(personalization);
|
||||
dao.persist(personalization);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -60,9 +60,9 @@ public class DefaultDashboardGroupShareManager extends BaseEntityManager<Dashboa
|
||||
MapDifference<String, DashboardGroupShare> diff = Maps.difference(currentMap, syncMap);
|
||||
|
||||
diff.entriesOnlyOnLeft().values().forEach(share -> delete(share));
|
||||
diff.entriesOnlyOnRight().values().forEach(share -> save(share));
|
||||
diff.entriesOnlyOnRight().values().forEach(share -> dao.persist(share));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<DashboardGroupShare> query() {
|
||||
return query(true);
|
||||
|
||||
@ -70,7 +70,7 @@ public class DefaultDashboardUserShareManager extends BaseEntityManager<Dashboar
|
||||
MapDifference<String, DashboardUserShare> diff = Maps.difference(currentMap, syncMap);
|
||||
|
||||
diff.entriesOnlyOnLeft().values().forEach(share -> delete(share));
|
||||
diff.entriesOnlyOnRight().values().forEach(share -> save(share));
|
||||
diff.entriesOnlyOnRight().values().forEach(share -> dao.persist(share));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -137,7 +137,7 @@ public class DefaultEmailAddressManager extends BaseEntityManager<EmailAddress>
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(EmailAddress emailAddress) {
|
||||
public void createOrUpdate(EmailAddress emailAddress) {
|
||||
boolean isNew = emailAddress.isNew();
|
||||
emailAddress.setValue(emailAddress.getValue().toLowerCase());
|
||||
|
||||
|
||||
@ -3,6 +3,7 @@ package io.onedev.server.entitymanager.impl;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import io.onedev.server.entitymanager.GitLfsLockManager;
|
||||
@ -27,4 +28,10 @@ public class DefaultGitLfsLockManager extends BaseEntityManager<GitLfsLock> impl
|
||||
return find(criteria);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(GitLfsLock lock) {
|
||||
dao.persist(lock);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -154,5 +154,11 @@ public class DefaultGpgKeyManager extends BaseEntityManager<GpgKey> implements G
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(GpgKey gpgKey) {
|
||||
dao.persist(gpgKey);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ public class DefaultGroupAuthorizationManager extends BaseEntityManager<GroupAut
|
||||
if (newAuthorization.getProject().equals(authorization.getProject())) {
|
||||
found = true;
|
||||
authorization.setRole(newAuthorization.getRole());
|
||||
save(authorization);
|
||||
dao.persist(authorization);
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
@ -52,11 +52,17 @@ public class DefaultGroupAuthorizationManager extends BaseEntityManager<GroupAut
|
||||
}
|
||||
if (!found) {
|
||||
group.getAuthorizations().add(newAuthorization);
|
||||
save(newAuthorization);
|
||||
dao.persist(newAuthorization);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void createOrUpdate(GroupAuthorization authorization) {
|
||||
dao.persist(authorization);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GroupAuthorization> query() {
|
||||
return query(true);
|
||||
|
||||
@ -47,8 +47,14 @@ public class DefaultIssueAuthorizationManager extends BaseEntityManager<IssueAut
|
||||
authorization.setIssue(issue);
|
||||
authorization.setUser(user);
|
||||
issue.getAuthorizations().add(authorization);
|
||||
save(authorization);
|
||||
createOrUpdate(authorization);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void createOrUpdate(IssueAuthorization authorization) {
|
||||
dao.persist(authorization);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -174,7 +174,7 @@ public class DefaultIssueChangeManager extends BaseEntityManager<IssueChange>
|
||||
@Transactional
|
||||
@Override
|
||||
public void addSchedule(Issue issue, Milestone milestone) {
|
||||
issueScheduleManager.save(issue.addSchedule(milestone));
|
||||
issueScheduleManager.create(issue.addSchedule(milestone));
|
||||
|
||||
IssueChange change = new IssueChange();
|
||||
change.setIssue(issue);
|
||||
|
||||
@ -47,12 +47,18 @@ public class DefaultIssueFieldManager extends BaseEntityManager<IssueField> impl
|
||||
query.executeUpdate();
|
||||
}
|
||||
|
||||
for (IssueField entity: issue.getFields()) {
|
||||
if (entity.isNew())
|
||||
save(entity);
|
||||
for (IssueField field: issue.getFields()) {
|
||||
if (field.isNew())
|
||||
create(field);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(IssueField field) {
|
||||
dao.persist(field);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void onRenameGroup(String oldName, String newName) {
|
||||
|
||||
@ -1,166 +1,172 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.query.Query;
|
||||
|
||||
import io.onedev.server.entitymanager.IssueFieldManager;
|
||||
import io.onedev.server.entitymanager.IssueLinkManager;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueLink;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.persistence.annotation.Sessional;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
@Singleton
|
||||
public class DefaultIssueLinkManager extends BaseEntityManager<IssueLink> implements IssueLinkManager {
|
||||
|
||||
private final IssueFieldManager fieldManager;
|
||||
|
||||
@Inject
|
||||
public DefaultIssueLinkManager(Dao dao, IssueFieldManager fieldManager) {
|
||||
super(dao);
|
||||
this.fieldManager = fieldManager;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void syncLinks(LinkSpec spec, Issue issue, Collection<Issue> linkedIssues, boolean opposite) {
|
||||
if (spec.getOpposite() != null) {
|
||||
Collection<IssueLink> links = opposite?issue.getSourceLinks():issue.getTargetLinks();
|
||||
for (IssueLink link: links) {
|
||||
if (link.getSpec().equals(spec) && !linkedIssues.contains(link.getLinked(issue)))
|
||||
delete(link);
|
||||
}
|
||||
for (Issue linkedIssue: linkedIssues) {
|
||||
boolean found = false;
|
||||
for (IssueLink link: links) {
|
||||
if (link.getSpec().equals(spec) && link.getLinked(issue).equals(linkedIssue)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
IssueLink link = new IssueLink();
|
||||
link.setSpec(spec);
|
||||
if (opposite) {
|
||||
link.setSource(linkedIssue);
|
||||
link.setTarget(issue);
|
||||
} else {
|
||||
link.setSource(issue);
|
||||
link.setTarget(linkedIssue);
|
||||
}
|
||||
save(link);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (IssueLink link: issue.getLinks()) {
|
||||
if (link.getSpec().equals(spec) && !linkedIssues.contains(link.getLinked(issue)))
|
||||
delete(link);
|
||||
}
|
||||
for (Issue linkedIssue: linkedIssues) {
|
||||
boolean found = false;
|
||||
for (IssueLink link: issue.getLinks()) {
|
||||
if (link.getSpec().equals(spec) && link.getLinked(issue).equals(linkedIssue)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
IssueLink link = new IssueLink();
|
||||
link.setSpec(spec);
|
||||
link.setSource(issue);
|
||||
link.setTarget(linkedIssue);
|
||||
save(link);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public void populateLinks(Collection<Issue> issues) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<IssueLink> linkQuery = builder.createQuery(IssueLink.class);
|
||||
|
||||
Root<IssueLink> linkRoot = linkQuery.from(IssueLink.class);
|
||||
linkQuery.select(linkRoot);
|
||||
|
||||
linkQuery.where(builder.or(
|
||||
linkRoot.get(IssueLink.PROP_SOURCE).in(issues),
|
||||
linkRoot.get(IssueLink.PROP_TARGET).in(issues)));
|
||||
|
||||
for (Issue issue: issues) {
|
||||
issue.setSourceLinks(new ArrayList<>());
|
||||
issue.setTargetLinks(new ArrayList<>());
|
||||
}
|
||||
|
||||
for (IssueLink link: getSession().createQuery(linkQuery).getResultList()) {
|
||||
issues.stream().filter(it->it.equals(link.getSource())).forEach(it->it.getTargetLinks().add(link));
|
||||
issues.stream().filter(it->it.equals(link.getTarget())).forEach(it->it.getSourceLinks().add(link));
|
||||
}
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public void loadDeepLinks(Issue issue) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<Object[]> criteriaQuery = builder.createQuery(Object[].class);
|
||||
Root<IssueLink> root = criteriaQuery.from(IssueLink.class);
|
||||
criteriaQuery.multiselect(root, root.get(IssueLink.PROP_SOURCE), root.get(IssueLink.PROP_TARGET));
|
||||
|
||||
criteriaQuery.where(builder.or(
|
||||
builder.equal(root.get(IssueLink.PROP_SOURCE), issue),
|
||||
builder.equal(root.get(IssueLink.PROP_TARGET), issue)));
|
||||
|
||||
Query<Object[]> query = getSession().createQuery(criteriaQuery);
|
||||
query.setFirstResult(0);
|
||||
query.setMaxResults(Integer.MAX_VALUE);
|
||||
|
||||
List<IssueLink> sourceLinks = new ArrayList<>();
|
||||
List<IssueLink> targetLinks = new ArrayList<>();
|
||||
|
||||
List<Object[]> results = query.getResultList();
|
||||
if (!results.isEmpty()) {
|
||||
Map<Long, Issue> issues = new HashMap<>();
|
||||
for (Object[] row: results) {
|
||||
IssueLink link = (IssueLink) row[0];
|
||||
Issue source = (Issue) row[1];
|
||||
Issue target = (Issue) row[2];
|
||||
if (!source.equals(issue))
|
||||
sourceLinks.add(link);
|
||||
issues.put(source.getId(), source);
|
||||
if (!target.equals(issue))
|
||||
targetLinks.add(link);
|
||||
issues.put(target.getId(), target);
|
||||
}
|
||||
|
||||
if (Hibernate.isInitialized(issue.getFields())) {
|
||||
issues.remove(issue.getId());
|
||||
fieldManager.populateFields(issues.values());
|
||||
populateLinks(issues.values());
|
||||
} else {
|
||||
fieldManager.populateFields(issues.values());
|
||||
issues.remove(issue.getId());
|
||||
populateLinks(issues.values());
|
||||
}
|
||||
}
|
||||
|
||||
issue.setSourceLinks(sourceLinks);
|
||||
issue.setTargetLinks(targetLinks);
|
||||
}
|
||||
|
||||
}
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.query.Query;
|
||||
|
||||
import io.onedev.server.entitymanager.IssueFieldManager;
|
||||
import io.onedev.server.entitymanager.IssueLinkManager;
|
||||
import io.onedev.server.model.Issue;
|
||||
import io.onedev.server.model.IssueLink;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.persistence.annotation.Sessional;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
@Singleton
|
||||
public class DefaultIssueLinkManager extends BaseEntityManager<IssueLink> implements IssueLinkManager {
|
||||
|
||||
private final IssueFieldManager fieldManager;
|
||||
|
||||
@Inject
|
||||
public DefaultIssueLinkManager(Dao dao, IssueFieldManager fieldManager) {
|
||||
super(dao);
|
||||
this.fieldManager = fieldManager;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void syncLinks(LinkSpec spec, Issue issue, Collection<Issue> linkedIssues, boolean opposite) {
|
||||
if (spec.getOpposite() != null) {
|
||||
Collection<IssueLink> links = opposite?issue.getSourceLinks():issue.getTargetLinks();
|
||||
for (IssueLink link: links) {
|
||||
if (link.getSpec().equals(spec) && !linkedIssues.contains(link.getLinked(issue)))
|
||||
delete(link);
|
||||
}
|
||||
for (Issue linkedIssue: linkedIssues) {
|
||||
boolean found = false;
|
||||
for (IssueLink link: links) {
|
||||
if (link.getSpec().equals(spec) && link.getLinked(issue).equals(linkedIssue)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
IssueLink link = new IssueLink();
|
||||
link.setSpec(spec);
|
||||
if (opposite) {
|
||||
link.setSource(linkedIssue);
|
||||
link.setTarget(issue);
|
||||
} else {
|
||||
link.setSource(issue);
|
||||
link.setTarget(linkedIssue);
|
||||
}
|
||||
create(link);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (IssueLink link: issue.getLinks()) {
|
||||
if (link.getSpec().equals(spec) && !linkedIssues.contains(link.getLinked(issue)))
|
||||
delete(link);
|
||||
}
|
||||
for (Issue linkedIssue: linkedIssues) {
|
||||
boolean found = false;
|
||||
for (IssueLink link: issue.getLinks()) {
|
||||
if (link.getSpec().equals(spec) && link.getLinked(issue).equals(linkedIssue)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
IssueLink link = new IssueLink();
|
||||
link.setSpec(spec);
|
||||
link.setSource(issue);
|
||||
link.setTarget(linkedIssue);
|
||||
create(link);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(IssueLink link) {
|
||||
dao.persist(link);
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public void populateLinks(Collection<Issue> issues) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<IssueLink> linkQuery = builder.createQuery(IssueLink.class);
|
||||
|
||||
Root<IssueLink> linkRoot = linkQuery.from(IssueLink.class);
|
||||
linkQuery.select(linkRoot);
|
||||
|
||||
linkQuery.where(builder.or(
|
||||
linkRoot.get(IssueLink.PROP_SOURCE).in(issues),
|
||||
linkRoot.get(IssueLink.PROP_TARGET).in(issues)));
|
||||
|
||||
for (Issue issue: issues) {
|
||||
issue.setSourceLinks(new ArrayList<>());
|
||||
issue.setTargetLinks(new ArrayList<>());
|
||||
}
|
||||
|
||||
for (IssueLink link: getSession().createQuery(linkQuery).getResultList()) {
|
||||
issues.stream().filter(it->it.equals(link.getSource())).forEach(it->it.getTargetLinks().add(link));
|
||||
issues.stream().filter(it->it.equals(link.getTarget())).forEach(it->it.getSourceLinks().add(link));
|
||||
}
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public void loadDeepLinks(Issue issue) {
|
||||
CriteriaBuilder builder = getSession().getCriteriaBuilder();
|
||||
CriteriaQuery<Object[]> criteriaQuery = builder.createQuery(Object[].class);
|
||||
Root<IssueLink> root = criteriaQuery.from(IssueLink.class);
|
||||
criteriaQuery.multiselect(root, root.get(IssueLink.PROP_SOURCE), root.get(IssueLink.PROP_TARGET));
|
||||
|
||||
criteriaQuery.where(builder.or(
|
||||
builder.equal(root.get(IssueLink.PROP_SOURCE), issue),
|
||||
builder.equal(root.get(IssueLink.PROP_TARGET), issue)));
|
||||
|
||||
Query<Object[]> query = getSession().createQuery(criteriaQuery);
|
||||
query.setFirstResult(0);
|
||||
query.setMaxResults(Integer.MAX_VALUE);
|
||||
|
||||
List<IssueLink> sourceLinks = new ArrayList<>();
|
||||
List<IssueLink> targetLinks = new ArrayList<>();
|
||||
|
||||
List<Object[]> results = query.getResultList();
|
||||
if (!results.isEmpty()) {
|
||||
Map<Long, Issue> issues = new HashMap<>();
|
||||
for (Object[] row: results) {
|
||||
IssueLink link = (IssueLink) row[0];
|
||||
Issue source = (Issue) row[1];
|
||||
Issue target = (Issue) row[2];
|
||||
if (!source.equals(issue))
|
||||
sourceLinks.add(link);
|
||||
issues.put(source.getId(), source);
|
||||
if (!target.equals(issue))
|
||||
targetLinks.add(link);
|
||||
issues.put(target.getId(), target);
|
||||
}
|
||||
|
||||
if (Hibernate.isInitialized(issue.getFields())) {
|
||||
issues.remove(issue.getId());
|
||||
fieldManager.populateFields(issues.values());
|
||||
populateLinks(issues.values());
|
||||
} else {
|
||||
fieldManager.populateFields(issues.values());
|
||||
issues.remove(issue.getId());
|
||||
populateLinks(issues.values());
|
||||
}
|
||||
}
|
||||
|
||||
issue.setSourceLinks(sourceLinks);
|
||||
issue.setTargetLinks(targetLinks);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -214,7 +214,7 @@ public class DefaultIssueManager extends BaseEntityManager<Issue> implements Iss
|
||||
authorization.setIssue(issue);
|
||||
authorization.setUser(issue.getSubmitter());
|
||||
issue.getAuthorizations().add(authorization);
|
||||
authorizationManager.save(authorization);
|
||||
authorizationManager.createOrUpdate(authorization);
|
||||
|
||||
updateCacheAfterCommit(Lists.newArrayList(issue));
|
||||
listenerRegistry.post(new IssueOpened(issue));
|
||||
|
||||
@ -25,8 +25,8 @@ public class DefaultIssueMentionManager extends BaseEntityManager<IssueMention>
|
||||
IssueMention mention = new IssueMention();
|
||||
mention.setIssue(issue);
|
||||
mention.setUser(user);
|
||||
save(mention);
|
||||
dao.persist(mention);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,14 +1,5 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import io.onedev.server.entitymanager.IssueQueryPersonalizationManager;
|
||||
import io.onedev.server.model.IssueQueryPersonalization;
|
||||
import io.onedev.server.model.Project;
|
||||
@ -19,6 +10,13 @@ import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import io.onedev.server.persistence.dao.EntityCriteria;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Singleton
|
||||
public class DefaultIssueQueryPersonalizationManager extends BaseEntityManager<IssueQueryPersonalization>
|
||||
@ -40,7 +38,7 @@ public class DefaultIssueQueryPersonalizationManager extends BaseEntityManager<I
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(IssueQueryPersonalization personalization) {
|
||||
public void createOrUpdate(IssueQueryPersonalization personalization) {
|
||||
Collection<String> retainNames = new HashSet<>();
|
||||
retainNames.addAll(personalization.getQueries().stream()
|
||||
.map(it->NamedQuery.PERSONAL_NAME_PREFIX+it.getName()).collect(Collectors.toSet()));
|
||||
@ -52,7 +50,7 @@ public class DefaultIssueQueryPersonalizationManager extends BaseEntityManager<I
|
||||
if (!personalization.isNew())
|
||||
delete(personalization);
|
||||
} else {
|
||||
super.save(personalization);
|
||||
dao.persist(personalization);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -43,5 +43,11 @@ public class DefaultIssueScheduleManager extends BaseEntityManager<IssueSchedule
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(IssueSchedule schedule) {
|
||||
dao.persist(schedule);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,10 +19,10 @@ public class DefaultIssueVoteManager extends BaseEntityManager<IssueVote>
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void save(IssueVote vote) {
|
||||
if (vote.isNew())
|
||||
vote.getIssue().setVoteCount(vote.getIssue().getVoteCount()+1);
|
||||
super.save(vote);
|
||||
@Override
|
||||
public void create(IssueVote vote) {
|
||||
vote.getIssue().setVoteCount(vote.getIssue().getVoteCount()+1);
|
||||
dao.persist(vote);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
|
||||
@ -3,6 +3,7 @@ package io.onedev.server.entitymanager.impl;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import io.onedev.server.entitymanager.IssueWatchManager;
|
||||
@ -35,8 +36,14 @@ public class DefaultIssueWatchManager extends BaseEntityManager<IssueWatch>
|
||||
IssueWatch watch = (IssueWatch) issue.getWatch(user, true);
|
||||
if (watch.isNew()) {
|
||||
watch.setWatching(watching);
|
||||
save(watch);
|
||||
createOrUpdate(watch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void createOrUpdate(IssueWatch watch) {
|
||||
dao.persist(watch);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,71 +1,70 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.criterion.MatchMode;
|
||||
import org.hibernate.criterion.Order;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import io.onedev.server.entitymanager.LabelManager;
|
||||
import io.onedev.server.model.LabelSpec;
|
||||
import io.onedev.server.persistence.annotation.Sessional;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import io.onedev.server.persistence.dao.EntityCriteria;
|
||||
|
||||
@Singleton
|
||||
public class DefaultLabelManager extends BaseEntityManager<LabelSpec> implements LabelManager {
|
||||
|
||||
@Inject
|
||||
public DefaultLabelManager(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LabelSpec find(String name) {
|
||||
EntityCriteria<LabelSpec> criteria = EntityCriteria.of(LabelSpec.class);
|
||||
criteria.add(Restrictions.eq(LabelSpec.PROP_NAME, name));
|
||||
return find(criteria);
|
||||
}
|
||||
|
||||
private EntityCriteria<LabelSpec> getCriteria(@Nullable String term) {
|
||||
EntityCriteria<LabelSpec> criteria = EntityCriteria.of(LabelSpec.class);
|
||||
if (term != null)
|
||||
criteria.add(Restrictions.ilike(LabelSpec.PROP_NAME, term, MatchMode.ANYWHERE));
|
||||
else
|
||||
criteria.setCacheable(true);
|
||||
return criteria;
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<LabelSpec> query(String term, int firstResult, int maxResults) {
|
||||
EntityCriteria<LabelSpec> criteria = getCriteria(term);
|
||||
criteria.addOrder(Order.asc(LabelSpec.PROP_NAME));
|
||||
return query(criteria, firstResult, maxResults);
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(String term) {
|
||||
return count(getCriteria(term));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void sync(List<LabelSpec> labels) {
|
||||
for (var label: labels) {
|
||||
save(label);
|
||||
}
|
||||
for (var existingLabel: query()) {
|
||||
if (!labels.contains(existingLabel))
|
||||
delete(existingLabel);
|
||||
}
|
||||
}
|
||||
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.criterion.MatchMode;
|
||||
import org.hibernate.criterion.Order;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import io.onedev.server.entitymanager.LabelManager;
|
||||
import io.onedev.server.model.LabelSpec;
|
||||
import io.onedev.server.persistence.annotation.Sessional;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import io.onedev.server.persistence.dao.EntityCriteria;
|
||||
|
||||
@Singleton
|
||||
public class DefaultLabelManager extends BaseEntityManager<LabelSpec> implements LabelManager {
|
||||
|
||||
@Inject
|
||||
public DefaultLabelManager(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LabelSpec find(String name) {
|
||||
EntityCriteria<LabelSpec> criteria = EntityCriteria.of(LabelSpec.class);
|
||||
criteria.add(Restrictions.eq(LabelSpec.PROP_NAME, name));
|
||||
return find(criteria);
|
||||
}
|
||||
|
||||
private EntityCriteria<LabelSpec> getCriteria(@Nullable String term) {
|
||||
EntityCriteria<LabelSpec> criteria = EntityCriteria.of(LabelSpec.class);
|
||||
if (term != null)
|
||||
criteria.add(Restrictions.ilike(LabelSpec.PROP_NAME, term, MatchMode.ANYWHERE));
|
||||
else
|
||||
criteria.setCacheable(true);
|
||||
return criteria;
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public List<LabelSpec> query(String term, int firstResult, int maxResults) {
|
||||
EntityCriteria<LabelSpec> criteria = getCriteria(term);
|
||||
criteria.addOrder(Order.asc(LabelSpec.PROP_NAME));
|
||||
return query(criteria, firstResult, maxResults);
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(String term) {
|
||||
return count(getCriteria(term));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void sync(List<LabelSpec> labels) {
|
||||
for (var label: labels)
|
||||
dao.persist(label);
|
||||
for (var existingLabel: query()) {
|
||||
if (!labels.contains(existingLabel))
|
||||
delete(existingLabel);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,49 +1,55 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.entitymanager.LinkAuthorizationManager;
|
||||
import io.onedev.server.model.LinkAuthorization;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.model.Role;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
@Singleton
|
||||
public class DefaultLinkAuthorizationManager extends BaseEntityManager<LinkAuthorization> implements LinkAuthorizationManager {
|
||||
|
||||
@Inject
|
||||
public DefaultLinkAuthorizationManager(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void syncAuthorizations(Role role, Collection<LinkSpec> authorizedLinks) {
|
||||
for (LinkAuthorization authorization: role.getLinkAuthorizations()) {
|
||||
if (!authorizedLinks.contains(authorization.getLink()))
|
||||
delete(authorization);
|
||||
}
|
||||
|
||||
for (LinkSpec link: authorizedLinks) {
|
||||
boolean found = false;
|
||||
for (LinkAuthorization authorization: role.getLinkAuthorizations()) {
|
||||
if (authorization.getLink().equals(link)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
LinkAuthorization authorization = new LinkAuthorization();
|
||||
authorization.setLink(link);
|
||||
authorization.setRole(role);
|
||||
save(authorization);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.entitymanager.LinkAuthorizationManager;
|
||||
import io.onedev.server.model.LinkAuthorization;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.model.Role;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
@Singleton
|
||||
public class DefaultLinkAuthorizationManager extends BaseEntityManager<LinkAuthorization> implements LinkAuthorizationManager {
|
||||
|
||||
@Inject
|
||||
public DefaultLinkAuthorizationManager(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void syncAuthorizations(Role role, Collection<LinkSpec> authorizedLinks) {
|
||||
for (LinkAuthorization authorization: role.getLinkAuthorizations()) {
|
||||
if (!authorizedLinks.contains(authorization.getLink()))
|
||||
delete(authorization);
|
||||
}
|
||||
|
||||
for (LinkSpec link: authorizedLinks) {
|
||||
boolean found = false;
|
||||
for (LinkAuthorization authorization: role.getLinkAuthorizations()) {
|
||||
if (authorization.getLink().equals(link)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
LinkAuthorization authorization = new LinkAuthorization();
|
||||
authorization.setLink(link);
|
||||
authorization.setRole(role);
|
||||
create(authorization);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(LinkAuthorization authorization) {
|
||||
dao.persist(authorization);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,173 +1,179 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.cluster.ClusterManager;
|
||||
import io.onedev.server.entitymanager.LinkSpecManager;
|
||||
import io.onedev.server.entitymanager.SettingManager;
|
||||
import io.onedev.server.event.Listen;
|
||||
import io.onedev.server.event.system.SystemStarted;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.persistence.TransactionManager;
|
||||
import io.onedev.server.persistence.annotation.Sessional;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import io.onedev.server.search.entity.issue.IssueQueryUpdater;
|
||||
import io.onedev.server.util.facade.LinkSpecFacade;
|
||||
import io.onedev.server.util.usage.Usage;
|
||||
|
||||
@Singleton
|
||||
public class DefaultLinkSpecManager extends BaseEntityManager<LinkSpec> implements LinkSpecManager {
|
||||
|
||||
private final SettingManager settingManager;
|
||||
|
||||
private final TransactionManager transactionManager;
|
||||
|
||||
private final ClusterManager clusterManager;
|
||||
|
||||
private volatile Map<String, Long> ids;
|
||||
|
||||
private volatile Map<Long, LinkSpecFacade> cache;
|
||||
|
||||
@Inject
|
||||
public DefaultLinkSpecManager(Dao dao, SettingManager settingManager, TransactionManager transactionManager,
|
||||
ClusterManager clusterManager) {
|
||||
super(dao);
|
||||
this.settingManager = settingManager;
|
||||
this.transactionManager = transactionManager;
|
||||
this.clusterManager = clusterManager;
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Listen
|
||||
public void on(SystemStarted event) {
|
||||
ids = clusterManager.getHazelcastInstance().getReplicatedMap("linkSpecIds");
|
||||
cache = clusterManager.getHazelcastInstance().getReplicatedMap("linkSpecCache");
|
||||
|
||||
for (LinkSpec link: query(true)) {
|
||||
ids.put(link.getName(), link.getId());
|
||||
|
||||
String oppositeName = link.getOpposite()!=null?link.getOpposite().getName():null;
|
||||
if (oppositeName != null)
|
||||
ids.put(oppositeName, link.getId());
|
||||
cache.put(link.getId(), link.getFacade());
|
||||
}
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public LinkSpec find(String name) {
|
||||
Long linkId = ids.get(name);
|
||||
if (linkId != null) {
|
||||
LinkSpecFacade facade = cache.get(linkId);
|
||||
if (facade != null && (name.equals(facade.getName()) || name.equals(facade.getOppositeName())))
|
||||
return load(linkId);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LinkSpec> queryAndSort() {
|
||||
List<LinkSpec> links = query(true);
|
||||
links.sort(Comparator.comparing(LinkSpec::getOrder));
|
||||
return links;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void updateOrders(List<LinkSpec> links) {
|
||||
for (int i=0; i<links.size(); i++) {
|
||||
LinkSpec link = links.get(i);
|
||||
link.setOrder(i+1);
|
||||
save(link);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(LinkSpec spec, String oldName, String oldOppositeName) {
|
||||
if (oldName != null) {
|
||||
if (oldOppositeName != null) {
|
||||
if (spec.getOpposite() == null) {
|
||||
Usage usage = new Usage();
|
||||
usage.add(settingManager.onDeleteLink(oldOppositeName));
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
usage.add(updater.onDeleteLink(oldOppositeName));
|
||||
}
|
||||
usage.checkInUse("Opposite side of issue link '" + oldName + "'");
|
||||
} else if (!oldOppositeName.equals(spec.getOpposite().getName())){
|
||||
settingManager.onRenameLink(oldOppositeName, spec.getOpposite().getName());
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
updater.onRenameLink(oldOppositeName, spec.getOpposite().getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!oldName.equals(spec.getName())) {
|
||||
settingManager.onRenameLink(oldName, spec.getName());
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
updater.onRenameLink(oldName, spec.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
super.save(spec);
|
||||
|
||||
LinkSpecFacade facade = new LinkSpecFacade(spec);
|
||||
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
cache.put(facade.getId(), facade);
|
||||
ids.put(facade.getName(), facade.getId());
|
||||
if (facade.getOppositeName() != null)
|
||||
ids.put(facade.getOppositeName(), facade.getId());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void delete(LinkSpec spec) {
|
||||
if (spec.getOpposite() != null) {
|
||||
Usage usage = new Usage();
|
||||
usage.add(settingManager.onDeleteLink(spec.getOpposite().getName()));
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
usage.add(updater.onDeleteLink(spec.getOpposite().getName()));
|
||||
}
|
||||
usage.checkInUse("Opposite side of issue link '" + spec.getName() + "'");
|
||||
}
|
||||
|
||||
Usage usage = new Usage();
|
||||
usage.add(settingManager.onDeleteLink(spec.getName()));
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
usage.add(updater.onDeleteLink(spec.getName()));
|
||||
}
|
||||
usage.checkInUse("Issue link '" + spec.getName() + "'");
|
||||
|
||||
super.delete(spec);
|
||||
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
cache.remove(spec.getId());
|
||||
ids.remove(spec.getName());
|
||||
if (spec.getOpposite() != null)
|
||||
ids.remove(spec.getOpposite().getName());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.cluster.ClusterManager;
|
||||
import io.onedev.server.entitymanager.LinkSpecManager;
|
||||
import io.onedev.server.entitymanager.SettingManager;
|
||||
import io.onedev.server.event.Listen;
|
||||
import io.onedev.server.event.system.SystemStarted;
|
||||
import io.onedev.server.model.LinkSpec;
|
||||
import io.onedev.server.persistence.TransactionManager;
|
||||
import io.onedev.server.persistence.annotation.Sessional;
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import io.onedev.server.search.entity.issue.IssueQueryUpdater;
|
||||
import io.onedev.server.util.facade.LinkSpecFacade;
|
||||
import io.onedev.server.util.usage.Usage;
|
||||
|
||||
@Singleton
|
||||
public class DefaultLinkSpecManager extends BaseEntityManager<LinkSpec> implements LinkSpecManager {
|
||||
|
||||
private final SettingManager settingManager;
|
||||
|
||||
private final TransactionManager transactionManager;
|
||||
|
||||
private final ClusterManager clusterManager;
|
||||
|
||||
private volatile Map<String, Long> ids;
|
||||
|
||||
private volatile Map<Long, LinkSpecFacade> cache;
|
||||
|
||||
@Inject
|
||||
public DefaultLinkSpecManager(Dao dao, SettingManager settingManager, TransactionManager transactionManager,
|
||||
ClusterManager clusterManager) {
|
||||
super(dao);
|
||||
this.settingManager = settingManager;
|
||||
this.transactionManager = transactionManager;
|
||||
this.clusterManager = clusterManager;
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Listen
|
||||
public void on(SystemStarted event) {
|
||||
ids = clusterManager.getHazelcastInstance().getReplicatedMap("linkSpecIds");
|
||||
cache = clusterManager.getHazelcastInstance().getReplicatedMap("linkSpecCache");
|
||||
|
||||
for (LinkSpec link: query(true)) {
|
||||
ids.put(link.getName(), link.getId());
|
||||
|
||||
String oppositeName = link.getOpposite()!=null?link.getOpposite().getName():null;
|
||||
if (oppositeName != null)
|
||||
ids.put(oppositeName, link.getId());
|
||||
cache.put(link.getId(), link.getFacade());
|
||||
}
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public LinkSpec find(String name) {
|
||||
Long linkId = ids.get(name);
|
||||
if (linkId != null) {
|
||||
LinkSpecFacade facade = cache.get(linkId);
|
||||
if (facade != null && (name.equals(facade.getName()) || name.equals(facade.getOppositeName())))
|
||||
return load(linkId);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LinkSpec> queryAndSort() {
|
||||
List<LinkSpec> links = query(true);
|
||||
links.sort(Comparator.comparing(LinkSpec::getOrder));
|
||||
return links;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void updateOrders(List<LinkSpec> links) {
|
||||
for (int i=0; i<links.size(); i++) {
|
||||
LinkSpec link = links.get(i);
|
||||
link.setOrder(i+1);
|
||||
dao.persist(link);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void update(LinkSpec spec, String oldName, String oldOppositeName) {
|
||||
if (oldName != null) {
|
||||
if (oldOppositeName != null) {
|
||||
if (spec.getOpposite() == null) {
|
||||
Usage usage = new Usage();
|
||||
usage.add(settingManager.onDeleteLink(oldOppositeName));
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
usage.add(updater.onDeleteLink(oldOppositeName));
|
||||
}
|
||||
usage.checkInUse("Opposite side of issue link '" + oldName + "'");
|
||||
} else if (!oldOppositeName.equals(spec.getOpposite().getName())){
|
||||
settingManager.onRenameLink(oldOppositeName, spec.getOpposite().getName());
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
updater.onRenameLink(oldOppositeName, spec.getOpposite().getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!oldName.equals(spec.getName())) {
|
||||
settingManager.onRenameLink(oldName, spec.getName());
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
updater.onRenameLink(oldName, spec.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
dao.persist(spec);
|
||||
|
||||
LinkSpecFacade facade = new LinkSpecFacade(spec);
|
||||
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
cache.put(facade.getId(), facade);
|
||||
ids.put(facade.getName(), facade.getId());
|
||||
if (facade.getOppositeName() != null)
|
||||
ids.put(facade.getOppositeName(), facade.getId());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(LinkSpec link) {
|
||||
dao.persist(link);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void delete(LinkSpec spec) {
|
||||
if (spec.getOpposite() != null) {
|
||||
Usage usage = new Usage();
|
||||
usage.add(settingManager.onDeleteLink(spec.getOpposite().getName()));
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
usage.add(updater.onDeleteLink(spec.getOpposite().getName()));
|
||||
}
|
||||
usage.checkInUse("Opposite side of issue link '" + spec.getName() + "'");
|
||||
}
|
||||
|
||||
Usage usage = new Usage();
|
||||
usage.add(settingManager.onDeleteLink(spec.getName()));
|
||||
for (LinkSpec link: query(true)) {
|
||||
for (IssueQueryUpdater updater: link.getQueryUpdaters())
|
||||
usage.add(updater.onDeleteLink(spec.getName()));
|
||||
}
|
||||
usage.checkInUse("Issue link '" + spec.getName() + "'");
|
||||
|
||||
super.delete(spec);
|
||||
|
||||
transactionManager.runAfterCommit(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
cache.remove(spec.getId());
|
||||
ids.remove(spec.getName());
|
||||
if (spec.getOpposite() != null)
|
||||
ids.remove(spec.getOpposite().getName());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -83,7 +83,13 @@ public class DefaultMembershipManager extends BaseEntityManager<Membership> impl
|
||||
MapDifference<String, Membership> diff = Maps.difference(currentMap, syncMap);
|
||||
|
||||
diff.entriesOnlyOnLeft().values().forEach(membership -> delete(membership));
|
||||
diff.entriesOnlyOnRight().values().forEach(membership -> save(membership));
|
||||
diff.entriesOnlyOnRight().values().forEach(membership -> dao.persist(membership));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(Membership membership) {
|
||||
dao.persist(membership);
|
||||
}
|
||||
|
||||
@Sessional
|
||||
|
||||
@ -5,6 +5,7 @@ import java.util.List;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import org.hibernate.criterion.Order;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
@ -75,5 +76,11 @@ public class DefaultMilestoneManager extends BaseEntityManager<Milestone> implem
|
||||
criteria.addOrder(Order.asc(Milestone.PROP_DUE_DATE));
|
||||
return find(criteria);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void createOrUpdate(Milestone milestone) {
|
||||
dao.persist(milestone);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -123,4 +123,10 @@ public class DefaultPendingSuggestionApplyManager extends BaseEntityManager<Pend
|
||||
return getSession().createQuery(criteriaQuery).list();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(PendingSuggestionApply pendingSuggestionApply) {
|
||||
dao.persist(pendingSuggestionApply);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -37,4 +37,10 @@ public class DefaultProjectDynamicsManager extends BaseEntityManager<ProjectDyna
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(ProjectDynamics dynamics) {
|
||||
dao.persist(dynamics);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -208,7 +208,7 @@ public class DefaultProjectManager extends BaseEntityManager<Project>
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(Project project) {
|
||||
public void update(Project project) {
|
||||
String oldPath = project.getPath();
|
||||
String newPath = project.calcPath();
|
||||
if (!newPath.equals(oldPath)) {
|
||||
@ -278,9 +278,9 @@ public class DefaultProjectManager extends BaseEntityManager<Project>
|
||||
create(parent);
|
||||
project.setPath(project.calcPath());
|
||||
|
||||
ProjectDynamics update = new ProjectDynamics();
|
||||
project.setDynamics(update);
|
||||
dynamicsManager.save(update);
|
||||
ProjectDynamics dynamics = new ProjectDynamics();
|
||||
project.setDynamics(dynamics);
|
||||
dynamicsManager.create(dynamics);
|
||||
dao.persist(project);
|
||||
|
||||
var projectDir = storageManager.getProjectDir(project.getId());
|
||||
@ -295,7 +295,7 @@ public class DefaultProjectManager extends BaseEntityManager<Project>
|
||||
authorization.setProject(project);
|
||||
authorization.setUser(SecurityUtils.getUser());
|
||||
authorization.setRole(roleManager.getOwner());
|
||||
userAuthorizationManager.save(authorization);
|
||||
userAuthorizationManager.createOrUpdate(authorization);
|
||||
|
||||
updateStorageServer(project);
|
||||
listenerRegistry.post(new ProjectCreated(project));
|
||||
@ -1009,7 +1009,7 @@ public class DefaultProjectManager extends BaseEntityManager<Project>
|
||||
public void move(Collection<Project> projects, Project parent) {
|
||||
for (Project project : projects) {
|
||||
project.setParent(parent);
|
||||
save(project);
|
||||
update(project);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -29,8 +29,8 @@ public class DefaultPullRequestAssignmentManager extends BaseEntityManager<PullR
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(PullRequestAssignment assignment) {
|
||||
super.save(assignment);
|
||||
public void create(PullRequestAssignment assignment) {
|
||||
dao.persist(assignment);
|
||||
|
||||
listenerRegistry.post(new PullRequestAssigned(
|
||||
SecurityUtils.getUser(), new Date(),
|
||||
|
||||
@ -30,8 +30,8 @@ public class DefaultPullRequestCommentManager extends BaseEntityManager<PullRequ
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(PullRequestComment comment) {
|
||||
save(comment, Lists.newArrayList());
|
||||
public void createOrUpdate(PullRequestComment comment) {
|
||||
createOrUpdate(comment, Lists.newArrayList());
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@ -42,8 +42,9 @@ public class DefaultPullRequestCommentManager extends BaseEntityManager<PullRequ
|
||||
request.setCommentCount(request.getCommentCount()-1);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(PullRequestComment comment, Collection<String> notifiedEmailAddresses) {
|
||||
public void createOrUpdate(PullRequestComment comment, Collection<String> notifiedEmailAddresses) {
|
||||
boolean isNew = comment.isNew();
|
||||
dao.persist(comment);
|
||||
if (isNew) {
|
||||
|
||||
@ -320,7 +320,7 @@ public class DefaultPullRequestManager extends BaseEntityManager<PullRequest>
|
||||
ObjectId.fromString(request.getLatestUpdate().getHeadCommitHash()), null);
|
||||
|
||||
for (PullRequestUpdate update: request.getUpdates())
|
||||
updateManager.save(update);
|
||||
updateManager.create(update);
|
||||
|
||||
for (PullRequestReview review: request.getReviews())
|
||||
dao.persist(review);
|
||||
@ -425,7 +425,7 @@ public class DefaultPullRequestManager extends BaseEntityManager<PullRequest>
|
||||
|
||||
for (PullRequestReview review: request.getReviews()) {
|
||||
if (review.isNew() || review.isDirty())
|
||||
reviewManager.save(review);
|
||||
reviewManager.createOrUpdate(review);
|
||||
}
|
||||
|
||||
Project targetProject = request.getTargetProject();
|
||||
@ -957,7 +957,7 @@ public class DefaultPullRequestManager extends BaseEntityManager<PullRequest>
|
||||
throw new ExplicitException("Description too long");
|
||||
request.setDescription(description);
|
||||
referenceManager.addReferenceChange(request, description);
|
||||
save(request);
|
||||
dao.persist(request);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import io.onedev.server.entitymanager.IssueMentionManager;
|
||||
import io.onedev.server.entitymanager.PullRequestMentionManager;
|
||||
import io.onedev.server.model.*;
|
||||
import io.onedev.server.model.PullRequest;
|
||||
import io.onedev.server.model.PullRequestMention;
|
||||
import io.onedev.server.model.User;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
|
||||
@ -24,8 +25,8 @@ public class DefaultPullRequestMentionManager extends BaseEntityManager<PullRequ
|
||||
PullRequestMention mention = new PullRequestMention();
|
||||
mention.setRequest(request);
|
||||
mention.setUser(user);
|
||||
save(mention);
|
||||
dao.persist(mention);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,14 +1,5 @@
|
||||
package io.onedev.server.entitymanager.impl;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import io.onedev.server.entitymanager.PullRequestQueryPersonalizationManager;
|
||||
import io.onedev.server.model.Project;
|
||||
import io.onedev.server.model.PullRequestQueryPersonalization;
|
||||
@ -19,6 +10,13 @@ import io.onedev.server.persistence.annotation.Transactional;
|
||||
import io.onedev.server.persistence.dao.BaseEntityManager;
|
||||
import io.onedev.server.persistence.dao.Dao;
|
||||
import io.onedev.server.persistence.dao.EntityCriteria;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Singleton
|
||||
public class DefaultPullRequestQueryPersonalizationManager extends BaseEntityManager<PullRequestQueryPersonalization>
|
||||
@ -40,7 +38,7 @@ public class DefaultPullRequestQueryPersonalizationManager extends BaseEntityMan
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(PullRequestQueryPersonalization personalization) {
|
||||
public void createOrUpdate(PullRequestQueryPersonalization personalization) {
|
||||
Collection<String> retainNames = new HashSet<>();
|
||||
retainNames.addAll(personalization.getQueries().stream()
|
||||
.map(it->NamedQuery.PERSONAL_NAME_PREFIX+it.getName()).collect(Collectors.toSet()));
|
||||
@ -52,7 +50,7 @@ public class DefaultPullRequestQueryPersonalizationManager extends BaseEntityMan
|
||||
if (!personalization.isNew())
|
||||
delete(personalization);
|
||||
} else {
|
||||
super.save(personalization);
|
||||
dao.persist(personalization);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -48,9 +48,9 @@ public class DefaultPullRequestReviewManager extends BaseEntityManager<PullReque
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(PullRequestReview review) {
|
||||
public void createOrUpdate(PullRequestReview review) {
|
||||
review.setDirty(false);
|
||||
super.save(review);
|
||||
dao.persist(review);
|
||||
|
||||
if (review.getStatus() == Status.PENDING) {
|
||||
listenerRegistry.post(new PullRequestReviewRequested(
|
||||
@ -92,7 +92,7 @@ public class DefaultPullRequestReviewManager extends BaseEntityManager<PullReque
|
||||
else
|
||||
review.setStatus(PullRequestReview.Status.REQUESTED_FOR_CHANGES);
|
||||
|
||||
save(review);
|
||||
createOrUpdate(review);
|
||||
|
||||
PullRequestChange change = new PullRequestChange();
|
||||
change.setDate(review.getStatusDate());
|
||||
|
||||
@ -41,8 +41,8 @@ public class DefaultPullRequestUpdateManager extends BaseEntityManager<PullReque
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(PullRequestUpdate update) {
|
||||
super.save(update);
|
||||
public void create(PullRequestUpdate update) {
|
||||
dao.persist(update);
|
||||
PullRequest request = update.getRequest();
|
||||
if (!request.getTargetProject().equals(request.getSourceProject())) {
|
||||
if (request.getTargetProject().findPullRequestWithLFS()) {
|
||||
@ -72,7 +72,7 @@ public class DefaultPullRequestUpdateManager extends BaseEntityManager<PullReque
|
||||
update.setHeadCommitHash(request.getSource().getObjectName());
|
||||
update.setTargetHeadCommitHash(request.getTarget().getObjectName());
|
||||
request.getUpdates().add(update);
|
||||
save(update);
|
||||
create(update);
|
||||
|
||||
gitService.updateRef(request.getTargetProject(), request.getHeadRef(),
|
||||
ObjectId.fromString(request.getLatestUpdate().getHeadCommitHash()), null);
|
||||
|
||||
@ -35,8 +35,13 @@ public class DefaultPullRequestWatchManager extends BaseEntityManager<PullReques
|
||||
PullRequestWatch watch = (PullRequestWatch) request.getWatch(user, true);
|
||||
if (watch.isNew()) {
|
||||
watch.setWatching(watching);
|
||||
save(watch);
|
||||
dao.persist(watch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void createOrUpdate(PullRequestWatch watch) {
|
||||
dao.persist(watch);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -146,7 +146,7 @@ public class DefaultRoleManager extends BaseEntityManager<Role> implements RoleM
|
||||
|
||||
for (Project project: role.getDefaultProjects()) {
|
||||
project.setDefaultRole(null);
|
||||
projectManager.save(project);
|
||||
projectManager.update(project);
|
||||
}
|
||||
|
||||
dao.remove(role);
|
||||
|
||||
@ -66,11 +66,17 @@ public class DefaultSshKeyManager extends BaseEntityManager<SshKey> implements S
|
||||
|
||||
diff.entriesOnlyOnRight().values().forEach(sshKey -> {
|
||||
if (findByDigest(sshKey.getDigest()) == null)
|
||||
save(sshKey);
|
||||
create(sshKey);
|
||||
else
|
||||
logger.warn("SSH key is already in use (digest: {})", sshKey.getDigest());
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(SshKey sshKey) {
|
||||
dao.persist(sshKey);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ public class DefaultUserAuthorizationManager extends BaseEntityManager<UserAutho
|
||||
if (newAuthorization.getProject().equals(authorization.getProject())) {
|
||||
found = true;
|
||||
authorization.setRole(newAuthorization.getRole());
|
||||
save(authorization);
|
||||
dao.persist(authorization);
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
@ -53,7 +53,7 @@ public class DefaultUserAuthorizationManager extends BaseEntityManager<UserAutho
|
||||
}
|
||||
if (!found) {
|
||||
user.getProjectAuthorizations().add(newAuthorization);
|
||||
save(newAuthorization);
|
||||
dao.persist(newAuthorization);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -78,7 +78,7 @@ public class DefaultUserAuthorizationManager extends BaseEntityManager<UserAutho
|
||||
if (newAuthorization.getUser().equals(authorization.getUser())) {
|
||||
found = true;
|
||||
authorization.setRole(newAuthorization.getRole());
|
||||
save(authorization);
|
||||
dao.persist(authorization);
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
@ -97,9 +97,15 @@ public class DefaultUserAuthorizationManager extends BaseEntityManager<UserAutho
|
||||
}
|
||||
if (!found) {
|
||||
project.getUserAuthorizations().add(newAuthorization);
|
||||
save(newAuthorization);
|
||||
dao.persist(newAuthorization);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void createOrUpdate(UserAuthorization authorization) {
|
||||
dao.persist(authorization);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.onedev.server.persistence.annotation.Transactional;
|
||||
import org.hibernate.criterion.MatchMode;
|
||||
import org.hibernate.criterion.Order;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
@ -95,6 +96,12 @@ public class DefaultUserInvitationManager extends BaseEntityManager<UserInvitati
|
||||
return query(criteria, firstResult, maxResults);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void create(UserInvitation invitation) {
|
||||
dao.persist(invitation);
|
||||
}
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public int count(String term) {
|
||||
|
||||
@ -340,7 +340,7 @@ public class GitLfsFilter implements Filter {
|
||||
lock = new GitLfsLock();
|
||||
lock.setPath(path);
|
||||
lock.setOwner(SecurityUtils.getUser());
|
||||
lockManager.save(lock);
|
||||
lockManager.create(lock);
|
||||
httpResponse.setStatus(SC_CREATED);
|
||||
} else {
|
||||
httpResponse.setStatus(SC_CONFLICT);
|
||||
|
||||
@ -589,7 +589,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
build.setRetryDate(new Date());
|
||||
build.setStatus(Status.WAITING);
|
||||
listenerRegistry.post(new BuildRetrying(build));
|
||||
buildManager.save(build);
|
||||
buildManager.update(build);
|
||||
}
|
||||
|
||||
});
|
||||
@ -609,7 +609,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
build.setPendingDate(new Date());
|
||||
build.setStatus(Status.PENDING);
|
||||
listenerRegistry.post(new BuildPending(build));
|
||||
buildManager.save(build);
|
||||
buildManager.update(build);
|
||||
}
|
||||
|
||||
});
|
||||
@ -653,7 +653,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
build.setStatus(Build.Status.FAILED);
|
||||
logManager.newLogger(build).error(errorMessage);
|
||||
build.setFinishDate(new Date());
|
||||
buildManager.save(build);
|
||||
buildManager.update(build);
|
||||
listenerRegistry.post(new BuildFinished(build));
|
||||
}
|
||||
|
||||
@ -777,7 +777,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
param.setType(type);
|
||||
param.setValue(value);
|
||||
build.getParams().add(param);
|
||||
buildParamManager.save(param);
|
||||
buildParamManager.create(param);
|
||||
}
|
||||
} else {
|
||||
BuildParam param = new BuildParam();
|
||||
@ -785,10 +785,10 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
param.setName(paramSpec.getName());
|
||||
param.setType(type);
|
||||
build.getParams().add(param);
|
||||
buildParamManager.save(param);
|
||||
buildParamManager.create(param);
|
||||
}
|
||||
}
|
||||
buildManager.save(build);
|
||||
buildManager.update(build);
|
||||
buildSubmitted(build);
|
||||
} finally {
|
||||
JobAuthorizationContext.pop();
|
||||
@ -969,7 +969,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
build.setStatus(Status.CANCELLED);
|
||||
build.setFinishDate(new Date());
|
||||
build.setCanceller(userManager.load(userId));
|
||||
buildManager.save(build);
|
||||
buildManager.update(build);
|
||||
listenerRegistry.post(new BuildFinished(build));
|
||||
}
|
||||
}
|
||||
@ -1243,7 +1243,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
} catch (InterruptedException ignored) {
|
||||
} finally {
|
||||
build.setFinishDate(new Date());
|
||||
buildManager.save(build);
|
||||
buildManager.update(build);
|
||||
listenerRegistry.post(new BuildFinished(build));
|
||||
}
|
||||
}
|
||||
@ -1457,7 +1457,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
|
||||
public void run() {
|
||||
Build build = buildManager.load(jobContext.getBuildId());
|
||||
build.setJobWorkspace(jobWorkspace);
|
||||
buildManager.save(build);
|
||||
buildManager.update(build);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@ -458,7 +458,7 @@ public class DefaultMailManager implements MailManager, Serializable {
|
||||
IssueWatch watch = issueWatchManager.find(issue, user);
|
||||
if (watch != null) {
|
||||
watch.setWatching(false);
|
||||
issueWatchManager.save(watch);
|
||||
issueWatchManager.createOrUpdate(watch);
|
||||
String subject = "Unsubscribed successfully from issue " + issue.getFQN();
|
||||
String body = "You will no longer receive notifications of issue " + issue.getFQN() + " unless mentioned. "
|
||||
+ "However if you subscribed to certain issue queries, you may still get notifications of newly "
|
||||
@ -484,7 +484,7 @@ public class DefaultMailManager implements MailManager, Serializable {
|
||||
PullRequestWatch watch = pullRequestWatchManager.find(pullRequest, user);
|
||||
if (watch != null) {
|
||||
watch.setWatching(false);
|
||||
pullRequestWatchManager.save(watch);
|
||||
pullRequestWatchManager.createOrUpdate(watch);
|
||||
String subject = "Unsubscribed successfully from pull request " + pullRequest.getFQN();
|
||||
String body = "You will no longer receive notifications of pull request " + pullRequest.getFQN()
|
||||
+ " unless mentioned. However if you subscribed to certain pull request queries, you may still "
|
||||
@ -705,7 +705,7 @@ public class DefaultMailManager implements MailManager, Serializable {
|
||||
String content = stripQuotationAndSignature(sendSetting, getText(pullRequest.getProject(), pullRequest.getUUID(), message, null));
|
||||
if (content != null) {
|
||||
comment.setContent(decorateContent(content));
|
||||
pullRequestCommentManager.save(comment, receiverEmailAddresses);
|
||||
pullRequestCommentManager.createOrUpdate(comment, receiverEmailAddresses);
|
||||
}
|
||||
}
|
||||
|
||||
@ -790,7 +790,7 @@ public class DefaultMailManager implements MailManager, Serializable {
|
||||
emailAddress.setPrimary(true);
|
||||
emailAddress.setGit(true);
|
||||
emailAddress.setOwner(user);
|
||||
emailAddressManager.save(emailAddress);
|
||||
emailAddressManager.createOrUpdate(emailAddress);
|
||||
|
||||
boolean found = false;
|
||||
for (UserAuthorization authorization: user.getProjectAuthorizations()) {
|
||||
@ -804,7 +804,7 @@ public class DefaultMailManager implements MailManager, Serializable {
|
||||
authorization.setUser(user);
|
||||
authorization.setProject(project);
|
||||
authorization.setRole(role);
|
||||
authorizationManager.save(authorization);
|
||||
authorizationManager.createOrUpdate(authorization);
|
||||
}
|
||||
|
||||
return user;
|
||||
|
||||
@ -92,7 +92,7 @@ public class BuildQueryPersonalization extends AbstractEntity implements QueryPe
|
||||
|
||||
@Override
|
||||
public void onUpdated() {
|
||||
OneDev.getInstance(BuildQueryPersonalizationManager.class).save(this);
|
||||
OneDev.getInstance(BuildQueryPersonalizationManager.class).createOrUpdate(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ public class CodeCommentQueryPersonalization extends AbstractEntity implements Q
|
||||
|
||||
@Override
|
||||
public void onUpdated() {
|
||||
OneDev.getInstance(CodeCommentQueryPersonalizationManager.class).save(this);
|
||||
OneDev.getInstance(CodeCommentQueryPersonalizationManager.class).createOrUpdate(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -96,7 +96,7 @@ public class CommitQueryPersonalization extends AbstractEntity implements QueryP
|
||||
|
||||
@Override
|
||||
public void onUpdated() {
|
||||
OneDev.getInstance(CommitQueryPersonalizationManager.class).save(this);
|
||||
OneDev.getInstance(CommitQueryPersonalizationManager.class).createOrUpdate(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ public class IssueQueryPersonalization extends AbstractEntity implements QueryPe
|
||||
|
||||
@Override
|
||||
public void onUpdated() {
|
||||
OneDev.getInstance(IssueQueryPersonalizationManager.class).save(this);
|
||||
OneDev.getInstance(IssueQueryPersonalizationManager.class).createOrUpdate(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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