package fi.otavanopisto.muikku.plugins.communicator.rest; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; import fi.otavanopisto.muikku.controller.TagController; import fi.otavanopisto.muikku.model.base.Tag; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.model.users.UserGroupEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity; import fi.otavanopisto.muikku.plugins.communicator.CommunicatorController; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessage; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageId; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageIdLabel; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipient; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipientUserGroup; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipientWorkspaceGroup; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorUserLabel; import fi.otavanopisto.muikku.rest.model.UserBasicInfo; import fi.otavanopisto.muikku.schooldata.SchoolDataBridgeSessionController; import fi.otavanopisto.muikku.schooldata.WorkspaceController; import fi.otavanopisto.muikku.schooldata.WorkspaceEntityController; import fi.otavanopisto.muikku.schooldata.entity.UserGroup; import fi.otavanopisto.muikku.schooldata.entity.Workspace; import fi.otavanopisto.muikku.users.UserController; import fi.otavanopisto.muikku.users.UserEntityController; import fi.otavanopisto.muikku.users.UserGroupController; import fi.otavanopisto.muikku.users.UserGroupEntityController; public class CommunicatorRESTModels { @Inject private CommunicatorController communicatorController; @Inject private UserEntityController userEntityController; @Inject private UserController userController; @Inject private TagController tagController; @Inject private SchoolDataBridgeSessionController schoolDataBridgeSessionController; @Inject private UserGroupEntityController userGroupEntityController; @Inject private UserGroupController userGroupController; @Inject private WorkspaceEntityController workspaceEntityController; @Inject private WorkspaceController workspaceController; /** * Returns message sender UserBasicInfo * * @param communicatorMessage * @return */ public UserBasicInfo getSenderBasicInfo(CommunicatorMessage communicatorMessage) { schoolDataBridgeSessionController.startSystemSession(); try { UserEntity userEntity = userEntityController.findUserEntityById(communicatorMessage.getSender()); fi.otavanopisto.muikku.schooldata.entity.User user = userController.findUserByUserEntityDefaults(userEntity); Boolean hasPicture = false; // TODO: userController.hasPicture(userEntity); fi.otavanopisto.muikku.rest.model.UserBasicInfo result = new fi.otavanopisto.muikku.rest.model.UserBasicInfo( userEntity.getId(), user.getFirstName(), user.getLastName(), user.getNickName(), user.getStudyProgrammeName(), hasPicture, user.hasEvaluationFees(), user.getCurriculumIdentifier()); return result; } finally { schoolDataBridgeSessionController.endSystemSession(); } } public List<CommunicatorUserLabelRESTModel> restUserLabel(List<CommunicatorUserLabel> userLabels) { List<CommunicatorUserLabelRESTModel> result = new ArrayList<CommunicatorUserLabelRESTModel>(); for (CommunicatorUserLabel userLabel : userLabels) result.add(restUserLabel(userLabel)); return result; } public CommunicatorUserLabelRESTModel restUserLabel(CommunicatorUserLabel userLabel) { return new CommunicatorUserLabelRESTModel(userLabel.getId(), userLabel.getName(), userLabel.getColor()); } public List<CommunicatorMessageIdLabelRESTModel> restLabel(List<CommunicatorMessageIdLabel> messageIdLabels) { List<CommunicatorMessageIdLabelRESTModel> result = new ArrayList<CommunicatorMessageIdLabelRESTModel>(); for (CommunicatorMessageIdLabel messageIdLabel : messageIdLabels) result.add(restLabel(messageIdLabel)); return result; } public CommunicatorMessageIdLabelRESTModel restLabel(CommunicatorMessageIdLabel messageIdLabel) { return new CommunicatorMessageIdLabelRESTModel( messageIdLabel.getId(), messageIdLabel.getUserEntity(), messageIdLabel.getCommunicatorMessageId() != null ? messageIdLabel.getCommunicatorMessageId().getId() : null, messageIdLabel.getLabel() != null ? messageIdLabel.getLabel().getId() : null, messageIdLabel.getLabel() != null ? messageIdLabel.getLabel().getName() : null, messageIdLabel.getLabel() != null ? messageIdLabel.getLabel().getColor() : null ); } public List<CommunicatorMessageRecipientRESTModel> restRecipient(List<CommunicatorMessageRecipient> recipients) { schoolDataBridgeSessionController.startSystemSession(); try { List<CommunicatorMessageRecipientRESTModel> result = new ArrayList<CommunicatorMessageRecipientRESTModel>(); for (CommunicatorMessageRecipient recipient : recipients) result.add(restRecipient(recipient)); return result; } finally { schoolDataBridgeSessionController.endSystemSession(); } } public CommunicatorMessageRecipientRESTModel restRecipient(CommunicatorMessageRecipient recipient) { schoolDataBridgeSessionController.startSystemSession(); try { UserEntity userEntity = userEntityController.findUserEntityById(recipient.getRecipient()); fi.otavanopisto.muikku.schooldata.entity.User user = userController.findUserByUserEntityDefaults(userEntity); return new CommunicatorMessageRecipientRESTModel( recipient.getId(), recipient.getCommunicatorMessage().getId(), recipient.getRecipient(), user.getFirstName(), user.getLastName(), user.getNickName()); } finally { schoolDataBridgeSessionController.endSystemSession(); } } public CommunicatorThreadViewRESTModel restThreadViewModel(List<CommunicatorMessage> messages, CommunicatorMessageId olderThread, CommunicatorMessageId newerThread, List<CommunicatorMessageIdLabelRESTModel> labels) { Long olderThreadId = olderThread != null ? olderThread.getId() : null; Long newerThreadId = newerThread != null ? newerThread.getId() : null; List<CommunicatorMessageRESTModel> restMessages = restFullMessage(messages); return new CommunicatorThreadViewRESTModel(olderThreadId, newerThreadId, restMessages, labels); } public List<fi.otavanopisto.muikku.rest.model.UserGroup> restUserGroupRecipients(List<CommunicatorMessageRecipientUserGroup> recipients) { schoolDataBridgeSessionController.startSystemSession(); try { List<fi.otavanopisto.muikku.rest.model.UserGroup> result = new ArrayList<fi.otavanopisto.muikku.rest.model.UserGroup>(); for (CommunicatorMessageRecipientUserGroup recipient : recipients) { fi.otavanopisto.muikku.rest.model.UserGroup restUserGroupRecipient = restUserGroupRecipient(recipient); if (restUserGroupRecipient != null) result.add(restUserGroupRecipient); } return result; } finally { schoolDataBridgeSessionController.endSystemSession(); } } public fi.otavanopisto.muikku.rest.model.UserGroup restUserGroupRecipient(CommunicatorMessageRecipientUserGroup userGroup) { schoolDataBridgeSessionController.startSystemSession(); try { UserGroupEntity entity = userGroupEntityController.findUserGroupEntityById(userGroup.getUserGroupEntityId()); if (entity != null) { Long userCount = userGroupEntityController.getGroupUserCount(entity); UserGroup group = userGroupController.findUserGroup(entity); if (group != null) return new fi.otavanopisto.muikku.rest.model.UserGroup(entity.getId(), group.getName(), userCount); } return null; } finally { schoolDataBridgeSessionController.endSystemSession(); } } public List<CommunicatorMessageRecipientWorkspaceGroupRESTModel> restWorkspaceGroupRecipients(List<CommunicatorMessageRecipientWorkspaceGroup> recipients) { schoolDataBridgeSessionController.startSystemSession(); try { List<CommunicatorMessageRecipientWorkspaceGroupRESTModel> result = new ArrayList<CommunicatorMessageRecipientWorkspaceGroupRESTModel>(); for (CommunicatorMessageRecipientWorkspaceGroup recipient : recipients) { CommunicatorMessageRecipientWorkspaceGroupRESTModel restWorkspaceGroupRecipient = restWorkspaceGroupRecipient(recipient); if (restWorkspaceGroupRecipient != null) result.add(restWorkspaceGroupRecipient); } return result; } finally { schoolDataBridgeSessionController.endSystemSession(); } } public CommunicatorMessageRecipientWorkspaceGroupRESTModel restWorkspaceGroupRecipient(CommunicatorMessageRecipientWorkspaceGroup workspaceGroup) { schoolDataBridgeSessionController.startSystemSession(); try { WorkspaceEntity workspaceEntity = workspaceEntityController.findWorkspaceEntityById(workspaceGroup.getWorkspaceEntityId()); if (workspaceEntity != null) { Workspace workspace = workspaceController.findWorkspace(workspaceEntity); if (workspace != null) { return new CommunicatorMessageRecipientWorkspaceGroupRESTModel(workspaceGroup.getWorkspaceEntityId(), workspaceGroup.getArchetype(), workspace.getName(), workspace.getNameExtension()); } } return null; } finally { schoolDataBridgeSessionController.endSystemSession(); } } public List<CommunicatorMessageRESTModel> restFullMessage(List<CommunicatorMessage> messages) { List<CommunicatorMessageRESTModel> result = new ArrayList<>(); for (CommunicatorMessage message : messages) result.add(restFullMessage(message)); return result; } public CommunicatorMessageRESTModel restFullMessage(CommunicatorMessage message) { String categoryName = message.getCategory() != null ? message.getCategory().getName() : null; UserBasicInfo senderBasicInfo = getSenderBasicInfo(message); List<CommunicatorMessageRecipient> messageRecipients = communicatorController.listCommunicatorMessageRecipients(message); List<CommunicatorMessageRecipientUserGroup> userGroupRecipients = communicatorController.listCommunicatorMessageUserGroupRecipients(message); List<CommunicatorMessageRecipientWorkspaceGroup> workspaceGroupRecipients = communicatorController.listCommunicatorMessageWorkspaceGroupRecipients(message); Long recipientCount = (long) messageRecipients.size(); List<CommunicatorMessageRecipientRESTModel> restRecipients = restRecipient(messageRecipients); List<fi.otavanopisto.muikku.rest.model.UserGroup> restUserGroupRecipients = restUserGroupRecipients(userGroupRecipients); List<CommunicatorMessageRecipientWorkspaceGroupRESTModel> restWorkspaceRecipients = restWorkspaceGroupRecipients(workspaceGroupRecipients); return new CommunicatorMessageRESTModel( message.getId(), message.getCommunicatorMessageId().getId(), message.getSender(), senderBasicInfo, categoryName, message.getCaption(), message.getContent(), message.getCreated(), tagIdsToStr(message.getTags()), restRecipients, restUserGroupRecipients, restWorkspaceRecipients, recipientCount); } public Set<String> tagIdsToStr(Set<Long> tagIds) { Set<String> tagsStr = new HashSet<String>(); for (Long tagId : tagIds) { Tag tag = tagController.findTagById(tagId); if (tag != null) tagsStr.add(tag.getText()); } return tagsStr; } }