Line data Source code
1 : // Copyright (C) 2018 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.restapi.project; 16 : 17 : import com.google.gerrit.extensions.api.projects.DashboardInfo; 18 : import com.google.gerrit.extensions.api.projects.SetDashboardInput; 19 : import com.google.gerrit.extensions.restapi.IdString; 20 : import com.google.gerrit.extensions.restapi.MethodNotAllowedException; 21 : import com.google.gerrit.extensions.restapi.Response; 22 : import com.google.gerrit.extensions.restapi.RestApiException; 23 : import com.google.gerrit.extensions.restapi.RestCollectionCreateView; 24 : import com.google.gerrit.server.permissions.PermissionBackendException; 25 : import com.google.gerrit.server.project.DashboardResource; 26 : import com.google.gerrit.server.project.ProjectResource; 27 : import com.google.inject.Inject; 28 : import com.google.inject.Provider; 29 : import java.io.IOException; 30 : import org.kohsuke.args4j.Option; 31 : 32 : public class CreateDashboard 33 : implements RestCollectionCreateView<ProjectResource, DashboardResource, SetDashboardInput> { 34 : private final Provider<SetDefaultDashboard> setDefault; 35 : 36 : @Option(name = "--inherited", usage = "set dashboard inherited by children") 37 : private boolean inherited; 38 : 39 : @Inject 40 0 : CreateDashboard(Provider<SetDefaultDashboard> setDefault) { 41 0 : this.setDefault = setDefault; 42 0 : } 43 : 44 : @Override 45 : public Response<DashboardInfo> apply(ProjectResource parent, IdString id, SetDashboardInput input) 46 : throws RestApiException, IOException, PermissionBackendException { 47 0 : parent.getProjectState().checkStatePermitsWrite(); 48 0 : if (!DashboardsCollection.isDefaultDashboard(id)) { 49 0 : throw new MethodNotAllowedException("cannot create non-default dashboard"); 50 : } 51 0 : SetDefaultDashboard set = setDefault.get(); 52 0 : set.inherited = inherited; 53 0 : return Response.created( 54 0 : set.apply( 55 0 : DashboardResource.projectDefault(parent.getProjectState(), parent.getUser()), input) 56 0 : .value()); 57 : } 58 : }