Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.grummages.app.rest.entity.service; import com.grummages.app.rest.entity.ListingAddonPK; import javax.persistence.EntityManager; import javax.ws.rs.core.PathSegment; import com.grummages.app.rest.entity.ListingAddon; import java.net.URI; import java.util.List; import javax.persistence.Query; import javax.persistence.PersistenceContext; 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; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import org.springframework.transaction.annotation.Transactional; /** * * @author admin */ @Path("v1/listingaddon") public class ListingAddonRESTFacade { @PersistenceContext(unitName = "com.grummages_GrummagesWebApp_war_1.0-SNAPSHOTPU") protected EntityManager entityManager; private ListingAddonPK getPrimaryKey(PathSegment pathSegment) { /* * pathSemgent represents a URI path segment and any associated matrix parameters. * URI path part is supposed to be in form of 'somePath;listingId=listingIdValue;addonId=addonIdValue'. * Here 'somePath' is a result of getPath() method invocation and * it is ignored in the following code. * Matrix parameters are used as field names to build a primary key instance. */ com.grummages.app.rest.entity.ListingAddonPK key = new com.grummages.app.rest.entity.ListingAddonPK(); javax.ws.rs.core.MultivaluedMap<String, String> map = pathSegment.getMatrixParameters(); java.util.List<String> listingId = map.get("listingId"); if (listingId != null && !listingId.isEmpty()) { key.setListingId(new java.lang.Short(listingId.get(0))); } java.util.List<String> addonId = map.get("addonId"); if (addonId != null && !addonId.isEmpty()) { key.setAddonId(new java.lang.Short(addonId.get(0))); } return key; } public ListingAddonRESTFacade() { } @POST @Consumes({ "application/json" }) @Transactional public Response create(ListingAddon entity) { entityManager.persist(entity); return Response.created(URI.create(Double.parseDouble(entity.getListingAddonPK().getListingId()) + "," + Double.parseDouble(entity.getListingAddonPK().getAddonId()).toString())).build(); } @PUT @Consumes({ "application/json" }) @Transactional public void edit(ListingAddon entity) { entityManager.merge(entity); } @DELETE @Path("{id}") @Transactional public void remove(@PathParam("id") PathSegment id) { com.grummages.app.rest.entity.ListingAddonPK key = getPrimaryKey(id); ListingAddon entity = entityManager.getReference(ListingAddon.class, key); entityManager.remove(entity); } @GET @Path("{id}") @Produces({ "application/json" }) @Transactional public ListingAddon find(@PathParam("id") PathSegment id) { com.grummages.app.rest.entity.ListingAddonPK key = getPrimaryKey(id); return entityManager.find(ListingAddon.class, key); } @GET @Produces({ "application/json" }) @Transactional public List<ListingAddon> findAll() { return find(true, -1, -1); } @GET @Path("{max}/{first}") @Produces({ "application/json" }) @Transactional public List<ListingAddon> findRange(@PathParam("max") Integer max, @PathParam("first") Integer first) { return find(false, max, first); } @GET @Path("count") @Produces("text/plain") @Transactional public String count() { try { Query query = entityManager.createQuery("SELECT count(o) FROM ListingAddon AS o"); return query.getSingleResult().toString(); } finally { entityManager.close(); } } private List<ListingAddon> find(boolean all, int maxResults, int firstResult) { try { Query query = entityManager.createQuery("SELECT object(o) FROM ListingAddon AS o"); if (!all) { query.setMaxResults(maxResults); query.setFirstResult(firstResult); } return query.getResultList(); } finally { entityManager.close(); } } }