| // Copyright (C) 2023 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.gerrit.server.mail; |
| |
| import com.google.gerrit.entities.Address; |
| import com.google.gerrit.entities.Change; |
| import com.google.gerrit.entities.Project; |
| import com.google.gerrit.entities.Project.NameKey; |
| import com.google.gerrit.entities.SubmitRequirement; |
| import com.google.gerrit.entities.SubmitRequirementResult; |
| import com.google.gerrit.extensions.client.ChangeKind; |
| import com.google.gerrit.server.IdentifiedUser; |
| import com.google.gerrit.server.account.AccountSshKey; |
| import com.google.gerrit.server.mail.send.AttentionSetChangeEmailDecorator; |
| import com.google.gerrit.server.mail.send.ChangeEmail; |
| import com.google.gerrit.server.mail.send.ChangeEmail.ChangeEmailDecorator; |
| import com.google.gerrit.server.mail.send.CommentChangeEmailDecorator; |
| import com.google.gerrit.server.mail.send.DeleteReviewerChangeEmailDecorator; |
| import com.google.gerrit.server.mail.send.InboundEmailRejectionEmailDecorator.InboundEmailError; |
| import com.google.gerrit.server.mail.send.OutgoingEmail; |
| import com.google.gerrit.server.mail.send.OutgoingEmail.EmailDecorator; |
| import com.google.gerrit.server.mail.send.RegisterNewEmailDecorator; |
| import com.google.gerrit.server.mail.send.ReplacePatchSetChangeEmailDecorator; |
| import com.google.gerrit.server.mail.send.StartReviewChangeEmailDecorator; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Optional; |
| import org.eclipse.jgit.lib.ObjectId; |
| |
| /** |
| * Set of factories for default email notifications. |
| * |
| * <p>To send a change related email, first {@link ChangeEmailDecorator} needs to be constructed and |
| * configured. The decorator is then passed in {@link #createChangeEmail(NameKey, Change.Id, |
| * ChangeEmailDecorator)} and finally the result to {@link #createOutgoingEmail(String, |
| * EmailDecorator)} to be sent. |
| */ |
| public interface EmailFactories { |
| // messageClass names used for logging and email filtering in email clients. |
| String CHANGE_ABANDONED = "abandon"; |
| String ATTENTION_SET_ADDED = "addToAttentionSet"; |
| String ATTENTION_SET_REMOVED = "removeFromAttentionSet"; |
| String COMMENTS_ADDED = "comment"; |
| String REVIEWER_DELETED = "deleteReviewer"; |
| String VOTE_DELETED = "deleteVote"; |
| String CHANGE_MERGED = "merged"; |
| String NEW_PATCHSET_ADDED = "newpatchset"; |
| String CHANGE_RESTORED = "restore"; |
| String CHANGE_REVERTED = "revert"; |
| String REVIEW_REQUESTED = "newchange"; |
| String KEY_ADDED = "addkey"; |
| String KEY_DELETED = "deletekey"; |
| String PASSWORD_UPDATED = "HttpPasswordUpdate"; |
| String INBOUND_EMAIL_REJECTED = "error"; |
| String NEW_EMAIL_REGISTERED = "registernewemail"; |
| |
| /** ChangeEmail decorator that adds information about change being abandoned to the email. */ |
| ChangeEmailDecorator createAbandonedChangeEmail(); |
| |
| /** ChangeEmail decorator that adds information about attention set change to the email. */ |
| AttentionSetChangeEmailDecorator createAttentionSetChangeEmail(); |
| |
| /** ChangeEmail decorator that adds information about an iteration of review to the email. */ |
| CommentChangeEmailDecorator createCommentChangeEmail( |
| Project.NameKey project, |
| Change.Id changeId, |
| ObjectId preUpdateMetaId, |
| Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults); |
| |
| /** ChangeEmail decorator that adds information about deleted reviewer to the email. */ |
| DeleteReviewerChangeEmailDecorator createDeleteReviewerChangeEmail(); |
| |
| /** ChangeEmail decorator that adds information about deleted vote to the email. */ |
| ChangeEmailDecorator createDeleteVoteChangeEmail(); |
| |
| /** ChangeEmail decorator that adds information about change being merged to the email. */ |
| ChangeEmailDecorator createMergedChangeEmail(Optional<String> stickyApprovalDiff); |
| |
| /** ChangeEmail decorator that adds information about a new patchset added to the change. */ |
| ReplacePatchSetChangeEmailDecorator createReplacePatchSetChangeEmail( |
| Project.NameKey project, |
| Change.Id changeId, |
| ChangeKind changeKind, |
| ObjectId preUpdateMetaId, |
| Map<SubmitRequirement, SubmitRequirementResult> postUpdateSubmitRequirementResults); |
| |
| /** ChangeEmail decorator that adds information about change being restored to the email. */ |
| ChangeEmailDecorator createRestoredChangeEmail(); |
| |
| /** ChangeEmail decorator that adds information about change being reverted to the email. */ |
| ChangeEmailDecorator createRevertedChangeEmail(); |
| |
| /** |
| * ChangeEmail decorator that adds information when change is uploaded or first sent to review. |
| */ |
| StartReviewChangeEmailDecorator createStartReviewChangeEmail(); |
| |
| /** Base email decorator for change-related emails. */ |
| ChangeEmail createChangeEmail( |
| Project.NameKey project, Change.Id changeId, ChangeEmailDecorator changeEmailDecorator); |
| |
| /** Email decorator for adding a key to the account. */ |
| EmailDecorator createAddKeyEmail(IdentifiedUser user, AccountSshKey sshKey); |
| |
| /** Email decorator for adding gpg keys to the account. */ |
| EmailDecorator createAddKeyEmail(IdentifiedUser user, List<String> gpgKeys); |
| |
| /** Email decorator for adding a key to the account. */ |
| EmailDecorator createDeleteKeyEmail(IdentifiedUser user, AccountSshKey sshKey); |
| |
| /** Email decorator for adding gpg keys to the account. */ |
| EmailDecorator createDeleteKeyEmail(IdentifiedUser user, List<String> gpgKeys); |
| |
| /** Email decorator for password modification operations. */ |
| EmailDecorator createHttpPasswordUpdateEmail(IdentifiedUser user, String operation); |
| |
| /** Email decorator for inbound email errors. */ |
| EmailDecorator createInboundEmailRejectionEmail( |
| Address to, String threadId, InboundEmailError reason); |
| |
| /** Email decorator for the "new email address added" notification. */ |
| RegisterNewEmailDecorator createRegisterNewEmail(String address); |
| |
| /** Base class for any outgoing email. */ |
| OutgoingEmail createOutgoingEmail(String messageClass, EmailDecorator emailDecorator); |
| } |