package fi.otavanopisto.muikku.plugins.workspace.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceFolder_;
import fi.otavanopisto.muikku.plugins.CorePluginsDAO;
import fi.otavanopisto.muikku.plugins.material.model.MaterialViewRestrict;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceFolder;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceFolderType;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceNode;
public class WorkspaceFolderDAO extends CorePluginsDAO<WorkspaceFolder> {
private static final long serialVersionUID = 9095130166469638314L;
public WorkspaceFolder create(WorkspaceNode parent, String title, String urlName, Integer orderNumber, Boolean hidden, WorkspaceFolderType folderType, MaterialViewRestrict viewRestrict) {
WorkspaceFolder workspaceFolder = new WorkspaceFolder();
workspaceFolder.setParent(parent);
workspaceFolder.setUrlName(urlName);
workspaceFolder.setFolderType(folderType);
workspaceFolder.setTitle(title);
workspaceFolder.setOrderNumber(orderNumber);
workspaceFolder.setHidden(hidden);
workspaceFolder.setViewRestrict(viewRestrict);
return persist(workspaceFolder);
}
public List<WorkspaceFolder> listByParentAndFolderType(WorkspaceNode parent, WorkspaceFolderType folderType) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceFolder> criteria = criteriaBuilder.createQuery(WorkspaceFolder.class);
Root<WorkspaceFolder> root = criteria.from(WorkspaceFolder.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceFolder_.parent), parent),
criteriaBuilder.equal(root.get(WorkspaceFolder_.folderType), folderType)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceFolder> listByHiddenAndParentAndFolderType(Boolean hidden, WorkspaceNode parent, WorkspaceFolderType folderType) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceFolder> criteria = criteriaBuilder.createQuery(WorkspaceFolder.class);
Root<WorkspaceFolder> root = criteria.from(WorkspaceFolder.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceFolder_.hidden), hidden),
criteriaBuilder.equal(root.get(WorkspaceFolder_.parent), parent),
criteriaBuilder.equal(root.get(WorkspaceFolder_.folderType), folderType)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public void delete(WorkspaceFolder workspaceFolder) {
super.delete(workspaceFolder);
}
public WorkspaceFolder updateFolderName(WorkspaceFolder workspaceFolder, String urlName, String title) {
workspaceFolder.setUrlName(urlName);
workspaceFolder.setTitle(title);
return persist(workspaceFolder);
}
public WorkspaceFolder updateViewRestrict(WorkspaceFolder workspaceFolder, MaterialViewRestrict viewRestrict) {
workspaceFolder.setViewRestrict(viewRestrict);
return persist(workspaceFolder);
}
public WorkspaceFolder updateDefaultMaterial(WorkspaceFolder workspaceFolder, WorkspaceNode defaultMaterial) {
workspaceFolder.setDefaultMaterial(defaultMaterial);
return persist(workspaceFolder);
}
}