package fi.otavanopisto.muikku.users;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;
import javax.inject.Inject;
import fi.otavanopisto.muikku.dao.base.SchoolDataSourceDAO;
import fi.otavanopisto.muikku.dao.users.UserGroupEntityDAO;
import fi.otavanopisto.muikku.dao.users.UserGroupUserEntityDAO;
import fi.otavanopisto.muikku.model.base.SchoolDataSource;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.model.users.UserGroupEntity;
import fi.otavanopisto.muikku.model.users.UserGroupUserEntity;
import fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier;
import fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier;
public class UserGroupEntityController {
@Inject
private Logger logger;
@Inject
private UserGroupEntityDAO userGroupEntityDAO;
@Inject
private UserGroupUserEntityDAO userGroupUserEntityDAO;
@Inject
private SchoolDataSourceDAO schoolDataSourceDAO;
@Inject
private UserSchoolDataIdentifierController userSchoolDataIdentifierController;
public UserGroupEntity createUserGroupEntity(String dataSource, String identifier) {
SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource);
if (schoolDataSource == null) {
logger.severe("Could not find datasource " + dataSource);
return null;
}
return userGroupEntityDAO.create(schoolDataSource, identifier, false);
}
public UserGroupUserEntity createUserGroupUserEntity(UserGroupEntity userGroupEntity, String dataSource, String identifier, UserSchoolDataIdentifier userSchoolDataIdentifier) {
SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource);
if (schoolDataSource == null) {
logger.severe("Could not find datasource " + dataSource);
return null;
}
return userGroupUserEntityDAO.create(userGroupEntity, schoolDataSource, identifier, userSchoolDataIdentifier, false);
}
public UserGroupEntity findUserGroupEntityByDataSourceAndIdentifier(String dataSource, String identifier) {
return findUserGroupEntityByDataSourceAndIdentifier(dataSource, identifier, false);
}
public UserGroupEntity findUserGroupEntityByDataSourceAndIdentifier(String dataSource, String identifier, boolean includeArchived) {
SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource);
if (schoolDataSource == null) {
logger.severe("Could not find datasource " + dataSource);
return null;
}
if (includeArchived) {
return userGroupEntityDAO.findByDataSourceAndIdentifier(schoolDataSource, identifier);
} else {
return userGroupEntityDAO.findByDataSourceAndIdentifierAndArchived(schoolDataSource, identifier, false);
}
}
public Long getGroupUserCount(UserGroupEntity userGroupEntity) {
return userGroupEntityDAO.countGroupUsers(userGroupEntity);
}
public UserGroupUserEntity findUserGroupUserEntityByDataSourceAndIdentifier(String dataSource, String identifier) {
return findUserGroupUserEntityByDataSourceAndIdentifier(dataSource, identifier, false);
}
public UserGroupUserEntity findUserGroupUserEntityByDataSourceAndIdentifier(String dataSource, String identifier, Boolean includeArchived) {
SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource);
if (schoolDataSource == null) {
logger.severe("Could not find datasource " + dataSource);
return null;
}
if (includeArchived) {
return userGroupUserEntityDAO.findByDataSourceAndIdentifier(schoolDataSource, identifier);
} else {
return userGroupUserEntityDAO.findByDataSourceAndIdentifierAndArchived(schoolDataSource, identifier, Boolean.FALSE);
}
}
public void archiveUserGroupUserEntity(UserGroupUserEntity userGroupUserEntity) {
userGroupUserEntityDAO.updateArchived(userGroupUserEntity, Boolean.TRUE);
}
public void unarchiveUserGroupUserEntity(UserGroupUserEntity userGroupUserEntity) {
userGroupUserEntityDAO.updateArchived(userGroupUserEntity, Boolean.FALSE);
}
public void deleteUserGroupUserEntity(UserGroupUserEntity userGroupUserEntity) {
userGroupUserEntityDAO.delete(userGroupUserEntity);
}
public List<UserGroupEntity> listUserGroupEntitiesByDataSource(String dataSource, int firstResult, int maxResults) {
SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource);
if (schoolDataSource == null) {
logger.severe("Could not find datasource " + dataSource);
return null;
}
return userGroupEntityDAO.listByDataSource(schoolDataSource, firstResult, maxResults);
}
public List<UserGroupUserEntity> listUserGroupUserEntitiesByUserGroupEntity(UserGroupEntity userGroupEntity) {
return userGroupUserEntityDAO.listByUserGroupEntityAndArchived(userGroupEntity, Boolean.FALSE);
}
public List<UserGroupEntity> listUserGroupsByUserEntity(UserEntity userEntity) {
return userGroupEntityDAO.listByUserEntityExcludeArchived(userEntity);
}
public List<UserGroupEntity> listUserGroupsByUserIdentifier(UserSchoolDataIdentifier userSchoolDataIdentifier) {
return userGroupEntityDAO.listByUserIdentifierExcludeArchived(userSchoolDataIdentifier);
}
public List<UserGroupEntity> listUserGroupsByUserIdentifier(SchoolDataIdentifier userIdentifier) {
UserSchoolDataIdentifier userSchoolDataIdentifier = userSchoolDataIdentifierController.findUserSchoolDataIdentifierBySchoolDataIdentifier(userIdentifier);
if (userSchoolDataIdentifier == null) {
logger.severe(String.format("Could not find userSchoolDataIdentifier by userIdentifer %s", userIdentifier));
return Collections.emptyList();
}
return userGroupEntityDAO.listByUserIdentifierExcludeArchived(userSchoolDataIdentifier);
}
public List<UserGroupEntity> listUserGroupEntities() {
return userGroupEntityDAO.listByArchived(Boolean.FALSE);
}
public List<UserGroupEntity> listUserGroupEntitiesIncludeArchived() {
return userGroupEntityDAO.listAll();
}
public UserGroupEntity findUserGroupEntityById(Long groupId) {
return userGroupEntityDAO.findById(groupId);
}
public UserGroupUserEntity findUserGroupUserEntityById(Long userGroupUserId) {
return userGroupUserEntityDAO.findById(userGroupUserId);
}
public List<UserGroupUserEntity> listUserGroupUsersByUserSchoolDataIdentifier(UserSchoolDataIdentifier userSchoolDataIdentifier) {
return userGroupUserEntityDAO.listByUserSchoolDataIdentifier(userSchoolDataIdentifier);
}
public UserGroupUserEntity updateUserSchoolDataIdentifier(UserGroupUserEntity userGroupUserEntity, UserSchoolDataIdentifier userSchoolDataIdentifier) {
return userGroupUserEntityDAO.updateUserSchoolDataIdentifier(userGroupUserEntity, userSchoolDataIdentifier);
}
public UserGroupUserEntity updateUserGroupEntity(UserGroupUserEntity userGroupUserEntity, UserGroupEntity userGroupEntity) {
return userGroupUserEntityDAO.updateUserGroupEntity(userGroupUserEntity, userGroupEntity);
}
public UserGroupEntity archiveUserGroupEntity(UserGroupEntity userGroupEntity) {
return userGroupEntityDAO.updateArchived(userGroupEntity, Boolean.TRUE);
}
public UserGroupEntity unarchiveUserGroupEntity(UserGroupEntity userGroupEntity) {
return userGroupEntityDAO.updateArchived(userGroupEntity, Boolean.FALSE);
}
public void deleteUserGroupEntity(UserGroupEntity userGroupEntity){
userGroupEntityDAO.delete(userGroupEntity);
}
public boolean haveSharedUserGroups(UserEntity user1, UserEntity user2) {
return userGroupUserEntityDAO.haveSharedUserGroups(user1, user2);
}
}