package com.floreantpos.model.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.floreantpos.PosException;
import com.floreantpos.model.MenuGroup;
import com.floreantpos.model.MenuItem;
import com.floreantpos.model.MenuItemModifierGroup;
public class MenuItemDAO extends BaseMenuItemDAO {
/**
* Default constructor. Can be used in place of getInstance()
*/
public MenuItemDAO () {}
public MenuItem initialize(MenuItem menuItem) {
if(menuItem.getId() == null) return menuItem;
Session session = null;
try {
session = createNewSession();
//session.refresh(menuItem);
menuItem = (MenuItem) session.merge(menuItem);
Hibernate.initialize(menuItem.getMenuItemModiferGroups());
List<MenuItemModifierGroup> menuItemModiferGroups = menuItem.getMenuItemModiferGroups();
if (menuItemModiferGroups != null) {
for (MenuItemModifierGroup menuItemModifierGroup : menuItemModiferGroups) {
Hibernate.initialize(menuItemModifierGroup.getModifierGroup().getModifiers());
}
}
Hibernate.initialize(menuItem.getShifts());
return menuItem;
} finally {
closeSession(session);
}
}
@SuppressWarnings("unchecked")
public List<MenuItem> findByParent(MenuGroup group, boolean includeInvisibleItems) throws PosException {
Session session = null;
try {
session = getSession();
Criteria criteria = session.createCriteria(getReferenceClass());
criteria.add(Restrictions.eq(MenuItem.PROP_PARENT, group));
if(!includeInvisibleItems) {
criteria.add(Restrictions.eq(MenuItem.PROP_VISIBLE, Boolean.TRUE));
}
return criteria.list();
} catch (Exception e) {
throw new PosException("Error occured while finding food items");
} finally {
if (session != null) {
session.close();
}
}
}
public List<MenuItemModifierGroup> findModifierGroups(MenuItem item) throws PosException {
Session session = null;
try {
session = getSession();
Criteria criteria = session.createCriteria(getReferenceClass());
criteria.add(Restrictions.eq(MenuItem.PROP_ID, item.getId()));
MenuItem newItem = (MenuItem) criteria.uniqueResult();
Hibernate.initialize(newItem.getMenuItemModiferGroups());
return newItem.getMenuItemModiferGroups();
} catch (Exception e) {
throw new PosException("Error occured while finding food items");
} finally {
if (session != null) {
session.close();
}
}
}
}