]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-11: added list and delete operations.
authorSanjay Dalal <sanjay.dalal@berkeley.edu>
Thu, 12 Mar 2009 18:53:25 +0000 (18:53 +0000)
committerSanjay Dalal <sanjay.dalal@berkeley.edu>
Thu, 12 Mar 2009 18:53:25 +0000 (18:53 +0000)
HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonClient.java
HelloWorld/HelloWorldClient/src/main/java/org/collectionspace/hello/client/PersonProxy.java
HelloWorld/HelloWorldClient/src/test/java/org/collectionspace/hello/client/test/PersonServiceTest.java
HelloWorld/HelloWorldJaxb/src/main/resources/hello.xsd
HelloWorld/HelloWorldService/src/main/java/org/collectionspace/hello/services/PersonResource.java

index 4078799a81036143860493d736610c5dea6673cc..e5de8f6e619ace53533e3f4ba976df4b7a07eb63 100644 (file)
@@ -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<Persons> getPersons() {
+        return personProxy.getPersons();
+    }
+
     /**
      * @param id
      * @return
@@ -71,4 +81,13 @@ public class PersonClient {
     public ClientResponse<Person> 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<Response> deletePerson(Long id) {
+        return personProxy.deletePerson(id);
+    }
 }
index 69c762a605e36f8a949c0876d9befb54fcc891d2..78b9635480420011c4f8e04c28d8de9c02c4e9c3 100644 (file)
@@ -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<Persons> getPersons();
+
     @GET
     @Path("/{id}")
     ClientResponse<Person> getPerson(@PathParam("id") Long id);
@@ -36,4 +35,7 @@ public interface PersonProxy {
     @PUT
     @Path("/{id}")
     ClientResponse<Person> updatePerson(@PathParam("id") Long id, Person so);
+
+    @DELETE
+     ClientResponse<Response> deletePerson(@PathParam("id") Long id);
 }
\ No newline at end of file
index 1112d5497d35f4a864f702e2fe62339e9566a452..9fac408be3f95e77c4e04f8fdb742d7e6a37acf1 100644 (file)
@@ -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<Response> 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<Response> 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<Persons.PersonListItem> 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<Person> 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<Response> 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();
index 1b0a3b8d0dba964781ee5d915a14678585e2c022..8943ef96361b04e25770b161ca08c188bf49c0f6 100644 (file)
         </xs:complexType>
     </xs:element>
 
+    
+    <!-- person short is returned by getPersons method -->
+    <xs:element name="persons">
+        <xs:complexType>
+            <xs:sequence>
+
+                <!-- person list item is returned by getPersons method -->
+                <xs:element name="person-list-item" maxOccurs="unbounded">
+                    <xs:complexType>
+                        <xs:sequence>
+                            <xs:element name="firstName" type="xs:string"
+                                               minOccurs="1" />
+                            <xs:element name="lastName" type="xs:string"
+                                               minOccurs="1" />
+                            <!-- uri to retrive person details -->
+                            <xs:element name="uri" type="xs:anyURI"
+                                               minOccurs="1" />
+                            <xs:element name="id" type="xs:long"
+                                               minOccurs="1" />
+                        </xs:sequence>
+                    </xs:complexType>
+                </xs:element>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
     <xs:element name="identifier">
         <xs:complexType>
 
index 945b87e7da565a4bb990a45362e90931a17a10fa..eefebb8aa7d8d11ddfcbefcb17a3ec609d502dd7 100644 (file)
@@ -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<Persons.PersonListItem> 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);