Plugin API: Add create project API
Change-Id: Ibc4de0747f10336eaa51a818672e01cfd55c4a16
This commit is contained in:

committed by
David Ostrovsky

parent
a0d6c3ae3f
commit
8f3931bb0d
@@ -17,6 +17,7 @@ package com.google.gerrit.acceptance.api.project;
|
|||||||
import com.google.gerrit.acceptance.AbstractDaemonTest;
|
import com.google.gerrit.acceptance.AbstractDaemonTest;
|
||||||
import com.google.gerrit.acceptance.NoHttpd;
|
import com.google.gerrit.acceptance.NoHttpd;
|
||||||
import com.google.gerrit.extensions.api.projects.BranchInput;
|
import com.google.gerrit.extensions.api.projects.BranchInput;
|
||||||
|
import com.google.gerrit.extensions.api.projects.ProjectInput;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||||
@@ -27,6 +28,22 @@ import java.io.IOException;
|
|||||||
@NoHttpd
|
@NoHttpd
|
||||||
public class ProjectIT extends AbstractDaemonTest {
|
public class ProjectIT extends AbstractDaemonTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createProjectFoo() throws RestApiException {
|
||||||
|
gApi.projects()
|
||||||
|
.name("foo")
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = RestApiException.class)
|
||||||
|
public void createProjectFooBar() throws RestApiException {
|
||||||
|
ProjectInput in = new ProjectInput();
|
||||||
|
in.name = "bar";
|
||||||
|
gApi.projects()
|
||||||
|
.name("foo")
|
||||||
|
.create(in);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createBranch() throws GitAPIException,
|
public void createBranch() throws GitAPIException,
|
||||||
IOException, RestApiException {
|
IOException, RestApiException {
|
||||||
|
@@ -14,6 +14,10 @@
|
|||||||
|
|
||||||
package com.google.gerrit.extensions.api.projects;
|
package com.google.gerrit.extensions.api.projects;
|
||||||
|
|
||||||
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
|
||||||
public interface ProjectApi {
|
public interface ProjectApi {
|
||||||
|
ProjectApi create() throws RestApiException;
|
||||||
|
ProjectApi create(ProjectInput in) throws RestApiException;
|
||||||
BranchApi branch(String ref);
|
BranchApi branch(String ref);
|
||||||
}
|
}
|
||||||
|
@@ -14,28 +14,93 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.api.projects;
|
package com.google.gerrit.server.api.projects;
|
||||||
|
|
||||||
|
import com.google.gerrit.common.errors.ProjectCreationFailedException;
|
||||||
import com.google.gerrit.extensions.api.projects.BranchApi;
|
import com.google.gerrit.extensions.api.projects.BranchApi;
|
||||||
import com.google.gerrit.extensions.api.projects.ProjectApi;
|
import com.google.gerrit.extensions.api.projects.ProjectApi;
|
||||||
|
import com.google.gerrit.extensions.api.projects.ProjectInput;
|
||||||
|
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||||
|
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||||
|
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.TopLevelResource;
|
||||||
|
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
||||||
|
import com.google.gerrit.server.project.CreateProject;
|
||||||
import com.google.gerrit.server.project.ProjectResource;
|
import com.google.gerrit.server.project.ProjectResource;
|
||||||
import com.google.inject.Inject;
|
import com.google.gerrit.server.project.ProjectsCollection;
|
||||||
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.assistedinject.Assisted;
|
import com.google.inject.assistedinject.Assisted;
|
||||||
|
import com.google.inject.assistedinject.AssistedInject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
public class ProjectApiImpl implements ProjectApi {
|
public class ProjectApiImpl implements ProjectApi {
|
||||||
interface Factory {
|
interface Factory {
|
||||||
ProjectApiImpl create(ProjectResource project);
|
ProjectApiImpl create(ProjectResource project);
|
||||||
|
ProjectApiImpl create(String name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final Provider<CreateProject.Factory> createProjectFactory;
|
||||||
|
private final ProjectApiImpl.Factory projectApi;
|
||||||
|
private final ProjectsCollection projects;
|
||||||
private final ProjectResource project;
|
private final ProjectResource project;
|
||||||
|
private final String name;
|
||||||
private final BranchApiImpl.Factory branchApi;
|
private final BranchApiImpl.Factory branchApi;
|
||||||
|
|
||||||
@Inject
|
@AssistedInject
|
||||||
ProjectApiImpl(
|
ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory,
|
||||||
|
ProjectApiImpl.Factory projectApi,
|
||||||
|
ProjectsCollection projects,
|
||||||
BranchApiImpl.Factory branchApiFactory,
|
BranchApiImpl.Factory branchApiFactory,
|
||||||
@Assisted ProjectResource project) {
|
@Assisted ProjectResource project) {
|
||||||
|
this(createProjectFactory, projectApi, projects, branchApiFactory, project,
|
||||||
|
null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@AssistedInject
|
||||||
|
ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory,
|
||||||
|
ProjectApiImpl.Factory projectApi,
|
||||||
|
ProjectsCollection projects,
|
||||||
|
BranchApiImpl.Factory branchApiFactory,
|
||||||
|
@Assisted String name) {
|
||||||
|
this(createProjectFactory, projectApi, projects, branchApiFactory, null,
|
||||||
|
name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory,
|
||||||
|
ProjectApiImpl.Factory projectApi,
|
||||||
|
ProjectsCollection projects,
|
||||||
|
BranchApiImpl.Factory branchApiFactory,
|
||||||
|
ProjectResource project,
|
||||||
|
String name) {
|
||||||
|
this.createProjectFactory = createProjectFactory;
|
||||||
|
this.projectApi = projectApi;
|
||||||
|
this.projects = projects;
|
||||||
this.project = project;
|
this.project = project;
|
||||||
|
this.name = name;
|
||||||
this.branchApi = branchApiFactory;
|
this.branchApi = branchApiFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProjectApi create() throws RestApiException {
|
||||||
|
return create(new ProjectInput());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProjectApi create(ProjectInput in) throws RestApiException {
|
||||||
|
try {
|
||||||
|
if (in.name != null && !name.equals(in.name)) {
|
||||||
|
throw new RestApiException("name must match input.name");
|
||||||
|
}
|
||||||
|
createProjectFactory.get().create(name)
|
||||||
|
.apply(TopLevelResource.INSTANCE, in);
|
||||||
|
return projectApi.create(projects.parse(name));
|
||||||
|
} catch (BadRequestException | UnprocessableEntityException
|
||||||
|
| ResourceConflictException | ResourceNotFoundException
|
||||||
|
| ProjectCreationFailedException | IOException e) {
|
||||||
|
throw new RestApiException("Cannot create project", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BranchApi branch(String ref) {
|
public BranchApi branch(String ref) {
|
||||||
return branchApi.create(project, ref);
|
return branchApi.create(project, ref);
|
||||||
|
@@ -37,7 +37,9 @@ class ProjectsImpl implements Projects {
|
|||||||
public ProjectApi name(String name) throws RestApiException {
|
public ProjectApi name(String name) throws RestApiException {
|
||||||
try {
|
try {
|
||||||
return api.create(projects.parse(name));
|
return api.create(projects.parse(name));
|
||||||
} catch (IOException | UnprocessableEntityException e) {
|
} catch (UnprocessableEntityException e) {
|
||||||
|
return api.create(name);
|
||||||
|
} catch (IOException e) {
|
||||||
throw new RestApiException("Cannot retrieve project");
|
throw new RestApiException("Cannot retrieve project");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user