package fi.otavanopisto.muikku.schooldata; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; 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.workspace.WorkspaceEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceUserEntity; import fi.otavanopisto.muikku.schooldata.entity.CourseIdentifier; import fi.otavanopisto.muikku.schooldata.entity.User; import fi.otavanopisto.muikku.schooldata.entity.Workspace; import fi.otavanopisto.muikku.schooldata.entity.WorkspaceType; import fi.otavanopisto.muikku.schooldata.entity.WorkspaceUser; class WorkspaceSchoolDataController { // TODO: Caching // TODO: Events @Inject private Logger logger; @Inject @Any private Instance<WorkspaceSchoolDataBridge> workspaceBridges; @Inject private SchoolDataSourceDAO schoolDataSourceDAO; @Inject private WorkspaceEntityDAO workspaceEntityDAO; /* Workspaces */ public Workspace createWorkspace(String schoolDataSourceIdentifier, String name, String description, WorkspaceType type, String courseIdentifierIdentifier) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSourceIdentifier); WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { return workspaceBridge.createWorkspace(name, description, type, courseIdentifierIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + schoolDataSource); } return null; } public Workspace findWorkspace(WorkspaceEntity workspaceEntity) { return findWorkspace(workspaceEntity.getDataSource(), workspaceEntity.getIdentifier()); } public Workspace findWorkspace(SchoolDataSource schoolDataSource, String identifier) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { return workspaceBridge.findWorkspace(identifier); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + schoolDataSource); } return null; } public List<Workspace> listWorkspaces(String schoolDataSource) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { return workspaceBridge.listWorkspaces(); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + schoolDataSource); } return null; } public List<Workspace> listWorkspaces() { // TODO: This method WILL cause performance problems, replace with something more sensible List<Workspace> result = new ArrayList<>(); for (WorkspaceSchoolDataBridge workspaceBridge : getWorkspaceBridges()) { result.addAll(workspaceBridge.listWorkspaces()); } return result; } public Workspace copyWorkspace(SchoolDataIdentifier workspaceIdentifier, String name, String nameExtension, String description) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(workspaceIdentifier.getDataSource()); if (workspaceBridge != null) { return workspaceBridge.copyWorkspace(workspaceIdentifier, name, nameExtension, description); } else { logger.log(Level.SEVERE, String.format("School Data Bridge not found: %s", workspaceIdentifier)); } return null; } public Workspace updateWorkspace(Workspace workspace) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(workspace.getSchoolDataSource()); if (workspaceBridge != null) { return workspaceBridge.updateWorkspace(workspace); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + workspace.getSchoolDataSource()); } return null; } public void removeWorkspace(Workspace workspace) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(workspace.getSchoolDataSource()); if (workspaceBridge != null) { workspaceBridge.removeWorkspace(workspace.getIdentifier()); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + workspace.getSchoolDataSource()); } } public List<Workspace> listWorkspacesByCourseIdentifier(CourseIdentifier courseIdentifier) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(courseIdentifier.getSchoolDataSource()); if (schoolDataSource != null) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { return workspaceBridge.listWorkspacesByCourseIdentifier(courseIdentifier.getIdentifier()); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + courseIdentifier.getSchoolDataSource()); } } else { logger.log(Level.SEVERE, "School Data Source not found: " + courseIdentifier.getSchoolDataSource()); } return null; } /* Workspace Entities */ public WorkspaceEntity findWorkspaceEntity(Workspace workspace) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(workspace.getSchoolDataSource()); WorkspaceEntity workspaceEntity = workspaceEntityDAO.findByDataSourceAndIdentifier(schoolDataSource, workspace.getIdentifier()); return workspaceEntity; } /* Workspace Types */ public WorkspaceType findWorkspaceTypeByDataSourceAndIdentifier(String schoolDataSourceIdentifier, String identifier) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSourceIdentifier); if (schoolDataSource != null) { return findWorkspaceTypeByDataSourceAndIdentifier(schoolDataSource, identifier); } return null; } public WorkspaceType findWorkspaceTypeByDataSourceAndIdentifier(SchoolDataSource schoolDataSource, String identifier) { WorkspaceSchoolDataBridge schoolDataBridge = getWorkspaceBridge(schoolDataSource); if (schoolDataBridge != null) { return schoolDataBridge.findWorkspaceType(identifier); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + schoolDataSource.getIdentifier()); } return null; } public List<WorkspaceType> listWorkspaceTypes() { List<WorkspaceType> result = new ArrayList<>(); for (WorkspaceSchoolDataBridge workspaceBridge : getWorkspaceBridges()) { result.addAll(workspaceBridge.listWorkspaceTypes()); } return result; } /* Workspace Users */ public WorkspaceUser createWorkspaceUser(Workspace workspace, User user, String roleSchoolDataSource, String roleIdentifier) { WorkspaceEntity workspaceEntity = findWorkspaceEntity(workspace); WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(workspaceEntity.getDataSource()); if (workspaceBridge != null) { return workspaceBridge.createWorkspaceUser(workspace, user, roleSchoolDataSource, roleIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + workspaceEntity.getDataSource()); } return null; } public WorkspaceUser findWorkspaceUser(WorkspaceUserEntity workspaceUserEntity) { WorkspaceEntity workspaceEntity = workspaceUserEntity.getWorkspaceEntity(); WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(workspaceEntity.getDataSource()); if (workspaceBridge != null) { try { SchoolDataIdentifier workspaceIdentifier = new SchoolDataIdentifier(workspaceEntity.getIdentifier(), workspaceEntity.getDataSource().getIdentifier()); SchoolDataIdentifier workspaceUserIdentifier = new SchoolDataIdentifier(workspaceUserEntity.getIdentifier(), workspaceUserEntity.getUserSchoolDataIdentifier().getDataSource().getIdentifier()); return workspaceBridge.findWorkspaceUser(workspaceIdentifier, workspaceUserIdentifier); } catch (SchoolDataBridgeInternalException e) { logger.log(Level.SEVERE, "School Data Bridge reported a problem while finding workspace", e); } } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + workspaceEntity.getDataSource()); } return null; } public WorkspaceUser findWorkspaceUserByWorkspaceAndUser(SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier userIdentifier) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(workspaceIdentifier.getDataSource()); if (workspaceBridge != null) { return workspaceBridge.findWorkspaceUserByWorkspaceAndUser(workspaceIdentifier, userIdentifier); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + workspaceIdentifier.getDataSource()); } return null; } public WorkspaceUser findWorkspaceUser(SchoolDataIdentifier workspaceIdentifier, SchoolDataIdentifier workspaceUserIdentifier) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(workspaceIdentifier.getDataSource()); if (workspaceBridge != null) { try { return workspaceBridge.findWorkspaceUser(workspaceIdentifier, workspaceUserIdentifier); } catch (SchoolDataBridgeInternalException e) { logger.log(Level.SEVERE, "School Data Bridge reported a problem while finding workspace", e); } } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + workspaceIdentifier.getDataSource()); } return null; } @Deprecated public List<WorkspaceUser> listWorkspaceUsers(Workspace workspace) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(workspace.getSchoolDataSource()); if (schoolDataSource != null) { WorkspaceSchoolDataBridge schoolDataBridge = getWorkspaceBridge(schoolDataSource); if (schoolDataBridge != null) { return schoolDataBridge.listWorkspaceUsers(workspace.getIdentifier()); } else { logger.log(Level.SEVERE, "School Data Bridge not found: " + schoolDataSource.getIdentifier()); } } return null; } public void updateWorkspaceStudentActivity(WorkspaceUser workspaceUser, boolean activity) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(workspaceUser.getUserIdentifier().getDataSource()); if (schoolDataSource != null) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { workspaceBridge.updateWorkspaceStudentActivity(workspaceUser, activity); } } } public List<WorkspaceUser> listWorkspaceStudents(Workspace workspace) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(workspace.getSchoolDataSource()); if (schoolDataSource != null) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { return workspaceBridge.listWorkspaceStudents(workspace.getIdentifier()); } } return Collections.<WorkspaceUser>emptyList(); } public List<WorkspaceUser> listWorkspaceStudents(Workspace workspace, boolean active) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(workspace.getSchoolDataSource()); if (schoolDataSource != null) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { return workspaceBridge.listWorkspaceStudents(workspace.getIdentifier(), active); } } return Collections.<WorkspaceUser>emptyList(); } public List<WorkspaceUser> listWorkspaceStaffMembers(Workspace workspace) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(workspace.getSchoolDataSource()); if (schoolDataSource != null) { WorkspaceSchoolDataBridge workspaceBridge = getWorkspaceBridge(schoolDataSource); if (workspaceBridge != null) { return workspaceBridge.listWorkspaceStaffMembers(workspace.getIdentifier()); } } return Collections.<WorkspaceUser>emptyList(); } private WorkspaceSchoolDataBridge getWorkspaceBridge(SchoolDataSource schoolDataSource) { Iterator<WorkspaceSchoolDataBridge> iterator = workspaceBridges.iterator(); while (iterator.hasNext()) { WorkspaceSchoolDataBridge workspaceSchoolDataBridge = iterator.next(); if (workspaceSchoolDataBridge.getSchoolDataSource().equals(schoolDataSource.getIdentifier())) { return workspaceSchoolDataBridge; } } return null; } private WorkspaceSchoolDataBridge getWorkspaceBridge(String schoolDataSourceIdentifier) { SchoolDataSource schoolDataSource = schoolDataSourceDAO.findByIdentifier(schoolDataSourceIdentifier); if (schoolDataSource != null) { return getWorkspaceBridge(schoolDataSource); } return null; } private List<WorkspaceSchoolDataBridge> getWorkspaceBridges() { List<WorkspaceSchoolDataBridge> result = new ArrayList<>(); Iterator<WorkspaceSchoolDataBridge> iterator = workspaceBridges.iterator(); while (iterator.hasNext()) { result.add(iterator.next()); } return Collections.unmodifiableList(result); } }