package fi.otavanopisto.pyramus.dao.help;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.PyramusEntityDAO;
import fi.otavanopisto.pyramus.domainmodel.help.HelpFolder;
import fi.otavanopisto.pyramus.domainmodel.help.HelpItem;
import fi.otavanopisto.pyramus.domainmodel.help.HelpItemTitle;
import fi.otavanopisto.pyramus.domainmodel.help.HelpItem_;
@Stateless
public class HelpItemDAO extends PyramusEntityDAO<HelpItem> {
public List<HelpItem> listByParent(HelpFolder parent) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<HelpItem> criteria = criteriaBuilder.createQuery(HelpItem.class);
Root<HelpItem> root = criteria.from(HelpItem.class);
criteria.select(root);
if (parent == null) {
criteria.where(
criteriaBuilder.isNull(root.get(HelpItem_.parent))
);
} else {
criteria.where(
criteriaBuilder.equal(root.get(HelpItem_.parent), parent)
);
}
return entityManager.createQuery(criteria).getResultList();
}
public void updateParent(HelpItem helpItem, HelpFolder parent) {
EntityManager entityManager = getEntityManager();
if (helpItem.getParent() != null) {
HelpFolder oldParent = helpItem.getParent();
oldParent.removeChild(helpItem);
entityManager.persist(oldParent);
}
helpItem.setParent(parent);
entityManager.persist(helpItem);
}
@Override
public void delete(HelpItem helpItem) {
HelpItemTitleDAO helpItemTitleDAO = DAOFactory.getInstance().getHelpItemTitleDAO();
HelpItemTitle[] titles = helpItem.getTitles().toArray(new HelpItemTitle[0]);
for (int i = 0, l = titles.length; i < l; i++) {
helpItemTitleDAO.delete(titles[i]);
}
super.delete(helpItem);
}
}