package fi.otavanopisto.muikku.plugins.wall.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.inject.Inject; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity; import fi.otavanopisto.muikku.plugins.wall.WallEntryProvider; import fi.otavanopisto.muikku.plugins.wall.WallFeedItem; import fi.otavanopisto.muikku.plugins.wall.WallPermissions; import fi.otavanopisto.muikku.plugins.wall.dao.UserWallDAO; import fi.otavanopisto.muikku.plugins.wall.dao.WallEntryDAO; import fi.otavanopisto.muikku.plugins.wall.dao.WorkspaceWallDAO; import fi.otavanopisto.muikku.plugins.wall.model.UserWall; import fi.otavanopisto.muikku.plugins.wall.model.Wall; import fi.otavanopisto.muikku.plugins.wall.model.WallEntry; import fi.otavanopisto.muikku.plugins.wall.model.WorkspaceWall; import fi.otavanopisto.muikku.schooldata.WorkspaceController; import fi.otavanopisto.muikku.session.SessionController; import fi.otavanopisto.muikku.users.UserEntityController; public class DefaultWallEntryProvider implements WallEntryProvider { @Inject private SessionController sessionController; @Inject private UserEntityController userEntityController; @Inject private WorkspaceController workspaceController; @Inject private UserWallDAO userWallDAO; @Inject private WallEntryDAO wallEntryDAO; @Inject private WorkspaceWallDAO courseWallDAO; @Override public List<WallFeedItem> listWallEntryItems(Wall wall) { // TODO if (wall == null) return null; List<WallEntry> entries = new ArrayList<WallEntry>(); switch (wall.getWallType()) { case USER: UserWall userWall = userWallDAO.findById(wall.getId()); UserEntity wallOwner = userEntityController.findUserEntityById(userWall.getUser()); UserEntity loggedUser = sessionController.isLoggedIn() ? sessionController.getLoggedUserEntity() : null; boolean ownsWall = loggedUser != null ? loggedUser.getId().equals(wallOwner.getId()) : false; boolean hasAccess = sessionController.hasEnvironmentPermission(WallPermissions.READ_ALL_WALLS); if (ownsWall || hasAccess) { /** * Full access grants full listing of both the users wall and all linked walls */ entries.addAll(wallEntryDAO.listEntriesByWall(wall)); } else { /** * When viewing other peoples walls, you only see public or owned entries */ if (sessionController.isLoggedIn()) entries.addAll(wallEntryDAO.listPublicOrOwnedEntriesByWall(wall, loggedUser)); else entries.addAll(wallEntryDAO.listPublicEntriesByWall(wall)); } break; case WORKSPACE: WorkspaceWall courseWall = courseWallDAO.findById(wall.getId()); entries.addAll(listWorkspaceEntries(courseWall)); break; case ENVIRONMENT: // TODO: oikeudet? entries.addAll(wallEntryDAO.listEntriesByWall(wall)); break; } List<WallFeedItem> feedItems = new ArrayList<WallFeedItem>(); for (WallEntry entry : entries) { feedItems.add(new WallFeedWallEntryItem(entry)); } return feedItems; } private List<WallEntry> listWorkspaceEntries(WorkspaceWall workspaceWall) { List<WallEntry> entries = new ArrayList<WallEntry>(); WorkspaceEntity workspaceEntity = workspaceController.findWorkspaceEntityById(workspaceWall.getWorkspace()); if (sessionController.hasWorkspacePermission(WallPermissions.WALL_READALLCOURSEMESSAGES, workspaceEntity)) { entries.addAll(wallEntryDAO.listEntriesByWall(workspaceWall)); } else { entries.addAll(wallEntryDAO.listPublicOrOwnedEntriesByWall(workspaceWall, sessionController.getLoggedUserEntity())); } return entries; } @Override public List<String> listRequiredJavaScripts() { return Arrays.asList( "scripts/gui/wall_entry.js" ); } }