/** * Copyright (C) 2010 Talend Inc. - www.talend.com */ package service.intro; import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import javax.ws.rs.core.Response; import javax.ws.rs.WebApplicationException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import common.intro.Person; import common.intro.MembershipService; /** * JAX-RS MembershipService root resource */ public class MembershipServiceImpl implements MembershipService { /* * AtomicInteger, ConcurrentHashMap because MembershipService is a singleton accessed by multiple requests */ Map<Integer, Person> members = new ConcurrentHashMap<Integer, Person>(); AtomicInteger currentId = new AtomicInteger(); public MembershipServiceImpl() { // seed HashMap with first member Person p = new Person(); p.setName("Bob"); p.setAge(20); p.setId(currentId.incrementAndGet()); members.put(p.getId(), p); } @Override public Collection<Person> getAllMembers() { return new ArrayList<Person>(members.values()); } @Override public Person getMemberSubresource(int id) { System.out.println("getMemberSubresource called - id = " + id); Person p = members.get(id); if (p == null) { // will return HTTP 404 "not found" code throw new WebApplicationException(Response.Status.NOT_FOUND); } System.out.println("person ID/Name/Age = " + p.getId() + " / " + p.getName() + " / " + p.getAge()); return p; } @Override public Response addMember(Person person) { System.out.println("----invoking addMember, Member name is: " + person.getName()); person.setId(currentId.incrementAndGet()); members.put(person.getId(), person); // param in create() used for generating HTTP Location header so client // can know the new item's ID. return Response.created(URI.create("/members/" + person.getId())).build(); } @Override public Response deleteMember(int id) { System.out.println("----invoking deleteMember for id = " + id); Person p = members.get(id); if (p == null) { // alternative to throwing WebApplicationException() return Response.status(Response.Status.NOT_FOUND).build(); } members.remove(id); return Response.status(Response.Status.GONE).build(); } }