From 30fb4bccc479660d583941493f95ff0eb0823e14 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 2 Oct 2011 14:20:08 +0200 Subject: [PATCH] redefine AbstractManagerResource methods for webservice documentation --- .../resources/AbstractManagerResource.java | 40 +----- .../scm/api/rest/resources/GroupResource.java | 101 +++++++++++++- .../rest/resources/RepositoryResource.java | 128 ++++++++++++++++++ .../scm/api/rest/resources/UserResource.java | 101 +++++++++++++- 4 files changed, 334 insertions(+), 36 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java index 0e6d08d1e9..47bb7ed551 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractManagerResource.java @@ -53,21 +53,9 @@ import java.util.Collection; import java.util.Comparator; import java.util.Date; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import javax.ws.rs.core.CacheControl; -import javax.ws.rs.core.Context; import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.GenericEntity; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -145,9 +133,7 @@ public abstract class AbstractManagerResource items = fetchItems(sortby, desc, start, limit); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java index df65e3c02b..9940493d7b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java @@ -39,6 +39,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; +import org.codehaus.enunciate.jaxrs.TypeHint; import org.codehaus.enunciate.modules.jersey.SpringManagedLifecycle; import sonia.scm.group.Group; @@ -50,11 +51,24 @@ import sonia.scm.web.security.WebSecurityContext; //~--- JDK imports ------------------------------------------------------------ import java.util.Collection; +import java.util.List; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; /** * @@ -88,6 +102,62 @@ public class GroupResource this.securityContextProvider = securityContextProvider; } + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * + * @param uriInfo + * @param group + * + * @return + */ + @POST + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @Override + public Response create(@Context UriInfo uriInfo, Group group) + { + return super.create(uriInfo, group); + } + + /** + * Method description + * + * + * @param name + * + * @return + */ + @DELETE + @Path("{id}") + @Override + public Response delete(@PathParam("id") String name) + { + return super.delete(name); + } + + /** + * Method description + * + * + * @param uriInfo + * @param name + * @param group + * + * @return + */ + @PUT + @Path("{id}") + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @Override + public Response update(@Context UriInfo uriInfo, + @PathParam("id") String name, Group group) + { + return super.update(uriInfo, name, group); + } + //~--- get methods ---------------------------------------------------------- /** @@ -99,8 +169,12 @@ public class GroupResource * * @return */ + @GET + @Path("{id}") + @TypeHint(Group.class) + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Override - public Response get(Request request, String id) + public Response get(@Context Request request, @PathParam("id") String id) { Response response = null; @@ -116,6 +190,31 @@ public class GroupResource return response; } + /** + * Method description + * + * + * @param request + * @param start + * @param limit + * @param sortby + * @param desc + * + * @return + */ + @GET + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @TypeHint(List.class) + @Override + public Response getAll(@Context Request request, @DefaultValue("0") + @QueryParam("start") int start, @DefaultValue("-1") + @QueryParam("limit") int limit, @QueryParam("sortby") String sortby, + @DefaultValue("false") + @QueryParam("desc") boolean desc) + { + return super.getAll(request, start, limit, sortby, desc); + } + //~--- methods -------------------------------------------------------------- /** diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java index 63f2332b04..a7c0b5b2d5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java @@ -39,6 +39,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; +import org.codehaus.enunciate.jaxrs.TypeHint; import org.codehaus.enunciate.modules.jersey.SpringManagedLifecycle; import org.slf4j.Logger; @@ -64,6 +65,7 @@ import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryNotFoundException; import sonia.scm.util.AssertUtil; import sonia.scm.util.HttpUtil; +import sonia.scm.util.SecurityUtil; import sonia.scm.web.security.WebSecurityContext; //~--- JDK imports ------------------------------------------------------------ @@ -72,17 +74,25 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.List; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; import javax.ws.rs.core.GenericEntity; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; +import javax.ws.rs.core.UriInfo; /** * @@ -133,8 +143,119 @@ public class RepositoryResource setDisableCache(false); } + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * + * @param uriInfo + * @param repository + * + * @return + */ + @POST + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @Override + public Response create(@Context UriInfo uriInfo, Repository repository) + { + return super.create(uriInfo, repository); + } + + /** + * Method description + * + * + * @param name + * + * @return + */ + @DELETE + @Path("{id}") + @Override + public Response delete(@PathParam("id") String name) + { + return super.delete(name); + } + + /** + * Method description + * + * + * @param uriInfo + * @param name + * @param repository + * + * @return + */ + @PUT + @Path("{id}") + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @Override + public Response update(@Context UriInfo uriInfo, + @PathParam("id") String name, Repository repository) + { + return super.update(uriInfo, name, repository); + } + //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @param request + * @param id + * + * @return + */ + @GET + @Path("{id}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @TypeHint(Repository.class) + @Override + public Response get(@Context Request request, @PathParam("id") String id) + { + Response response = null; + + if (SecurityUtil.isAdmin(securityContextProvider)) + { + response = super.get(request, id); + } + else + { + response = Response.status(Response.Status.FORBIDDEN).build(); + } + + return response; + } + + /** + * Method description + * + * + * @param request + * @param start + * @param limit + * @param sortby + * @param desc + * + * @return + */ + @GET + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @TypeHint(List.class) + @Override + public Response getAll(@Context Request request, @DefaultValue("0") + @QueryParam("start") int start, @DefaultValue("-1") + @QueryParam("limit") int limit, @QueryParam("sortby") String sortby, + @DefaultValue("false") + @QueryParam("desc") boolean desc) + { + return super.getAll(request, start, limit, sortby, desc); + } + /** * Method description * @@ -150,6 +271,8 @@ public class RepositoryResource */ @GET @Path("{id}/blame") + @TypeHint(BlameResult.class) + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public Response getBlame(@PathParam("id") String id, @QueryParam("revision") String revision, @QueryParam("path") String path) @@ -204,6 +327,7 @@ public class RepositoryResource */ @GET @Path("{id}/browse") + @TypeHint(BrowserResult.class) @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public Response getBrowserResult(@PathParam("id") String id, @QueryParam("revision") String revision, @@ -254,6 +378,7 @@ public class RepositoryResource */ @GET @Path("{id}/changesets") + @TypeHint(ChangesetPagingResult.class) @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public Response getChangesets(@PathParam("id") String id, @DefaultValue("0") @QueryParam("start") int start, @DefaultValue("20") @@ -299,6 +424,7 @@ public class RepositoryResource */ @GET @Path("{id}/content") + @TypeHint(StreamingOutput.class) @Produces({ MediaType.APPLICATION_OCTET_STREAM }) public Response getContent(@PathParam("id") String id, @QueryParam("revision") String revision, @@ -358,6 +484,8 @@ public class RepositoryResource */ @GET @Path("{id}/diff") + @TypeHint(DiffStreamingOutput.class) + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public Response getDiff(@PathParam("id") String id, @QueryParam("revision") String revision, @QueryParam("path") String path) diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserResource.java index a1a866b1df..d341baccd1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/UserResource.java @@ -39,6 +39,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; +import org.codehaus.enunciate.jaxrs.TypeHint; import org.codehaus.enunciate.modules.jersey.SpringManagedLifecycle; import sonia.scm.security.EncryptionHandler; @@ -53,11 +54,24 @@ import sonia.scm.web.security.WebSecurityContext; //~--- JDK imports ------------------------------------------------------------ import java.util.Collection; +import java.util.List; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; import javax.ws.rs.core.GenericEntity; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; /** * @@ -95,6 +109,62 @@ public class UserResource extends AbstractManagerResource this.securityContextProvider = securityContextProvider; } + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * + * @param uriInfo + * @param user + * + * @return + */ + @POST + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @Override + public Response create(@Context UriInfo uriInfo, User user) + { + return super.create(uriInfo, user); + } + + /** + * Method description + * + * + * @param name + * + * @return + */ + @DELETE + @Path("{id}") + @Override + public Response delete(@PathParam("id") String name) + { + return super.delete(name); + } + + /** + * Method description + * + * + * @param uriInfo + * @param name + * @param user + * + * @return + */ + @PUT + @Path("{id}") + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @Override + public Response update(@Context UriInfo uriInfo, + @PathParam("id") String name, User user) + { + return super.update(uriInfo, name, user); + } + //~--- get methods ---------------------------------------------------------- /** @@ -106,8 +176,12 @@ public class UserResource extends AbstractManagerResource * * @return */ + @GET + @Path("{id}") + @TypeHint(User.class) + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) @Override - public Response get(Request request, String id) + public Response get(@Context Request request, @PathParam("id") String id) { Response response = null; @@ -123,6 +197,31 @@ public class UserResource extends AbstractManagerResource return response; } + /** + * Method description + * + * + * @param request + * @param start + * @param limit + * @param sortby + * @param desc + * + * @return + */ + @GET + @TypeHint(List.class) + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + @Override + public Response getAll(@Context Request request, @DefaultValue("0") + @QueryParam("start") int start, @DefaultValue("-1") + @QueryParam("limit") int limit, @QueryParam("sortby") String sortby, + @DefaultValue("false") + @QueryParam("desc") boolean desc) + { + return super.getAll(request, start, limit, sortby, desc); + } + //~--- methods -------------------------------------------------------------- /**