package fi.otavanopisto.muikku.schooldata; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Logger; import javax.enterprise.context.Dependent; import javax.inject.Inject; import fi.otavanopisto.muikku.dao.base.SchoolDataSourceDAO; import fi.otavanopisto.muikku.dao.workspace.WorkspaceEntityDAO; import fi.otavanopisto.muikku.model.base.SchoolDataSource; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceUserEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceAccess; import fi.otavanopisto.muikku.users.WorkspaceUserEntityController; @Dependent public class WorkspaceEntityController { @Inject private Logger logger; @Inject private WorkspaceUserEntityController workspaceUserEntityController; @Inject private WorkspaceEntityDAO workspaceEntityDAO; @Inject private SchoolDataSourceDAO schoolDataSourceDAO; public WorkspaceEntity createWorkspaceEntity(String dataSource, String identifier, String urlName) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource); if (schoolDataSource == null) { logger.severe("Could not find school data source: " + dataSource); return null; } WorkspaceEntity workspaceEntity = workspaceEntityDAO.create(schoolDataSource, identifier, urlName, WorkspaceAccess.LOGGED_IN, Boolean.FALSE, Boolean.FALSE); return workspaceEntity; } public WorkspaceEntity findWorkspaceEntityById(Long workspaceEntityId) { return workspaceEntityDAO.findById(workspaceEntityId); } public WorkspaceEntity findWorkspaceByDataSourceAndIdentifier(String dataSource, String identifier) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource); if (schoolDataSource == null) { logger.severe("Could not find school data source: " + dataSource); return null; } return workspaceEntityDAO.findByDataSourceAndIdentifier(schoolDataSource, identifier); } public WorkspaceEntity findWorkspaceByIdentifier(SchoolDataIdentifier workspaceIdentier) { return findWorkspaceByDataSourceAndIdentifier(workspaceIdentier.getDataSource(), workspaceIdentier.getIdentifier()); } public WorkspaceEntity findWorkspaceByUrlName(String urlName) { return workspaceEntityDAO.findByUrlName(urlName); } public WorkspaceEntity findWorkspaceByUrlNameAndArchived(String urlName, Boolean archived) { return workspaceEntityDAO.findByUrlNameAndArchived(urlName, archived); } public List<WorkspaceEntity> listWorkspaceEntities() { return workspaceEntityDAO.listAll(); } public List<String> listWorkspaceEntityIdentifiersByDataSource(String dataSource) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource); if (schoolDataSource == null) { logger.severe("Could not find school data source: " + dataSource); return null; } return listWorkspaceEntityIdentifiersByDataSource(schoolDataSource); } public List<String> listWorkspaceEntityIdentifiersByDataSource(SchoolDataSource dataSource) { return workspaceEntityDAO.listIdentifiersByDataSourceAndArchived(dataSource, Boolean.FALSE); } public List<WorkspaceEntity> listWorkspaceEntitiesByDataSource(SchoolDataSource dataSource, Integer firstResult, Integer maxResults) { return workspaceEntityDAO.listByDataSource(dataSource, firstResult, maxResults); } public List<WorkspaceEntity> listWorkspaceEntitiesByDataSource(String dataSource, Integer firstResult, Integer maxResults) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource); if (schoolDataSource == null) { logger.severe("Could not find school data source: " + dataSource); return null; } return listWorkspaceEntitiesByDataSource(schoolDataSource, firstResult, maxResults); } public WorkspaceEntity updateAccess(WorkspaceEntity workspaceEntity, WorkspaceAccess access) { return workspaceEntityDAO.updateAccess(workspaceEntity, access); } public WorkspaceEntity updateDefaultMaterialLicense(WorkspaceEntity workspaceEntity, String defaultMaterialLicense) { return workspaceEntityDAO.updateDefaultMaterialLicense(workspaceEntity, defaultMaterialLicense); } public WorkspaceEntity updatePublished(WorkspaceEntity workspaceEntity, Boolean published) { return workspaceEntityDAO.updatePublished(workspaceEntity, published); } public WorkspaceEntity archiveWorkspaceEntity(WorkspaceEntity workspaceEntity) { return workspaceEntityDAO.updateArchived(workspaceEntity, Boolean.TRUE); } public void deleteWorkspaceEntity(WorkspaceEntity workspaceEntity) { workspaceEntityDAO.delete(workspaceEntity); } public List<WorkspaceEntity> listWorkspaceEntitiesByWorkspaceUser(UserEntity userEntity) { List<WorkspaceEntity> result = new ArrayList<>(); List<WorkspaceUserEntity> workspaceUserEntities = workspaceUserEntityController.listWorkspaceUserEntitiesByUserEntity(userEntity); for (WorkspaceUserEntity workspaceUserEntity : workspaceUserEntities) { result.add(workspaceUserEntity.getWorkspaceEntity()); } return result; } public List<Long> listPublishedWorkspaceEntityIds() { return workspaceEntityDAO.listPublishedWorkspaceEntityIds(); } public Set<Long> findWorkspaceEntityIdsByIdentifiers(Collection<SchoolDataIdentifier> identifiers) { Set<Long> result = new HashSet<>(); Map<String, Set<String>> groupedIdentifiers = new HashMap<>(); for (SchoolDataIdentifier identifier : identifiers) { Set<String> groupIdentifiers = groupedIdentifiers.get(identifier.getDataSource()); if (groupIdentifiers == null) { groupIdentifiers = new HashSet<>(); groupedIdentifiers.put(identifier.getDataSource(), groupIdentifiers); } groupIdentifiers.add(identifier.getIdentifier()); } for (String dataSource : groupedIdentifiers.keySet()) { Set<String> groupIdentifiers = groupedIdentifiers.get(dataSource); SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(dataSource); if (schoolDataSource != null) { result.addAll(workspaceEntityDAO.listIdsByDataSourceAndIdentifiers(schoolDataSource, groupIdentifiers)); } else { logger.severe("Could not find school data source: " + dataSource); } } return result; } }