Line data Source code
1 : // Copyright (C) 2016 The Android Open Source Project 2 : // 3 : // Licensed under the Apache License, Version 2.0 (the "License"); 4 : // you may not use this file except in compliance with the License. 5 : // You may obtain a copy of the License at 6 : // 7 : // http://www.apache.org/licenses/LICENSE-2.0 8 : // 9 : // Unless required by applicable law or agreed to in writing, software 10 : // distributed under the License is distributed on an "AS IS" BASIS, 11 : // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 : // See the License for the specific language governing permissions and 13 : // limitations under the License. 14 : 15 : package com.google.gerrit.server.mail.send; 16 : 17 : import com.google.gerrit.common.Nullable; 18 : import com.google.gerrit.entities.Account; 19 : import com.google.gerrit.entities.Address; 20 : import com.google.gerrit.entities.Change; 21 : import com.google.gerrit.entities.NotifyConfig.NotifyType; 22 : import com.google.gerrit.entities.Project; 23 : import com.google.gerrit.exceptions.EmailException; 24 : import com.google.gerrit.extensions.api.changes.RecipientType; 25 : import com.google.inject.Inject; 26 : import com.google.inject.assistedinject.Assisted; 27 : import java.util.ArrayList; 28 : import java.util.Collection; 29 : import java.util.HashSet; 30 : import java.util.List; 31 : import java.util.Set; 32 : 33 : /** Let users know that a reviewer and possibly her review have been removed. */ 34 : public class DeleteReviewerSender extends ReplyToChangeSender { 35 10 : private final Set<Account.Id> reviewers = new HashSet<>(); 36 10 : private final Set<Address> reviewersByEmail = new HashSet<>(); 37 : 38 : public interface Factory extends ReplyToChangeSender.Factory<DeleteReviewerSender> { 39 : @Override 40 : DeleteReviewerSender create(Project.NameKey project, Change.Id changeId); 41 : } 42 : 43 : @Inject 44 : public DeleteReviewerSender( 45 : EmailArguments args, @Assisted Project.NameKey project, @Assisted Change.Id changeId) { 46 10 : super(args, "deleteReviewer", newChangeData(args, project, changeId)); 47 10 : } 48 : 49 : public void addReviewers(Collection<Account.Id> cc) { 50 10 : reviewers.addAll(cc); 51 10 : } 52 : 53 : public void addReviewersByEmail(Collection<Address> cc) { 54 2 : reviewersByEmail.addAll(cc); 55 2 : } 56 : 57 : @Override 58 : protected void init() throws EmailException { 59 10 : super.init(); 60 : 61 10 : ccAllApprovals(); 62 10 : bccStarredBy(); 63 10 : ccExistingReviewers(); 64 10 : includeWatchers(NotifyType.ALL_COMMENTS); 65 10 : reviewers.stream().forEach(r -> add(RecipientType.TO, r)); 66 10 : addByEmail(RecipientType.TO, reviewersByEmail); 67 10 : } 68 : 69 : @Override 70 : protected void formatChange() throws EmailException { 71 10 : appendText(textTemplate("DeleteReviewer")); 72 10 : if (useHtml()) { 73 10 : appendHtml(soyHtmlTemplate("DeleteReviewerHtml")); 74 : } 75 10 : } 76 : 77 : @Nullable 78 : public List<String> getReviewerNames() { 79 10 : if (reviewers.isEmpty() && reviewersByEmail.isEmpty()) { 80 0 : return null; 81 : } 82 10 : List<String> names = new ArrayList<>(); 83 10 : for (Account.Id id : reviewers) { 84 10 : names.add(getNameFor(id)); 85 10 : } 86 10 : for (Address a : reviewersByEmail) { 87 2 : names.add(a.toString()); 88 2 : } 89 10 : return names; 90 : } 91 : 92 : @Override 93 : protected void setupSoyContext() { 94 10 : super.setupSoyContext(); 95 10 : soyContextEmailData.put("reviewerNames", getReviewerNames()); 96 10 : } 97 : }