From: Sanjay Dalal Date: Thu, 12 Mar 2009 18:53:25 +0000 (+0000) Subject: CSPACE-11: added list and delete operations. X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=ad8ca64da46b966bc8ed8925412c3bb5247481e2;p=tmp%2Fjakarta-migration.git CSPACE-11: added list and delete operations. --- diff --git a/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonClient.java b/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonClient.java index 4078799a8..e5de8f6e6 100644 --- a/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonClient.java +++ b/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonClient.java @@ -3,6 +3,7 @@ package org.collectionspace.hello.client; import javax.ws.rs.core.Response; import org.collectionspace.hello.Person; +import org.collectionspace.hello.Persons; import org.jboss.resteasy.client.ProxyFactory; import org.jboss.resteasy.plugins.providers.RegisterBuiltin; import org.jboss.resteasy.client.ClientResponse; @@ -44,6 +45,15 @@ public class PersonClient { return instance; } + /** + * @param id + * @return + * @see org.collectionspace.hello.client.PersonProxy#getPerson() + */ + public ClientResponse getPersons() { + return personProxy.getPersons(); + } + /** * @param id * @return @@ -71,4 +81,13 @@ public class PersonClient { public ClientResponse updatePerson(Long id, Person person) { return personProxy.updatePerson(id, person); } + + /** + * @param id + * @return + * @see org.collectionspace.hello.client.PersonProxy#deletePerson(java.lang.Long) + */ + public ClientResponse deletePerson(Long id) { + return personProxy.deletePerson(id); + } } diff --git a/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonProxy.java b/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonProxy.java index 69c762a60..78b963548 100644 --- a/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonProxy.java +++ b/HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonProxy.java @@ -1,6 +1,7 @@ package org.collectionspace.hello.client; import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; @@ -10,6 +11,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import org.collectionspace.hello.Person; +import org.collectionspace.hello.Persons; import org.jboss.resteasy.client.ClientResponse; /** @@ -20,12 +22,9 @@ import org.jboss.resteasy.client.ClientResponse; @Consumes({"application/xml"}) public interface PersonProxy { - /** - * - * - * @param id - * @return - */ + @GET + ClientResponse getPersons(); + @GET @Path("/{id}") ClientResponse getPerson(@PathParam("id") Long id); @@ -36,4 +35,7 @@ public interface PersonProxy { @PUT @Path("/{id}") ClientResponse updatePerson(@PathParam("id") Long id, Person so); + + @DELETE + ClientResponse deletePerson(@PathParam("id") Long id); } \ No newline at end of file diff --git a/HelloWorld/HelloWorldClient/src/test/java/org/collectionspace/hello/client/test/PersonServiceTest.java b/HelloWorld/HelloWorldClient/src/test/java/org/collectionspace/hello/client/test/PersonServiceTest.java index 1112d5497..9fac408be 100644 --- a/HelloWorld/HelloWorldClient/src/test/java/org/collectionspace/hello/client/test/PersonServiceTest.java +++ b/HelloWorld/HelloWorldClient/src/test/java/org/collectionspace/hello/client/test/PersonServiceTest.java @@ -1,11 +1,13 @@ package org.collectionspace.hello.client.test; import java.util.ArrayList; +import java.util.List; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import org.collectionspace.hello.Person; +import org.collectionspace.hello.Persons; import org.collectionspace.hello.client.PersonClient; import org.jboss.resteasy.client.ClientResponse; import org.testng.Assert; @@ -19,37 +21,54 @@ import org.testng.annotations.Test; public class PersonServiceTest { private PersonClient personClient = PersonClient.getInstance(); - private Long id = 0L; + private Long updateId = 0L; @Test public void createPerson() { - Person person = new Person(); - person.setFirstName("Chris"); - person.setLastName("Hoffman"); - person.setStreet("2195 Hearst Ave."); - person.setCity("Berkeley"); - person.setState("CA"); - person.setZip("94704"); - person.setCountry("US"); + Person person = createPerson("Chris", "Hoffman"); ClientResponse res = personClient.createPerson(person); Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode()); - //store id locally - id = extractId(res); + //store updateId locally + updateId = extractId(res); + } + + @Test + public void createPersons() { + Person person = createPerson("Aron", "Roberts"); + ClientResponse res = personClient.createPerson(person); + Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode()); + person = createPerson("Dan", "Sheppard"); + res = personClient.createPerson(person); + Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode()); } @Test(dependsOnMethods = {"createPerson"}) public void updatePerson() { - Person touPerson = personClient.getPerson(id).getEntity(); - verbose("got person to update", touPerson); + Person touPerson = personClient.getPerson(updateId).getEntity(); + verbose("got person to update", touPerson, Person.class); touPerson.setFirstName("Richard"); touPerson.setLastName("Millet"); int initialVersion = touPerson.getVersion(); - Person uPerson = personClient.updatePerson(id, touPerson).getEntity(); - verbose("updated person", uPerson); + Person uPerson = personClient.updatePerson(updateId, touPerson).getEntity(); + verbose("updated person", uPerson, Person.class); Assert.assertNotSame(uPerson.getVersion(), initialVersion); Assert.assertEquals(uPerson.getFirstName(), "Richard"); } + @Test(dependsOnMethods = {"createPerson"}) + public void getPersons() { + //the resource method is expected to return at least an empty list + Persons persons = personClient.getPersons().getEntity(); + List list = persons.getPersonListItem(); + int i = 0; + for (Persons.PersonListItem pli : list) { + verbose("list-item[" + i + "] firstName=" + pli.getFirstName()); + verbose("list-item[" + i + "] lastName=" + pli.getLastName()); + verbose("list-item[" + i + "] uri=" + pli.getUri()); + i++; + } + } + @Test public void getNonExistingPerson() { ClientResponse res = personClient.getPerson(999L); @@ -68,11 +87,10 @@ public class PersonServiceTest { } } - @Test public void updateWrongPerson() { - Person touPerson = personClient.getPerson(id).getEntity(); - verbose("updateWrongPerson: got person to update", touPerson); + Person touPerson = personClient.getPerson(updateId).getEntity(); + verbose("updateWrongPerson: got person to update", touPerson, Person.class); touPerson.setFirstName("Richard"); touPerson.setLastName("Millet"); //use non existing person to update @@ -84,6 +102,18 @@ public class PersonServiceTest { } } + private Person createPerson(String firstName, String lastName) { + Person person = new Person(); + person.setFirstName(firstName); + person.setLastName(lastName); + person.setStreet("2195 Hearst Ave."); + person.setCity("Berkeley"); + person.setState("CA"); + person.setZip("94704"); + person.setCountry("US"); + return person; + } + private Long extractId(ClientResponse res) { MultivaluedMap mvm = res.getMetadata(); String uri = (String) ((ArrayList) mvm.get("Location")).get(0); @@ -96,14 +126,14 @@ public class PersonServiceTest { System.out.println("PersonServiceTest : " + msg); } - private void verbose(String msg, Person p) { + private void verbose(String msg, Object o, Class clazz) { try { verbose(msg); - JAXBContext jc = JAXBContext.newInstance(Person.class); + JAXBContext jc = JAXBContext.newInstance(clazz); Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); - m.marshal(p, System.out); + m.marshal(o, System.out); //m.marshal(new JAXBElement(new QName("uri", "local"), Person.class, p), System.out); } catch (Exception e) { e.printStackTrace(); diff --git a/HelloWorld/HelloWorldJaxb/src/main/resources/hello.xsd b/HelloWorld/HelloWorldJaxb/src/main/resources/hello.xsd index 1b0a3b8d0..8943ef963 100644 --- a/HelloWorld/HelloWorldJaxb/src/main/resources/hello.xsd +++ b/HelloWorld/HelloWorldJaxb/src/main/resources/hello.xsd @@ -33,6 +33,32 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/HelloWorld/HelloWorldService/src/main/java/org/collectionspace/hello/services/PersonResource.java b/HelloWorld/HelloWorldService/src/main/java/org/collectionspace/hello/services/PersonResource.java index 945b87e7d..eefebb8aa 100644 --- a/HelloWorld/HelloWorldService/src/main/java/org/collectionspace/hello/services/PersonResource.java +++ b/HelloWorld/HelloWorldService/src/main/java/org/collectionspace/hello/services/PersonResource.java @@ -1,5 +1,7 @@ package org.collectionspace.hello.services; +import java.net.URI; +import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -12,10 +14,15 @@ import javax.ws.rs.core.Response; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; +import javax.ws.rs.DELETE; +import javax.ws.rs.core.Context; import javax.ws.rs.core.UriBuilder; +import javax.ws.rs.core.UriInfo; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import org.collectionspace.hello.Person; +import org.collectionspace.hello.Persons.PersonListItem; +import org.collectionspace.hello.Persons; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -78,6 +85,37 @@ public class PersonResource { return current; } + @GET + public Persons getPersons(@Context UriInfo ui) { + Persons persons = new Persons(); + List list = persons.getPersonListItem(); + // builder starts with current URI and has appended path of getPerson method + UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getPerson"); + for (Person p : personDB.values()) { + PersonListItem pli = new PersonListItem(); + pli.setFirstName(p.getFirstName()); + pli.setLastName(p.getLastName()); + pli.setId(p.getId()); + // builder has {id} variable that must be filled in for each customer + URI uri = ub.build(p.getId()); + pli.setUri(uri.toString()); + list.add(pli); + } + return persons; + } + + @DELETE + @Path("/{id}") + public void deletePerson(@PathParam("id") Long id) { + Person removed = personDB.remove(id); + if (removed == null) { + Response response = Response.status(Response.Status.NOT_FOUND).entity( + "Delete failed, the person ID:" + id + ": was not found.").type("text/plain").build(); + throw new WebApplicationException(response); + } + verbose("deleted person", removed); + } + private void verbose(String msg, Person p) { try { System.out.println("PersonResource : " + msg);