package org.jboss.resteasy.test.providers.jaxb.resource;

import org.jboss.resteasy.annotations.providers.jaxb.Wrapped;
import org.junit.Assert;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Path("/namespaced")
public class CollectionNamespacedResource {
   @GET
   @Path("array")
   @Produces("application/xml")
   @Wrapped
   public CollectionNamespacedCustomer[] getCustomers() {
      CollectionNamespacedCustomer[] custs = {new CollectionNamespacedCustomer("bill"), new CollectionNamespacedCustomer("monica")};
      return custs;
   }

   @PUT
   @Path("array")
   @Consumes("application/xml")
   public void putCustomers(@Wrapped CollectionNamespacedCustomer[] customers) {
      Assert.assertEquals("bill", customers[0].getName());
      Assert.assertEquals("monica", customers[1].getName());
   }

   @GET
   @Path("set")
   @Produces("application/xml")
   @Wrapped
   public Set<CollectionNamespacedCustomer> getCustomerSet() {
      HashSet<CollectionNamespacedCustomer> set = new HashSet<CollectionNamespacedCustomer>();
      set.add(new CollectionNamespacedCustomer("bill"));
      set.add(new CollectionNamespacedCustomer("monica"));

      return set;
   }

   @PUT
   @Path("list")
   @Consumes("application/xml")
   public void putCustomers(@Wrapped List<CollectionNamespacedCustomer> customers) {
      Assert.assertEquals("bill", customers.get(0).getName());
      Assert.assertEquals("monica", customers.get(1).getName());
   }

   @GET
   @Path("list")
   @Produces("application/xml")
   @Wrapped
   public List<CollectionNamespacedCustomer> getCustomerList() {
      ArrayList<CollectionNamespacedCustomer> set = new ArrayList<CollectionNamespacedCustomer>();
      set.add(new CollectionNamespacedCustomer("bill"));
      set.add(new CollectionNamespacedCustomer("monica"));

      return set;
   }

   @GET
   @Path("list/response")
   @Produces("application/xml")
   @Wrapped
   public Response getCustomerListResponse() {
      ArrayList<CollectionNamespacedCustomer> set = new ArrayList<CollectionNamespacedCustomer>();
      set.add(new CollectionNamespacedCustomer("bill"));
      set.add(new CollectionNamespacedCustomer("monica"));
      GenericEntity<List<CollectionNamespacedCustomer>> genericEntity = new GenericEntity<List<CollectionNamespacedCustomer>>(set) {
      };
      return Response.ok(genericEntity).build();
   }
}
