LCOV - code coverage report
Current view: top level - server/api/projects - SubmitRequirementApiImpl.java (source / functions) Hit Total Coverage
Test: _coverage_report.dat Lines: 30 30 100.0 %
Date: 2022-11-19 15:00:39 Functions: 6 6 100.0 %

          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             : }

Generated by: LCOV version 1.16+git.20220603.dfeb750