package scrum.server.estimation;
import ilarkesto.core.logging.Log;
import ilarkesto.fp.Predicate;
import java.util.HashSet;
import java.util.Set;
import scrum.server.admin.User;
import scrum.server.project.Requirement;
public class RequirementEstimationVoteDao extends GRequirementEstimationVoteDao {
private static final Log LOG = Log.get(RequirementEstimationVoteDao.class);
public RequirementEstimationVote getRequirementEstimationVoteByUser(final Requirement requirement, final User user) {
return getEntity(new Predicate<RequirementEstimationVote>() {
public boolean test(RequirementEstimationVote vote) {
return vote.isRequirement(requirement) && vote.isUser(user);
}
});
}
private Set<RequirementEstimationVote> getRequirementEstimationVotesByUser(final Requirement requirement,
final User user) {
return getEntities(new Predicate<RequirementEstimationVote>() {
public boolean test(RequirementEstimationVote vote) {
return vote.isRequirement(requirement) && vote.isUser(user);
}
});
}
public RequirementEstimationVote postVote(Requirement requirement, User user) {
RequirementEstimationVote vote = newEntityInstance();
vote.setRequirement(requirement);
vote.setUser(user);
saveEntity(vote);
return vote;
}
@Override
public void ensureIntegrity() {
super.ensureIntegrity();
Set<Requirement> requirements = new HashSet<Requirement>();
for (RequirementEstimationVote vote : getEntities()) {
requirements.add(vote.getRequirement());
}
for (Requirement requirement : requirements) {
Set<User> users = requirement.getProject().getParticipants();
for (User user : users) {
Set<RequirementEstimationVote> votes = getRequirementEstimationVotesByUser(requirement, user);
if (votes.size() > 1) {
LOG.warn("Multiple estimation votes. Deleting all.");
for (RequirementEstimationVote vote : votes) {
deleteEntity(vote);
}
}
}
}
}
}