| // 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.restapi; | |
| import com.google.gerrit.extensions.config.FactoryModule; | |
| import com.google.gerrit.extensions.registration.DynamicSet; | |
| import com.google.gerrit.gpg.PublicKeyStore; | |
| import com.google.gerrit.gpg.UnimplementedPublicKeyStoreProvider; | |
| import com.google.gerrit.server.IdentifiedUser; | |
| import com.google.gerrit.server.ServerInitiated; | |
| import com.google.gerrit.server.UserInitiated; | |
| import com.google.gerrit.server.account.AccountLoader; | |
| import com.google.gerrit.server.account.AccountsUpdate; | |
| import com.google.gerrit.server.change.AddReviewersOp; | |
| import com.google.gerrit.server.change.AddToAttentionSetOp; | |
| import com.google.gerrit.server.change.ChangeInserter; | |
| import com.google.gerrit.server.change.ChangeResource; | |
| import com.google.gerrit.server.change.DeleteChangeOp; | |
| import com.google.gerrit.server.change.DeleteReviewerByEmailOp; | |
| import com.google.gerrit.server.change.DeleteReviewerOp; | |
| import com.google.gerrit.server.change.EmailReviewComments; | |
| import com.google.gerrit.server.change.PatchSetInserter; | |
| import com.google.gerrit.server.change.RebaseChangeOp; | |
| import com.google.gerrit.server.change.RemoveFromAttentionSetOp; | |
| import com.google.gerrit.server.change.ReviewerResource; | |
| import com.google.gerrit.server.change.SetCherryPickOp; | |
| import com.google.gerrit.server.change.SetCustomKeyedValuesOp; | |
| import com.google.gerrit.server.change.SetHashtagsOp; | |
| import com.google.gerrit.server.change.SetPrivateOp; | |
| import com.google.gerrit.server.change.SetTopicOp; | |
| import com.google.gerrit.server.change.WorkInProgressOp; | |
| import com.google.gerrit.server.comment.CommentContextLoader; | |
| import com.google.gerrit.server.config.GerritConfigListener; | |
| import com.google.gerrit.server.group.db.GroupsUpdate; | |
| import com.google.gerrit.server.project.RefValidationHelper; | |
| import com.google.gerrit.server.restapi.change.DeleteVoteOp; | |
| import com.google.gerrit.server.restapi.change.PostReviewOp; | |
| import com.google.gerrit.server.restapi.change.PreviewFix; | |
| import com.google.gerrit.server.restapi.project.CreateProject; | |
| import com.google.gerrit.server.restapi.project.ProjectNode; | |
| import com.google.gerrit.server.restapi.project.SetParent; | |
| import com.google.gerrit.server.util.AttentionSetEmail; | |
| import com.google.gerrit.server.validators.ProjectCreationValidationListener; | |
| import com.google.inject.Provides; | |
| import com.google.inject.multibindings.OptionalBinder; | |
| /** | |
| * Module to bind classes that are needed but the REST layer, but which are not REST endpoints. | |
| * | |
| * <p>REST endpoints should be bound in {@link RestApiModule}. | |
| */ | |
| public class RestModule extends FactoryModule { | |
| @Override | |
| protected void configure() { | |
| factory(AccountLoader.Factory.class); | |
| factory(AddReviewersOp.Factory.class); | |
| factory(AddToAttentionSetOp.Factory.class); | |
| factory(AttentionSetEmail.Factory.class); | |
| factory(ChangeInserter.Factory.class); | |
| factory(ChangeResource.Factory.class); | |
| factory(CommentContextLoader.Factory.class); | |
| factory(DeleteChangeOp.Factory.class); | |
| factory(DeleteReviewerByEmailOp.Factory.class); | |
| factory(DeleteReviewerOp.Factory.class); | |
| factory(DeleteVoteOp.Factory.class); | |
| factory(EmailReviewComments.Factory.class); | |
| factory(GroupsUpdate.Factory.class); | |
| factory(PatchSetInserter.Factory.class); | |
| factory(PostReviewOp.Factory.class); | |
| factory(PreviewFix.Factory.class); | |
| factory(ProjectNode.Factory.class); | |
| factory(RebaseChangeOp.Factory.class); | |
| factory(RefValidationHelper.Factory.class); | |
| factory(RemoveFromAttentionSetOp.Factory.class); | |
| factory(ReviewerResource.Factory.class); | |
| factory(SetCherryPickOp.Factory.class); | |
| factory(SetCustomKeyedValuesOp.Factory.class); | |
| factory(SetHashtagsOp.Factory.class); | |
| factory(SetPrivateOp.Factory.class); | |
| factory(SetTopicOp.Factory.class); | |
| factory(WorkInProgressOp.Factory.class); | |
| DynamicSet.bind(binder(), GerritConfigListener.class).to(SetParent.class); | |
| DynamicSet.bind(binder(), ProjectCreationValidationListener.class) | |
| .to(CreateProject.ValidBranchListener.class); | |
| OptionalBinder.newOptionalBinder(binder(), PublicKeyStore.class) | |
| .setDefault() | |
| .toProvider(UnimplementedPublicKeyStoreProvider.class); | |
| } | |
| @Provides | |
| @ServerInitiated | |
| AccountsUpdate provideServerInitiatedAccountsUpdate( | |
| @AccountsUpdate.AccountsUpdateLoader.WithReindex | |
| AccountsUpdate.AccountsUpdateLoader accountsUpdateFactory) { | |
| return accountsUpdateFactory.createWithServerIdent(); | |
| } | |
| @Provides | |
| @UserInitiated | |
| AccountsUpdate provideUserInitiatedAccountsUpdate( | |
| @AccountsUpdate.AccountsUpdateLoader.WithReindex | |
| AccountsUpdate.AccountsUpdateLoader accountsUpdateFactory, | |
| IdentifiedUser currentUser) { | |
| return accountsUpdateFactory.create(currentUser); | |
| } | |
| @Provides | |
| @ServerInitiated | |
| GroupsUpdate provideServerInitiatedGroupsUpdate(GroupsUpdate.Factory groupsUpdateFactory) { | |
| return groupsUpdateFactory.createWithServerIdent(); | |
| } | |
| @Provides | |
| @UserInitiated | |
| GroupsUpdate provideUserInitiatedGroupsUpdate( | |
| GroupsUpdate.Factory groupsUpdateFactory, IdentifiedUser currentUser) { | |
| return groupsUpdateFactory.create(currentUser); | |
| } | |
| } |