// Copyright (C) 2012 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.change; import static com.google.common.base.Preconditions.checkArgument; import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.restapi.RestResource; import com.google.gerrit.extensions.restapi.RestView; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.project.ChangeControl; import com.google.inject.TypeLiteral; import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; public class ReviewerResource implements RestResource { public static final TypeLiteral<RestView<ReviewerResource>> REVIEWER_KIND = new TypeLiteral<RestView<ReviewerResource>>() {}; public interface Factory { ReviewerResource create(ChangeResource change, Account.Id id); ReviewerResource create(RevisionResource revision, Account.Id id); } private final ChangeResource change; private final RevisionResource revision; @Nullable private final IdentifiedUser user; @Nullable private final Address address; @AssistedInject ReviewerResource( IdentifiedUser.GenericFactory userFactory, @Assisted ChangeResource change, @Assisted Account.Id id) { this.change = change; this.user = userFactory.create(id); this.revision = null; this.address = null; } @AssistedInject ReviewerResource( IdentifiedUser.GenericFactory userFactory, @Assisted RevisionResource revision, @Assisted Account.Id id) { this.revision = revision; this.change = revision.getChangeResource(); this.user = userFactory.create(id); this.address = null; } ReviewerResource(ChangeResource change, Address address) { this.change = change; this.address = address; this.revision = null; this.user = null; } ReviewerResource(RevisionResource revision, Address address) { this.revision = revision; this.change = revision.getChangeResource(); this.address = address; this.user = null; } public ChangeResource getChangeResource() { return change; } public RevisionResource getRevisionResource() { return revision; } public Change.Id getChangeId() { return change.getId(); } public Change getChange() { return change.getChange(); } public IdentifiedUser getReviewerUser() { checkArgument(user != null, "no user provided"); return user; } public Address getReviewerByEmail() { checkArgument(address != null, "no address provided"); return address; } /** * Check if this resource was constructed by email or by {@code Account.Id}. * * @return true if the resource was constructed by providing an {@code Address}; false if the * resource was constructed by providing an {@code Account.Id}. */ public boolean isByEmail() { return user == null; } /** * Get the control for the caller's user. * * @return the control for the caller's user (as opposed to the reviewer's user as returned by * {@link #getReviewerControl()}). */ public ChangeControl getControl() { return change.getControl(); } /** * Get the control for the reviewer's user. * * @return the control for the reviewer's user (as opposed to the caller's user as returned by * {@link #getControl()}). */ public ChangeControl getReviewerControl() { checkArgument(user != null, "no user provided"); return change.getControl().forUser(user); } }