diff --git a/scm-webapp/src/main/java/sonia/scm/Group.java b/scm-webapp/src/main/java/sonia/scm/Group.java index 935674afb3..15624f4b0d 100644 --- a/scm-webapp/src/main/java/sonia/scm/Group.java +++ b/scm-webapp/src/main/java/sonia/scm/Group.java @@ -16,16 +16,23 @@ import sonia.scm.util.Util; import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; /** * * @author Sebastian Sdorra */ -@XmlRootElement +@XmlRootElement(name = "groups") +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(propOrder = { "name", "members" }) public class Group implements Serializable { @@ -34,6 +41,12 @@ public class Group implements Serializable //~--- constructors --------------------------------------------------------- + /** + * Constructs ... + * + */ + public Group() {} + /** * Constructs ... * @@ -59,6 +72,24 @@ public class Group implements Serializable this.members = members; } + /** + * Constructs ... + * + * + * @param name + * @param members + */ + public Group(String name, String... members) + { + this.name = name; + this.members = new ArrayList(); + + if (Util.isNotEmpty(members)) + { + this.members.addAll(Arrays.asList(members)); + } + } + //~--- methods -------------------------------------------------------------- /** @@ -154,6 +185,7 @@ public class Group implements Serializable //~--- fields --------------------------------------------------------------- /** Field description */ + @XmlElement(name = "members") private List members; /** Field description */ diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java b/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java index 865d07bedc..44055af232 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/JsonJaxbContextResolver.java @@ -10,7 +10,6 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- import sonia.scm.Group; - //~--- JDK imports ------------------------------------------------------------ import com.sun.jersey.api.json.JSONConfiguration; @@ -28,7 +27,6 @@ import javax.xml.bind.JAXBContext; * * @author Sebastian Sdorra */ -@Provider public class JsonJaxbContextResolver implements ContextResolver { @@ -42,7 +40,7 @@ public class JsonJaxbContextResolver implements ContextResolver { this.context = new JSONJAXBContext( JSONConfiguration.mapped().rootUnwrapping(true).arrays( - "members").build(), types.toArray(new Class[0])); + "member", "groups").build(), types.toArray(new Class[0])); } //~--- get methods ---------------------------------------------------------- @@ -69,5 +67,6 @@ public class JsonJaxbContextResolver implements ContextResolver private JAXBContext context; /** Field description */ - private List types = Arrays.asList(new Class[] { Group.class }); + private List types = Arrays.asList(new Class[] { + Group.class }); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/UriExtensionsConfig.java b/scm-webapp/src/main/java/sonia/scm/api/rest/UriExtensionsConfig.java index 133eccafd3..915821197b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/UriExtensionsConfig.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/UriExtensionsConfig.java @@ -23,6 +23,10 @@ import javax.ws.rs.core.MediaType; public class UriExtensionsConfig extends PackagesResourceConfig { + public static final String EXTENSION_XML = "xml"; + + public static final String EXTENSION_JSON = "json"; + /** * Constructs ... * @@ -68,8 +72,8 @@ public class UriExtensionsConfig extends PackagesResourceConfig if (mediaTypeMap == null) { mediaTypeMap = new HashMap(); - mediaTypeMap.put("json", MediaType.APPLICATION_JSON_TYPE); - mediaTypeMap.put("xml", MediaType.APPLICATION_XML_TYPE); + mediaTypeMap.put(EXTENSION_JSON, MediaType.APPLICATION_JSON_TYPE); + mediaTypeMap.put(EXTENSION_XML, MediaType.APPLICATION_XML_TYPE); } return mediaTypeMap; diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupsResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupsResource.java new file mode 100644 index 0000000000..9fe8e9e96c --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupsResource.java @@ -0,0 +1,97 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm.api.rest.resources; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.Group; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.Collection; +import java.util.LinkedHashMap; + +import javax.inject.Singleton; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response.Status; + +/** + * + * @author Sebastian Sdorra + */ +@Singleton +@Path("groups") +@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) +public class GroupsResource +{ + + /** + * Constructs ... + * + */ + public GroupsResource() + { + groupStore = new LinkedHashMap(); + groupStore.put("csit", + new Group("csit", "th", "merlec", "hopper", "oelkersd", + "sdorra", "gollnict")); + groupStore.put("devel", + new Group("devel", "sdorra", "th", "merlec", "oelkersd")); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param name + * + * @return + */ + @GET + @Path("{name}") + public Group get(@PathParam("name") String name) + { + Group group = groupStore.get(name); + + if (group == null) + { + throw new WebApplicationException(Status.NOT_FOUND); + } + + System.out.println( group ); + + return group; + } + + /** + * Method description + * + * + * @return + */ + @GET + public Group[] getAll() + { + Collection groupCollection = groupStore.values(); + + return groupCollection.toArray(new Group[groupCollection.size()]); + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private LinkedHashMap groupStore; +} diff --git a/scm-webapp/src/main/webapp/WEB-INF/sun-web.xml b/scm-webapp/src/main/webapp/WEB-INF/sun-web.xml new file mode 100644 index 0000000000..46087f70fe --- /dev/null +++ b/scm-webapp/src/main/webapp/WEB-INF/sun-web.xml @@ -0,0 +1,11 @@ + + + + /scm-webapp + + + + Keep a copy of the generated servlet class' java code. + + + diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.html index 35110cae59..41c08d7fc3 100644 --- a/scm-webapp/src/main/webapp/index.html +++ b/scm-webapp/src/main/webapp/index.html @@ -7,8 +7,12 @@ and open the template in the editor. + + + - TODO write content +

Content

+