package org.axway.grapes.server.core; import org.axway.grapes.server.db.RepositoryHandler; import org.axway.grapes.server.db.datamodel.DbProduct; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import java.util.List; /** * Product Handler * * <p>Manages all operation regarding Products. It can, get/update Products of the database.</p> * * @author jdcoffre */ public class ProductHandler { private final RepositoryHandler repositoryHandler; public ProductHandler(final RepositoryHandler repositoryHandler) { this.repositoryHandler = repositoryHandler; } /** * Creates a new Product in Grapes database * * @param dbProduct DbProduct */ public void create(final DbProduct dbProduct) { if(repositoryHandler.getProduct(dbProduct.getName()) != null){ throw new WebApplicationException(Response.status(Response.Status.CONFLICT).entity("Product already exist!").build()); } repositoryHandler.store(dbProduct); } /** * Update a product in Grapes database * * @param dbProduct DbProduct */ public void update(final DbProduct dbProduct) { repositoryHandler.store(dbProduct); } /** * Returns all the product names * * @return List<String> */ public List<String> getProductNames() { return repositoryHandler.getProductNames(); } /** * Returns a product regarding its name * * @param name String * @return DbProduct */ public DbProduct getProduct(final String name) { final DbProduct dbProduct = repositoryHandler.getProduct(name); if(dbProduct == null){ throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) .entity("Product " + name + " does not exist.").build()); } return dbProduct; } /** * Deletes a product from the database * * @param name String */ public void deleteProduct(final String name) { final DbProduct dbProduct = getProduct(name); repositoryHandler.deleteProduct(dbProduct.getName()); } /** * Patches the product module names * * @param name String * @param moduleNames List<String> */ public void setProductModules(final String name, final List<String> moduleNames) { final DbProduct dbProduct = getProduct(name); dbProduct.setModules(moduleNames); repositoryHandler.store(dbProduct); } }