FoodWaveBean.java 3.38 KB
package fi.insomnia.bortal.beans;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.facade.FoodWaveFacade;
import fi.insomnia.bortal.facade.FoodWaveTemplateFacade;
import fi.insomnia.bortal.facade.ProductFacade;
import fi.insomnia.bortal.model.FoodWave;
import fi.insomnia.bortal.model.FoodWaveTemplate;
import fi.insomnia.bortal.model.Product;

/**
 * Session Bean implementation class FoodWaveBean
 */
@Stateless
@DeclareRoles({ ShopPermission.S_MANAGE_PRODUCTS, ShopPermission.S_SHOP_FOODWAVE, ShopPermission.S_MANAGE_FOODWAVES })
public class FoodWaveBean implements FoodWaveBeanLocal {

	@EJB
	private FoodWaveTemplateFacade fwtFacade;

	@EJB
	private FoodWaveFacade foodWaveFacade;
	@EJB
	private ProductFacade productfacade;

	@Override
	@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
	public List<FoodWaveTemplate> getTemplates() {
		return fwtFacade.findAllTemplates();
	}

	@Override
	@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
	public void createFoodWave(FoodWave fw) {
		foodWaveFacade.create(fw);
	}

	@Override
	@RolesAllowed(ShopPermission.S_MANAGE_PRODUCTS)
	public FoodWaveTemplate saveOrCreateTemplate(FoodWaveTemplate template) {
		if (template.getId() == null)
		{
			fwtFacade.create(template);
		} else {
			template = fwtFacade.merge(template);
		}
		return template;
	}

	@Override
	public List<FoodWave> findShoppableFoodwaves() {
		throw new NotImplementedException();
	}

	@Override
	@RolesAllowed(ShopPermission.S_SHOP_FOODWAVE)
	public List<FoodWave> getOpenFoodWaves() {
		return foodWaveFacade.getOpenFoodWaves();
	}

	@RolesAllowed({ ShopPermission.S_SHOP_FOODWAVE, ShopPermission.S_MANAGE_FOODWAVES })
	public FoodWave findFoodwave(Integer foodwaveId) {
		return foodWaveFacade.find(foodwaveId);
	}

	@Override
	public FoodWaveTemplate saveTemplate(FoodWaveTemplate waveTemplate) {
		return fwtFacade.merge(waveTemplate);

	}

	@Override
	public FoodWave merge(FoodWave foodWave) {
		foodWave = foodWaveFacade.merge(foodWave);
		return foodWave;
	}

	@Override
	public FoodWaveTemplate findTemplate(Integer templateId) {
		return fwtFacade.find(templateId);
	}

	@Override
	public List<FoodWave> getEventFoodWaves() {
		return foodWaveFacade.getEventFoodWaves();
	}

	@Override
	@RolesAllowed(ShopPermission.S_MANAGE_FOODWAVES)
	public FoodWaveTemplate addProductToTemplate(FoodWaveTemplate template, Product product) {
		template = fwtFacade.reload(template);
		if (product.getId() == null)
		{
			productfacade.create(product);
		} else {
			product = productfacade.reload(product);
		}

		if (product.getFoodWaveTemplates() == null) {
			product.setFoodWaveTemplates(new ArrayList<FoodWaveTemplate>());
		}
		if (template.getProducts() == null)
		{
			template.setProducts(new ArrayList<Product>());
		}
		template.getProducts().add(product);
		product.getFoodWaveTemplates().add(template);

		return template;
	}

	@Override
	public FoodWaveTemplate removeProductFromTemplate(Product product, FoodWaveTemplate template) {
		template = fwtFacade.merge(template);
		product = productfacade.merge(product);
		template.getProducts().remove(product);
		product.getFoodWaveTemplates().remove(template);
		
		return template;
	}

}