Plugin API: Add get project API

Change-Id: Iff3ddf558a1526cfa7324175767ec7e7bc0f7803
This commit is contained in:
David Ostrovsky
2014-03-24 23:11:40 -07:00
parent 8f3931bb0d
commit cddaea317a
4 changed files with 49 additions and 9 deletions

View File

@@ -14,6 +14,8 @@
package com.google.gerrit.acceptance.api.project; package com.google.gerrit.acceptance.api.project;
import static org.junit.Assert.assertEquals;
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;
@@ -30,17 +32,21 @@ public class ProjectIT extends AbstractDaemonTest {
@Test @Test
public void createProjectFoo() throws RestApiException { public void createProjectFoo() throws RestApiException {
gApi.projects() String name = "foo";
.name("foo") assertEquals(name,
.create(); gApi.projects()
.name(name)
.create()
.get()
.name);
} }
@Test(expected = RestApiException.class) @Test(expected = RestApiException.class)
public void createProjectFooBar() throws RestApiException { public void createProjectFooBar() throws RestApiException {
ProjectInput in = new ProjectInput(); ProjectInput in = new ProjectInput();
in.name = "bar"; in.name = "foo";
gApi.projects() gApi.projects()
.name("foo") .name("bar")
.create(in); .create(in);
} }

View File

@@ -24,10 +24,13 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.gerrit.acceptance.AbstractDaemonTest; import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.RestResponse; import com.google.gerrit.acceptance.RestResponse;
import com.google.gerrit.extensions.api.GerritApi;
import com.google.gerrit.extensions.api.projects.ProjectApi;
import com.google.gerrit.extensions.api.projects.ProjectInput; import com.google.gerrit.extensions.api.projects.ProjectInput;
import com.google.gerrit.extensions.common.InheritableBoolean; import com.google.gerrit.extensions.common.InheritableBoolean;
import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.common.SubmitType; import com.google.gerrit.extensions.common.SubmitType;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.AccountGroup;
import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.reviewdb.client.RefNames;
@@ -65,6 +68,21 @@ public class CreateProjectIT extends AbstractDaemonTest {
@Inject @Inject
private GitRepositoryManager git; private GitRepositoryManager git;
@Inject
private GerritApi gApi;
@Test
public void testCreateProjectApi() throws RestApiException, IOException {
final String newProjectName = "newProject";
ProjectApi projectApi = gApi.projects().name(newProjectName).create();
ProjectInfo p = projectApi.get();
assertEquals(newProjectName, p.name);
ProjectState projectState = projectCache.get(new Project.NameKey(newProjectName));
assertNotNull(projectState);
assertProjectInfo(projectState.getProject(), p);
assertHead(newProjectName, "refs/heads/master");
}
@Test @Test
public void testCreateProject() throws IOException { public void testCreateProject() throws IOException {
final String newProjectName = "newProject"; final String newProjectName = "newProject";

View File

@@ -14,10 +14,12 @@
package com.google.gerrit.extensions.api.projects; package com.google.gerrit.extensions.api.projects;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestApiException;
public interface ProjectApi { public interface ProjectApi {
ProjectApi create() throws RestApiException; ProjectApi create() throws RestApiException;
ProjectApi create(ProjectInput in) throws RestApiException; ProjectApi create(ProjectInput in) throws RestApiException;
ProjectInfo get();
BranchApi branch(String ref); BranchApi branch(String ref);
} }

View File

@@ -14,10 +14,12 @@
package com.google.gerrit.server.api.projects; package com.google.gerrit.server.api.projects;
import com.google.common.base.Preconditions;
import com.google.gerrit.common.errors.ProjectCreationFailedException; 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.api.projects.ProjectInput;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
@@ -25,6 +27,7 @@ import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.extensions.restapi.TopLevelResource;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.server.project.CreateProject; import com.google.gerrit.server.project.CreateProject;
import com.google.gerrit.server.project.ProjectJson;
import com.google.gerrit.server.project.ProjectResource; import com.google.gerrit.server.project.ProjectResource;
import com.google.gerrit.server.project.ProjectsCollection; import com.google.gerrit.server.project.ProjectsCollection;
import com.google.inject.Provider; import com.google.inject.Provider;
@@ -43,6 +46,7 @@ public class ProjectApiImpl implements ProjectApi {
private final ProjectApiImpl.Factory projectApi; private final ProjectApiImpl.Factory projectApi;
private final ProjectsCollection projects; private final ProjectsCollection projects;
private final ProjectResource project; private final ProjectResource project;
private final ProjectJson projectJson;
private final String name; private final String name;
private final BranchApiImpl.Factory branchApi; private final BranchApiImpl.Factory branchApi;
@@ -50,31 +54,35 @@ public class ProjectApiImpl implements ProjectApi {
ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory, ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory,
ProjectApiImpl.Factory projectApi, ProjectApiImpl.Factory projectApi,
ProjectsCollection projects, ProjectsCollection projects,
ProjectJson projectJson,
BranchApiImpl.Factory branchApiFactory, BranchApiImpl.Factory branchApiFactory,
@Assisted ProjectResource project) { @Assisted ProjectResource project) {
this(createProjectFactory, projectApi, projects, branchApiFactory, project, this(createProjectFactory, projectApi, projects, projectJson,
null); branchApiFactory, project, null);
} }
@AssistedInject @AssistedInject
ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory, ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory,
ProjectApiImpl.Factory projectApi, ProjectApiImpl.Factory projectApi,
ProjectsCollection projects, ProjectsCollection projects,
ProjectJson projectJson,
BranchApiImpl.Factory branchApiFactory, BranchApiImpl.Factory branchApiFactory,
@Assisted String name) { @Assisted String name) {
this(createProjectFactory, projectApi, projects, branchApiFactory, null, this(createProjectFactory, projectApi, projects, projectJson,
name); branchApiFactory, null, name);
} }
private ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory, private ProjectApiImpl(Provider<CreateProject.Factory> createProjectFactory,
ProjectApiImpl.Factory projectApi, ProjectApiImpl.Factory projectApi,
ProjectsCollection projects, ProjectsCollection projects,
ProjectJson projectJson,
BranchApiImpl.Factory branchApiFactory, BranchApiImpl.Factory branchApiFactory,
ProjectResource project, ProjectResource project,
String name) { String name) {
this.createProjectFactory = createProjectFactory; this.createProjectFactory = createProjectFactory;
this.projectApi = projectApi; this.projectApi = projectApi;
this.projects = projects; this.projects = projects;
this.projectJson = projectJson;
this.project = project; this.project = project;
this.name = name; this.name = name;
this.branchApi = branchApiFactory; this.branchApi = branchApiFactory;
@@ -101,6 +109,12 @@ public class ProjectApiImpl implements ProjectApi {
} }
} }
@Override
public ProjectInfo get() {
Preconditions.checkNotNull(project);
return projectJson.format(project);
}
@Override @Override
public BranchApi branch(String ref) { public BranchApi branch(String ref) {
return branchApi.create(project, ref); return branchApi.create(project, ref);