package fi.otavanopisto.muikku.dao.workspace;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Root;
import fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier_;
import fi.otavanopisto.muikku.model.workspace.WorkspaceRoleEntity_;
import fi.otavanopisto.muikku.model.workspace.WorkspaceUserEntity_;
import fi.otavanopisto.muikku.dao.CoreDAO;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier;
import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity;
import fi.otavanopisto.muikku.model.workspace.WorkspaceRoleArchetype;
import fi.otavanopisto.muikku.model.workspace.WorkspaceRoleEntity;
import fi.otavanopisto.muikku.model.workspace.WorkspaceUserEntity;
public class WorkspaceUserEntityDAO extends CoreDAO<WorkspaceUserEntity> {
private static final long serialVersionUID = -850520598378547048L;
public WorkspaceUserEntity create(UserSchoolDataIdentifier userSchoolDataIdentifier, WorkspaceEntity workspaceEntity, WorkspaceRoleEntity workspaceUserRole, String identifier, Boolean archived) {
WorkspaceUserEntity workspaceUserEntity = new WorkspaceUserEntity();
workspaceUserEntity.setUserSchoolDataIdentifier(userSchoolDataIdentifier);
workspaceUserEntity.setWorkspaceEntity(workspaceEntity);
workspaceUserEntity.setWorkspaceUserRole(workspaceUserRole);
workspaceUserEntity.setIdentifier(identifier);
workspaceUserEntity.setArchived(archived);
return persist(workspaceUserEntity);
}
public WorkspaceUserEntity findByWorkspaceAndIdentifierAndArchived(WorkspaceEntity workspaceEntity, String identifier, Boolean archived) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.identifier), identifier),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), archived)
)
);
return getSingleResult(entityManager.createQuery(criteria));
}
public WorkspaceUserEntity findByWorkspaceEntityAndUserSchoolDataIdentifierAndArchived(WorkspaceEntity workspaceEntity, UserSchoolDataIdentifier userSchoolDataIdentifier, Boolean archived) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), archived),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.userSchoolDataIdentifier), userSchoolDataIdentifier),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity)
)
);
return getSingleResult(entityManager.createQuery(criteria));
}
public WorkspaceUserEntity findByWorkspaceEntityAndUserSchoolDataIdentifierIncludeArchived(WorkspaceEntity workspaceEntity, UserSchoolDataIdentifier userSchoolDataIdentifier) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.userSchoolDataIdentifier), userSchoolDataIdentifier),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity)
)
);
return getSingleResult(entityManager.createQuery(criteria));
}
public List<WorkspaceUserEntity> listByUserEntityAndArchived(UserEntity userEntity, Boolean archived) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
Join<WorkspaceUserEntity, UserSchoolDataIdentifier> userIdentifierJoin = root.join(WorkspaceUserEntity_.userSchoolDataIdentifier);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), archived),
criteriaBuilder.equal(userIdentifierJoin.get(UserSchoolDataIdentifier_.userEntity), userEntity)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceUserEntity> listByWorkspaceIncludeArchived(WorkspaceEntity workspaceEntity) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceUserEntity> listByWorkspaceAndArchived(WorkspaceEntity workspaceEntity, Boolean archived) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), archived),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceUserEntity> listByWorkspaceAndRole(WorkspaceEntity workspaceEntity, WorkspaceRoleEntity workspaceUserRole) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceUserRole), workspaceUserRole)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceUserEntity> listByWorkspaceAndRoleArchetype(WorkspaceEntity workspaceEntity, WorkspaceRoleArchetype archetype) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
Join<WorkspaceUserEntity, WorkspaceRoleEntity> join = root.join(WorkspaceUserEntity_.workspaceUserRole);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity),
criteriaBuilder.equal(join.get(WorkspaceRoleEntity_.archetype), archetype)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceUserEntity> listByWorkspaceAndRoles(WorkspaceEntity workspaceEntity, List<WorkspaceRoleEntity> workspaceUserRoles, Integer firstResult, Integer maxResults) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity),
root.get(WorkspaceUserEntity_.workspaceUserRole).in(workspaceUserRoles)
)
);
TypedQuery<WorkspaceUserEntity> query = entityManager.createQuery(criteria);
if (firstResult != null) {
query.setFirstResult(firstResult);
}
if (maxResults != null) {
query.setMaxResults(maxResults);
}
return query.getResultList();
}
public List<WorkspaceUserEntity> listByWorkspaceEntityAndUserEntityAndArchived(WorkspaceEntity workspaceEntity, UserEntity userEntity, Boolean archived) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
Join<WorkspaceUserEntity, UserSchoolDataIdentifier> userIdentifierJoin = root.join(WorkspaceUserEntity_.userSchoolDataIdentifier);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), archived),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity),
criteriaBuilder.equal(userIdentifierJoin.get(UserSchoolDataIdentifier_.userEntity), userEntity)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceUserEntity> listByUserSchoolDataIdentifierAndArchived(UserSchoolDataIdentifier userSchoolDataIdentifier, Boolean archived) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), archived),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.userSchoolDataIdentifier), userSchoolDataIdentifier)
)
);
return entityManager.createQuery(criteria).getResultList();
}
public List<WorkspaceUserEntity> listByUserSchoolDataIdentifierIncludeArchived(UserSchoolDataIdentifier userSchoolDataIdentifier) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.userSchoolDataIdentifier), userSchoolDataIdentifier)
);
return entityManager.createQuery(criteria).getResultList();
}
public Long countByWorkspaceAndRoles(WorkspaceEntity workspaceEntity, List<WorkspaceRoleEntity> workspaceUserRoles) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteria = criteriaBuilder.createQuery(Long.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(criteriaBuilder.count(root));
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), Boolean.FALSE),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.workspaceEntity), workspaceEntity),
root.get(WorkspaceUserEntity_.workspaceUserRole).in(workspaceUserRoles)
)
);
return entityManager.createQuery(criteria).getSingleResult();
}
public WorkspaceUserEntity updateIdentifier(WorkspaceUserEntity workspaceUserEntity, String identifier) {
workspaceUserEntity.setIdentifier(identifier);
return persist(workspaceUserEntity);
}
public WorkspaceUserEntity updateUserSchoolDataIdentifier(WorkspaceUserEntity workspaceUserEntity, UserSchoolDataIdentifier userSchoolDataIdentifier) {
workspaceUserEntity.setUserSchoolDataIdentifier(userSchoolDataIdentifier);
return persist(workspaceUserEntity);
}
public WorkspaceUserEntity updateArchived(WorkspaceUserEntity workspaceUserEntity, Boolean archived) {
workspaceUserEntity.setArchived(archived);
return persist(workspaceUserEntity);
}
public void delete(WorkspaceUserEntity workspaceUserEntity) {
super.delete(workspaceUserEntity);
}
public WorkspaceUserEntity findByIdentifierAndArchived(String identifier, Boolean archived) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.identifier), identifier),
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.archived), archived)
)
);
return getSingleResult(entityManager.createQuery(criteria));
}
public WorkspaceUserEntity findByIdentifierIncludeArchived(String identifier) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<WorkspaceUserEntity> criteria = criteriaBuilder.createQuery(WorkspaceUserEntity.class);
Root<WorkspaceUserEntity> root = criteria.from(WorkspaceUserEntity.class);
criteria.select(root);
criteria.where(
criteriaBuilder.equal(root.get(WorkspaceUserEntity_.identifier), identifier)
);
return getSingleResult(entityManager.createQuery(criteria));
}
}