Line data Source code
1 : // Copyright (C) 2022 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.api.projects; 16 : 17 : import static com.google.gerrit.server.api.ApiUtil.asRestApiException; 18 : import static com.google.gerrit.server.project.ProjectCache.illegalState; 19 : 20 : import com.google.gerrit.extensions.api.projects.SubmitRequirementApi; 21 : import com.google.gerrit.extensions.common.Input; 22 : import com.google.gerrit.extensions.common.SubmitRequirementInfo; 23 : import com.google.gerrit.extensions.common.SubmitRequirementInput; 24 : import com.google.gerrit.extensions.restapi.IdString; 25 : import com.google.gerrit.extensions.restapi.RestApiException; 26 : import com.google.gerrit.server.permissions.PermissionBackendException; 27 : import com.google.gerrit.server.project.ProjectCache; 28 : import com.google.gerrit.server.project.ProjectResource; 29 : import com.google.gerrit.server.project.SubmitRequirementResource; 30 : import com.google.gerrit.server.restapi.project.CreateSubmitRequirement; 31 : import com.google.gerrit.server.restapi.project.DeleteSubmitRequirement; 32 : import com.google.gerrit.server.restapi.project.GetSubmitRequirement; 33 : import com.google.gerrit.server.restapi.project.SubmitRequirementsCollection; 34 : import com.google.gerrit.server.restapi.project.UpdateSubmitRequirement; 35 : import com.google.inject.Inject; 36 : import com.google.inject.assistedinject.Assisted; 37 : 38 : public class SubmitRequirementApiImpl implements SubmitRequirementApi { 39 : interface Factory { 40 : SubmitRequirementApiImpl create(ProjectResource project, String name); 41 : } 42 : 43 : private final SubmitRequirementsCollection submitRequirements; 44 : private final CreateSubmitRequirement createSubmitRequirement; 45 : private final UpdateSubmitRequirement updateSubmitRequirement; 46 : private final DeleteSubmitRequirement deleteSubmitRequirement; 47 : private final GetSubmitRequirement getSubmitRequirement; 48 : private final String name; 49 : private final ProjectCache projectCache; 50 : 51 : private ProjectResource project; 52 : 53 : @Inject 54 : SubmitRequirementApiImpl( 55 : SubmitRequirementsCollection submitRequirements, 56 : CreateSubmitRequirement createSubmitRequirement, 57 : UpdateSubmitRequirement updateSubmitRequirement, 58 : DeleteSubmitRequirement deleteSubmitRequirement, 59 : GetSubmitRequirement getSubmitRequirement, 60 : ProjectCache projectCache, 61 : @Assisted ProjectResource project, 62 2 : @Assisted String name) { 63 2 : this.submitRequirements = submitRequirements; 64 2 : this.createSubmitRequirement = createSubmitRequirement; 65 2 : this.updateSubmitRequirement = updateSubmitRequirement; 66 2 : this.deleteSubmitRequirement = deleteSubmitRequirement; 67 2 : this.getSubmitRequirement = getSubmitRequirement; 68 2 : this.projectCache = projectCache; 69 2 : this.project = project; 70 2 : this.name = name; 71 2 : } 72 : 73 : @Override 74 : public SubmitRequirementApi create(SubmitRequirementInput input) throws RestApiException { 75 : try { 76 2 : createSubmitRequirement.apply(project, IdString.fromDecoded(name), input); 77 : 78 : // recreate project resource because project state was updated 79 2 : project = 80 : new ProjectResource( 81 : projectCache 82 2 : .get(project.getNameKey()) 83 2 : .orElseThrow(illegalState(project.getNameKey())), 84 2 : project.getUser()); 85 : 86 2 : return this; 87 1 : } catch (Exception e) { 88 1 : throw asRestApiException("Cannot create submit requirement", e); 89 : } 90 : } 91 : 92 : @Override 93 : public SubmitRequirementInfo get() throws RestApiException { 94 : try { 95 2 : return getSubmitRequirement.apply(resource()).value(); 96 2 : } catch (Exception e) { 97 2 : throw asRestApiException("Cannot get submit requirement", e); 98 : } 99 : } 100 : 101 : @Override 102 : public SubmitRequirementInfo update(SubmitRequirementInput input) throws RestApiException { 103 : try { 104 1 : return updateSubmitRequirement.apply(resource(), input).value(); 105 1 : } catch (Exception e) { 106 1 : throw asRestApiException("Cannot update submit requirement", e); 107 : } 108 : } 109 : 110 : @Override 111 : public void delete() throws RestApiException { 112 : try { 113 1 : deleteSubmitRequirement.apply(resource(), new Input()); 114 1 : } catch (Exception e) { 115 1 : throw asRestApiException("Cannot delete submit requirement", e); 116 1 : } 117 1 : } 118 : 119 : private SubmitRequirementResource resource() throws RestApiException, PermissionBackendException { 120 2 : return submitRequirements.parse(project, IdString.fromDecoded(name)); 121 : } 122 : }