From 654bfe237da6438177e17b651f67588c01e835ec Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 15 Sep 2010 09:37:35 +0200 Subject: [PATCH] use repositorymanager in repositoryresource --- .../scm/api/rest/JsonJaxbContextResolver.java | 7 +- .../api/rest/resources/AbstractResource.java | 42 ++++++-- .../resources/AuthenticationResource.java | 3 +- .../scm/api/rest/resources/GroupResource.java | 3 + .../rest/resources/RepositoryResource.java | 101 ++++++------------ .../webapp/resources/js/sonia.repository.js | 4 +- .../main/webapp/resources/js/sonia.rest.js | 3 +- 7 files changed, 75 insertions(+), 88 deletions(-) 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 17875685ff..ccb2aa14fb 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 @@ -44,9 +44,10 @@ public class JsonJaxbContextResolver implements ContextResolver { this.context = new JSONJAXBContext( JSONConfiguration.mapped().rootUnwrapping(true).arrays( - "member", "groups", "permissions", "repositoryTypes").nonStrings( - "readable", "writeable", "groupPermission").build(), types.toArray( - new Class[0])); + "member", "groups", "permissions", "repositories", + "repositoryTypes").nonStrings( + "readable", "writeable", "groupPermission").build(), types.toArray( + new Class[0])); } //~--- get methods ---------------------------------------------------------- diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractResource.java index da3a23c16f..0ba7a5725c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AbstractResource.java @@ -36,16 +36,20 @@ public abstract class AbstractResource * * * @param item + * + * @throws Exception */ - protected abstract void addItem(T item); + protected abstract void addItem(T item) throws Exception; /** * Method description * * * @param item + * + * @throws Exception */ - protected abstract void removeItem(T item); + protected abstract void removeItem(T item) throws Exception; /** * Method description @@ -53,8 +57,10 @@ public abstract class AbstractResource * * @param name * @param item + * + * @throws Exception */ - protected abstract void updateItem(String name, T item); + protected abstract void updateItem(String name, T item) throws Exception; //~--- get methods ---------------------------------------------------------- @@ -110,7 +116,14 @@ public abstract class AbstractResource @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public Response add(@Context UriInfo uriInfo, T item) { - addItem(item); + try + { + addItem(item); + } + catch (Exception ex) + { + throw new WebApplicationException(ex); + } return Response.created( uriInfo.getAbsolutePath().resolve( @@ -136,7 +149,14 @@ public abstract class AbstractResource throw new WebApplicationException(Response.Status.NOT_FOUND); } - removeItem(item); + try + { + removeItem(item); + } + catch (Exception ex) + { + throw new WebApplicationException(ex); + } return Response.noContent().build(); } @@ -159,14 +179,14 @@ public abstract class AbstractResource public Response update(@Context UriInfo uriInfo, @PathParam("name") String name, T item) { - T updateItem = getItem(name); - - if (updateItem == null) + try { - throw new WebApplicationException(Response.Status.NOT_FOUND); + updateItem(name, item); + } + catch (Exception ex) + { + throw new WebApplicationException(ex); } - - updateItem(name, item); return Response.created( uriInfo.getAbsolutePath().resolve(getId(item))).build(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java index a41f2e679b..08e9f7c47b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java @@ -10,8 +10,8 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; +import com.google.inject.Singleton; -import sonia.scm.SCMContext; import sonia.scm.ScmState; import sonia.scm.User; import sonia.scm.repository.RepositoryManager; @@ -37,6 +37,7 @@ import javax.ws.rs.core.Response; * @author Sebastian Sdorra */ @Path("authentication") +@Singleton @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public class AuthenticationResource { 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 1c42b3a488..d19e0af1c1 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 @@ -9,6 +9,8 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- +import com.google.inject.Singleton; + import sonia.scm.group.Group; //~--- JDK imports ------------------------------------------------------------ @@ -25,6 +27,7 @@ import javax.ws.rs.core.MediaType; * @author Sebastian Sdorra */ @Path("groups") +@Singleton @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public class GroupResource extends AbstractResource { 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 a8e0ede502..ff5377c26f 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 @@ -9,15 +9,18 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.repository.Permission; +import com.google.inject.Inject; +import com.google.inject.Singleton; + import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RepositoryManager; //~--- JDK imports ------------------------------------------------------------ +import java.io.IOException; + import java.util.Collection; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.UUID; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -28,6 +31,7 @@ import javax.ws.rs.core.MediaType; * @author Sebastian Sdorra */ @Path("repositories") +@Singleton @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public class RepositoryResource extends AbstractResource { @@ -35,47 +39,6 @@ public class RepositoryResource extends AbstractResource /** Field description */ public static final String PATH_PART = "repositories"; - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - */ - public RepositoryResource() - { - repositoryStore = new LinkedHashMap(); - repositoryStore.put("sonia.lib", - new Repository(createId(), "hg", "sonia.lib", - "csit@ostfalia.de", "SONIA Library", - new Permission("csit", true, true, - true))); - repositoryStore.put("sonia.misc", - new Repository(createId(), "hg", "sonia.misc", - "csit@ostfalia.de", - "SONIA Miscelanious", - new Permission("csit", true, true, - true))); - repositoryStore.put("PWA", - new Repository(createId(), "svn", "PWA", - "csit@fh-wolfenbuettel.de", "PWA", - new Permission("th", true, true), - new Permission("sdorra", true, true), - new Permission("oelkersd", true, - false))); - repositoryStore.put("sonia.app", - new Repository(createId(), "hg", "sonia.app", - "csit@ostfalia.de", - "SONIA Applications", - new Permission("csit", true, true, - true))); - repositoryStore.put("sonia.webapps", - new Repository(createId(), "hg", "sonia.webapps", - "csit@ostfalia.de", - "SONIA WebApplications", - new Permission("csit", true, true, - true))); - } - //~--- methods -------------------------------------------------------------- /** @@ -83,11 +46,15 @@ public class RepositoryResource extends AbstractResource * * * @param item + * + * @throws IOException + * @throws RepositoryException */ @Override protected void addItem(Repository item) + throws RepositoryException, IOException { - repositoryStore.put(item.getName(), item); + repositoryManager.create(item); } /** @@ -95,11 +62,15 @@ public class RepositoryResource extends AbstractResource * * * @param item + * + * @throws IOException + * @throws RepositoryException */ @Override protected void removeItem(Repository item) + throws RepositoryException, IOException { - repositoryStore.remove(item.getName()); + repositoryManager.delete(item); } /** @@ -108,14 +79,15 @@ public class RepositoryResource extends AbstractResource * * @param name * @param item + * + * @throws IOException + * @throws RepositoryException */ @Override protected void updateItem(String name, Repository item) + throws RepositoryException, IOException { - Repository repository = repositoryStore.get(name); - - repository.setContact(item.getContact()); - repository.setDescription(item.getDescription()); + repositoryManager.modify(item); } //~--- get methods ---------------------------------------------------------- @@ -129,7 +101,7 @@ public class RepositoryResource extends AbstractResource @Override protected Repository[] getAllItems() { - Collection repositoryCollection = repositoryStore.values(); + Collection repositoryCollection = repositoryManager.getAll(); return repositoryCollection.toArray( new Repository[repositoryCollection.size()]); @@ -146,21 +118,22 @@ public class RepositoryResource extends AbstractResource @Override protected String getId(Repository item) { - return item.getName(); + return item.getId(); } /** * Method description * * - * @param name + * + * @param id * * @return */ @Override - protected Repository getItem(String name) + protected Repository getItem(String id) { - return repositoryStore.get(name); + return repositoryManager.get(id); } /** @@ -175,21 +148,9 @@ public class RepositoryResource extends AbstractResource return PATH_PART; } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - private String createId() - { - return UUID.randomUUID().toString(); - } - //~--- fields --------------------------------------------------------------- /** Field description */ - private HashMap repositoryStore; + @Inject + private RepositoryManager repositoryManager; } diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.repository.js b/scm-webapp/src/main/webapp/resources/js/sonia.repository.js index 0c2a82f59e..81caac785b 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.repository.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.repository.js @@ -53,7 +53,7 @@ Sonia.repository.Grid = Ext.extend(Sonia.rest.Grid, { var repositoryStore = new Sonia.rest.JsonStore({ url: restUrl + 'repositories.json', root: 'repositories', - fields: [ 'name', 'type', 'contact', 'description' ], + fields: [ 'id', 'name', 'type', 'contact', 'description' ], sortInfo: { field: 'name' } @@ -71,7 +71,7 @@ Sonia.repository.Grid = Ext.extend(Sonia.rest.Grid, { var config = { store: repositoryStore, colModel: repositoryColModel, - idField: 'name', + idField: 'id', searchField: 'name', editForm: 'repositoryEditForm', restAddUrl: restUrl + 'repositories.json', diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.rest.js b/scm-webapp/src/main/webapp/resources/js/sonia.rest.js index ece3bfa440..be2c00a59e 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.rest.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.rest.js @@ -207,7 +207,8 @@ Sonia.rest.Grid = Ext.extend(Ext.grid.GridPanel, { fn: function(item){ var store = this.store; - var id = item[this.idField]; + var id = data[this.idField]; + item[this.idField] = id; var url = String.format(this.restEditUrlPattern, id); if ( debug ){