Package com.din.din.model.dao

Source Code of com.din.din.model.dao.RecipeDAO

package com.din.din.model.dao;

import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import com.din.din.model.dao.QuantityTypeDAO.MeasurementSystem;
import com.din.din.model.entities.KeyEntity;
import com.din.din.model.entities.Project;
import com.din.din.model.entities.Recipe;
import com.din.din.model.entities.Recipe.TimeMeasurement;
import com.din.din.model.entities.RecipeItem;
import com.din.din.model.util.EntityCachingManager;
import com.din.din.model.util.EntityCachingManager.CacheLoader;
import com.din.din.webapp.beans.util.BeanUtil;
import com.din.din.webapp.listeners.EMFListener;
import com.google.appengine.api.datastore.Text;

public class RecipeDAO extends GenericDAO {
  public static List<Recipe> getRecipesByProject(Project project) {
    return getRecipesByProject(null, project);   
  }
 
  @SuppressWarnings("unchecked")
  protected static List<Recipe> getRecipesByProject(EntityManager entityManager, Project project) {
    boolean contained = false;
    if(entityManager == null) {
      entityManager = EMFListener.get();
      contained = true;
    }
   
    List<Recipe> recipes = null;
    EntityTransaction transaction = entityManager.getTransaction();
    try {
      if(!transaction.isActive()) {
        contained = true;
        transaction.begin();
      }
      String queryString = "select r from {0} r where project = :project";
      Query q = entityManager.createQuery(MessageFormat.format(queryString, Recipe.class.getName()));
      q.setParameter("project", project);
     
      recipes = (List<Recipe>)q.getResultList();
     
      for(Recipe recipe : recipes) {
        recipe.setProject(project);
      }
     
      if(contained) {
        transaction.commit();
      }
    } finally {
      if(contained) {
        // If transaction is active and we started it, it means we weren't able to commit it
        if(transaction.isActive()) {
          transaction.rollback();
        }
       
        entityManager.close();
      }
    }
    return recipes;
  }
 
  public static void createDefaultRecipes(Project project, MeasurementSystem system, EntityCachingManager cache) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException {
    createDefaultRecipes(null, project, system, cache);
  }
 
  protected static void createDefaultRecipes(EntityManager entityManager, Project project, MeasurementSystem system, EntityCachingManager cache) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException {
    boolean contained = false;
    if(entityManager == null) {
      contained = true;
      entityManager = EMFListener.get();
    }
    EntityTransaction transaction = entityManager.getTransaction();

    try {
      if(!transaction.isActive()) {
        contained = true;
        transaction.begin();
      }
      Recipe recipe = new Recipe();     
      if(system == MeasurementSystem.Imperial) {
        recipe.setCategory(BeanUtil.getMessage("recipe.category.sandwiches"));
        recipe.setTitle(BeanUtil.getMessage("recipe.classicBLT"));
        recipe.setRecipeText(new Text(BeanUtil.getMessage("recipe.classicBLT.text")));
        recipe.setServes(4);
        recipe.setProject(project);
        recipe = (Recipe)save(entityManager, recipe, cache);
      } else {
        recipe.setCategory(BeanUtil.getMessage("recipe.category.entrees"));
        recipe.setTitle(BeanUtil.getMessage("recipe.potatoAndOnionOmelette"));
        recipe.setRecipeText(new Text(BeanUtil.getMessage("recipe.potatoAndOnionOmelette.text")));
        recipe.setServes(1);
        recipe.setProject(project);
        recipe.setCookingTime(new BigDecimal(10));
        recipe.setCookingTimeMeasurement(TimeMeasurement.Minutes);
        recipe = (Recipe)save(entityManager, recipe, cache)
      }
      RecipeItemDAO.createDefaultRecipeItems(entityManager, recipe, system, cache);
     
      if(contained) {
        transaction.commit();
      }
    } finally {
      if(contained) {
        if(transaction.isActive()) {
          transaction.rollback();
        }
        entityManager.close();
      }
    }
  }

  public static void loadRecipeItems(final Recipe recipe, EntityCachingManager cache) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException {
    List<KeyEntity> recipeItems = cache.getChildren(RecipeItem.class, "recipe", recipe, new CacheLoader<RecipeItem>() {
      public List<RecipeItem> onCacheLoad() {
        return RecipeItemDAO.getRecipeItemsByRecipe(recipe);
      }
    });   
    RecipeItem[] recipeItemArray = recipeItems.toArray(new RecipeItem[0]);
    recipe.setRecipeItems(Arrays.asList(recipeItemArray));
  }
}
TOP

Related Classes of com.din.din.model.dao.RecipeDAO

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.