Example usage for com.liferay.portal.kernel.util ObjectValuePair getValue

List of usage examples for com.liferay.portal.kernel.util ObjectValuePair getValue

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.util ObjectValuePair getValue.

Prototype

public V getValue() 

Source Link

Usage

From source file:com.cd.learning.hook.MBMailMessage.java

License:Open Source License

public List<ObjectValuePair<String, InputStream>> getInputStreamOVPs() {
    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = new ArrayList<ObjectValuePair<String, InputStream>>(
            _bytesOVPs.size());//from   w  ww . j  a  v a 2  s  .c o m

    for (ObjectValuePair<String, byte[]> bytesOVP : _bytesOVPs) {
        String key = bytesOVP.getKey();
        byte[] bytes = bytesOVP.getValue();

        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);

        ObjectValuePair<String, InputStream> inputStreamOVP = new ObjectValuePair<String, InputStream>(key,
                byteArrayInputStream);

        inputStreamOVPs.add(inputStreamOVP);
    }

    return inputStreamOVPs;
}

From source file:com.liferay.message.boards.internal.exportimport.data.handler.MBMessageStagedModelDataHandler.java

License:Open Source License

@Override
protected void doImportStagedModel(PortletDataContext portletDataContext, MBMessage message) throws Exception {

    if (!message.isRoot()) {
        StagedModelDataHandlerUtil.importReferenceStagedModel(portletDataContext, message, MBMessage.class,
                message.getParentMessageId());
    }//from  w  w  w  .  j a v a2  s  .  co m

    long userId = portletDataContext.getUserId(message.getUserUuid());

    Map<Long, Long> categoryIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBCategory.class);

    long parentCategoryId = MapUtil.getLong(categoryIds, message.getCategoryId(), message.getCategoryId());

    Map<Long, Long> threadIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBThread.class);

    long threadId = MapUtil.getLong(threadIds, message.getThreadId(), 0);

    Element messageElement = portletDataContext.getImportDataStagedModelElement(message);

    if (threadId == 0) {
        String threadUuid = messageElement.attributeValue("threadUuid");

        MBThread thread = _mbThreadLocalService.fetchMBThreadByUuidAndGroupId(threadUuid,
                portletDataContext.getScopeGroupId());

        if (thread != null) {
            threadId = thread.getThreadId();
        }
    }

    Map<Long, Long> messageIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBMessage.class);

    long parentMessageId = MapUtil.getLong(messageIds, message.getParentMessageId(),
            message.getParentMessageId());

    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = getAttachments(portletDataContext,
            messageElement, message);

    try {
        ServiceContext serviceContext = portletDataContext.createServiceContext(message);

        MBMessage importedMessage = null;

        if (portletDataContext.isDataStrategyMirror()) {
            MBMessage existingMessage = fetchStagedModelByUuidAndGroupId(message.getUuid(),
                    portletDataContext.getScopeGroupId());

            if (existingMessage == null) {
                serviceContext.setUuid(message.getUuid());

                if (message.isDiscussion()) {
                    importedMessage = addDiscussionMessage(portletDataContext, userId, threadId,
                            parentMessageId, message, serviceContext);
                } else {
                    importedMessage = _mbMessageLocalService.addMessage(userId, message.getUserName(),
                            portletDataContext.getScopeGroupId(), parentCategoryId, threadId, parentMessageId,
                            message.getSubject(), message.getBody(), message.getFormat(), inputStreamOVPs,
                            message.getAnonymous(), message.getPriority(), message.getAllowPingbacks(),
                            serviceContext);
                }
            } else {
                if (!message.isRoot() && message.isDiscussion()) {
                    MBDiscussion discussion = _mbDiscussionLocalService.getThreadDiscussion(threadId);

                    importedMessage = _mbMessageLocalService.updateDiscussionMessage(userId,
                            existingMessage.getMessageId(), discussion.getClassName(), discussion.getClassPK(),
                            message.getSubject(), message.getBody(), serviceContext);
                } else {
                    importedMessage = _mbMessageLocalService.updateMessage(userId,
                            existingMessage.getMessageId(), message.getSubject(), message.getBody(),
                            inputStreamOVPs, new ArrayList<String>(), message.getPriority(),
                            message.getAllowPingbacks(), serviceContext);
                }
            }
        } else {
            if (message.isDiscussion()) {
                importedMessage = addDiscussionMessage(portletDataContext, userId, threadId, parentMessageId,
                        message, serviceContext);
            } else {
                importedMessage = _mbMessageLocalService.addMessage(userId, message.getUserName(),
                        portletDataContext.getScopeGroupId(), parentCategoryId, threadId, parentMessageId,
                        message.getSubject(), message.getBody(), message.getFormat(), inputStreamOVPs,
                        message.getAnonymous(), message.getPriority(), message.getAllowPingbacks(),
                        serviceContext);
            }
        }

        importedMessage = _updateAnswer(message, importedMessage);

        if (importedMessage.isRoot() && !importedMessage.isDiscussion()) {
            _mbThreadLocalService.updateQuestion(importedMessage.getThreadId(),
                    GetterUtil.getBoolean(messageElement.attributeValue("question")));
        }

        if (message.isDiscussion()) {
            Map<Long, Long> discussionIds = (Map<Long, Long>) portletDataContext
                    .getNewPrimaryKeysMap(MBDiscussion.class);

            discussionIds.put(message.getMessageId(), importedMessage.getMessageId());
        }

        threadIds.put(message.getThreadId(), importedMessage.getThreadId());

        // Keep thread UUID

        MBThread thread = importedMessage.getThread();

        thread.setUuid(messageElement.attributeValue("threadUuid"));

        _mbThreadLocalService.updateMBThread(thread);

        portletDataContext.importClassedModel(message, importedMessage);
    } finally {
        for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) {

            InputStream inputStream = inputStreamOVP.getValue();

            StreamUtil.cleanUp(inputStream);
        }
    }
}

From source file:com.liferay.message.boards.internal.messaging.MailingListMessageListener.java

License:Open Source License

protected void processMessage(MailingListRequest mailingListRequest, Message mailMessage) throws Exception {

    if (MBUtil.hasMailIdHeader(mailMessage)) {
        return;/* w ww. j a v a 2  s .c o m*/
    }

    String from = null;

    Address[] addresses = mailMessage.getFrom();

    if (ArrayUtil.isNotEmpty(addresses)) {
        Address address = addresses[0];

        if (address instanceof InternetAddress) {
            from = ((InternetAddress) address).getAddress();
        } else {
            from = address.toString();
        }
    }

    long companyId = mailingListRequest.getCompanyId();
    long groupId = mailingListRequest.getGroupId();
    long categoryId = mailingListRequest.getCategoryId();

    if (_log.isDebugEnabled()) {
        _log.debug("Category id " + categoryId);
    }

    boolean anonymous = false;

    User user = _userLocalService.fetchUserByEmailAddress(companyId, from);

    if (user == null) {
        if (!mailingListRequest.isAllowAnonymous()) {
            return;
        }

        anonymous = true;

        user = _userLocalService.getUserById(companyId, mailingListRequest.getUserId());
    }

    long parentMessageId = MBUtil.getParentMessageId(mailMessage);

    if (_log.isDebugEnabled()) {
        _log.debug("Parent message id " + parentMessageId);
    }

    MBMessage parentMessage = null;

    if (parentMessageId > 0) {
        parentMessage = _mbMessageLocalService.fetchMBMessage(parentMessageId);
    }

    if (_log.isDebugEnabled()) {
        _log.debug("Parent message " + parentMessage);
    }

    MBMailMessage mbMailMessage = new MBMailMessage();

    MBMailUtil.collectPartContent(mailMessage, mbMailMessage);

    PermissionCheckerUtil.setThreadValues(user);

    MailingListThreadLocal.setSourceMailingList(true);

    String subject = MBUtil.getSubjectWithoutMessageId(mailMessage);

    ServiceContext serviceContext = new ServiceContext();

    serviceContext.setAddGroupPermissions(true);
    serviceContext.setAddGuestPermissions(true);

    String portletId = PortletProviderUtil.getPortletId(MBMessage.class.getName(), PortletProvider.Action.VIEW);

    serviceContext.setLayoutFullURL(_portal.getLayoutFullURL(groupId, portletId));

    serviceContext.setScopeGroupId(groupId);

    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = mbMailMessage.getInputStreamOVPs();

    try {
        if (parentMessage == null) {
            _mbMessageService.addMessage(groupId, categoryId, subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, anonymous, 0.0, true, serviceContext);
        } else {
            _mbMessageService.addMessage(parentMessage.getMessageId(), subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, anonymous, 0.0, true, serviceContext);
        }
    } finally {
        for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) {

            try (InputStream inputStream = inputStreamOVP.getValue()) {
            } catch (IOException ioe) {
                if (_log.isWarnEnabled()) {
                    _log.warn(ioe, ioe);
                }
            }
        }
    }
}

From source file:com.liferay.message.boards.internal.pop.MessageListenerImpl.java

License:Open Source License

@Override
public void deliver(String from, String recipient, Message message) throws MessageListenerException {

    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = null;

    try {/*from  www.ja  v  a2 s.  c om*/
        StopWatch stopWatch = new StopWatch();

        stopWatch.start();

        if (_log.isDebugEnabled()) {
            _log.debug("Deliver message from " + from + " to " + recipient);
        }

        String messageIdString = getMessageIdString(recipient, message);

        Company company = getCompany(messageIdString);

        if (_log.isDebugEnabled()) {
            _log.debug("Message id " + messageIdString);
        }

        long parentMessageId = MBUtil.getMessageId(messageIdString);

        if (_log.isDebugEnabled()) {
            _log.debug("Parent message id " + parentMessageId);
        }

        MBMessage parentMessage = null;

        if (parentMessageId > 0) {
            parentMessage = _mbMessageLocalService.fetchMBMessage(parentMessageId);
        }

        if (_log.isDebugEnabled()) {
            _log.debug("Parent message " + parentMessage);
        }

        long groupId = 0;
        long categoryId = MBUtil.getCategoryId(messageIdString);

        MBCategory category = _mbCategoryLocalService.fetchMBCategory(categoryId);

        if (category == null) {
            categoryId = MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID;

            if (parentMessage != null) {
                groupId = parentMessage.getGroupId();
            }
        } else {
            groupId = category.getGroupId();
        }

        if (_log.isDebugEnabled()) {
            _log.debug("Group id " + groupId);
            _log.debug("Category id " + categoryId);
        }

        User user = _userLocalService.getUserByEmailAddress(company.getCompanyId(), from);

        String subject = null;

        if (parentMessage != null) {
            subject = MBUtil.getSubjectForEmail(parentMessage);
        }

        MBMailMessage mbMailMessage = new MBMailMessage();

        MBUtil.collectPartContent(message, mbMailMessage);

        inputStreamOVPs = mbMailMessage.getInputStreamOVPs();

        PermissionCheckerUtil.setThreadValues(user);

        ServiceContext serviceContext = new ServiceContext();

        serviceContext.setAttribute("propagatePermissions", Boolean.TRUE);

        String portletId = PortletProviderUtil.getPortletId(MBMessage.class.getName(),
                PortletProvider.Action.VIEW);

        serviceContext.setLayoutFullURL(PortalUtil.getLayoutFullURL(groupId, portletId,
                StringUtil.equalsIgnoreCase(Http.HTTPS, PropsValues.WEB_SERVER_PROTOCOL)));

        serviceContext.setScopeGroupId(groupId);

        if (parentMessage == null) {
            _mbMessageService.addMessage(groupId, categoryId, subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, false, 0.0, true, serviceContext);
        } else {
            _mbMessageService.addMessage(parentMessage.getMessageId(), subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, false, 0.0, true, serviceContext);
        }

        if (_log.isDebugEnabled()) {
            _log.debug("Delivering message takes " + stopWatch.getTime() + " ms");
        }
    } catch (PrincipalException pe) {
        if (_log.isDebugEnabled()) {
            _log.debug("Prevented unauthorized post from " + from);
        }

        throw new MessageListenerException(pe);
    } catch (Exception e) {
        _log.error(e, e);

        throw new MessageListenerException(e);
    } finally {
        if (inputStreamOVPs != null) {
            for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) {

                InputStream inputStream = inputStreamOVP.getValue();

                StreamUtil.cleanUp(inputStream);
            }
        }

        PermissionCheckerUtil.setThreadValues(null);
    }
}

From source file:com.liferay.message.boards.internal.util.MBMailMessage.java

License:Open Source License

public List<ObjectValuePair<String, InputStream>> getInputStreamOVPs() {
    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = new ArrayList<>(_bytesOVPs.size());

    for (ObjectValuePair<String, byte[]> bytesOVP : _bytesOVPs) {
        String key = bytesOVP.getKey();
        byte[] bytes = bytesOVP.getValue();

        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);

        ObjectValuePair<String, InputStream> inputStreamOVP = new ObjectValuePair<>(key, byteArrayInputStream);

        inputStreamOVPs.add(inputStreamOVP);
    }/*from  w w w.j a v a 2  s .c o m*/

    return inputStreamOVPs;
}

From source file:com.liferay.message.boards.web.internal.portlet.action.EditMessageMVCActionCommand.java

License:Open Source License

protected MBMessage updateMessage(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

    ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);

    long messageId = ParamUtil.getLong(actionRequest, "messageId");

    long groupId = themeDisplay.getScopeGroupId();
    long categoryId = ParamUtil.getLong(actionRequest, "mbCategoryId");
    long threadId = ParamUtil.getLong(actionRequest, "threadId");
    long parentMessageId = ParamUtil.getLong(actionRequest, "parentMessageId");
    String subject = ParamUtil.getString(actionRequest, "subject");
    String body = ParamUtil.getString(actionRequest, "body");

    MBGroupServiceSettings mbGroupServiceSettings = MBGroupServiceSettings.getInstance(groupId);

    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = new ArrayList<>(5);

    try {/*from   ww  w .  j  ava 2s.  co m*/
        UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);

        for (int i = 1; i <= 5; i++) {
            String fileName = uploadPortletRequest.getFileName("msgFile" + i);
            InputStream inputStream = uploadPortletRequest.getFileAsStream("msgFile" + i);

            if ((inputStream == null) || Validator.isNull(fileName)) {
                continue;
            }

            ObjectValuePair<String, InputStream> inputStreamOVP = new ObjectValuePair<>(fileName, inputStream);

            inputStreamOVPs.add(inputStreamOVP);
        }

        boolean question = ParamUtil.getBoolean(actionRequest, "question");
        boolean anonymous = ParamUtil.getBoolean(actionRequest, "anonymous");
        double priority = ParamUtil.getDouble(actionRequest, "priority");
        boolean allowPingbacks = ParamUtil.getBoolean(actionRequest, "allowPingbacks");

        ServiceContext serviceContext = ServiceContextFactory.getInstance(MBMessage.class.getName(),
                actionRequest);

        boolean preview = ParamUtil.getBoolean(actionRequest, "preview");

        serviceContext.setAttribute("preview", preview);

        MBMessage message = null;

        if (messageId <= 0) {
            if (PropsValues.CAPTCHA_CHECK_PORTLET_MESSAGE_BOARDS_EDIT_MESSAGE) {

                CaptchaUtil.check(actionRequest);
            }

            if (threadId <= 0) {

                // Post new thread

                message = _mbMessageService.addMessage(groupId, categoryId, subject, body,
                        mbGroupServiceSettings.getMessageFormat(), inputStreamOVPs, anonymous, priority,
                        allowPingbacks, serviceContext);

                if (question) {
                    _mbThreadLocalService.updateQuestion(message.getThreadId(), true);
                }
            } else {

                // Post reply

                message = _mbMessageService.addMessage(parentMessageId, subject, body,
                        mbGroupServiceSettings.getMessageFormat(), inputStreamOVPs, anonymous, priority,
                        allowPingbacks, serviceContext);
            }
        } else {
            List<String> existingFiles = new ArrayList<>();

            for (int i = 1; i <= 5; i++) {
                String path = ParamUtil.getString(actionRequest, "existingPath" + i);

                if (Validator.isNotNull(path)) {
                    existingFiles.add(path);
                }
            }

            // Update message

            message = _mbMessageService.updateMessage(messageId, subject, body, inputStreamOVPs, existingFiles,
                    priority, allowPingbacks, serviceContext);

            if (message.isRoot()) {
                _mbThreadLocalService.updateQuestion(message.getThreadId(), question);
            }
        }

        PermissionChecker permissionChecker = themeDisplay.getPermissionChecker();

        boolean subscribe = ParamUtil.getBoolean(actionRequest, "subscribe");

        if (!preview && subscribe
                && MBMessagePermission.contains(permissionChecker, message, ActionKeys.SUBSCRIBE)) {

            _mbMessageService.subscribeMessage(message.getMessageId());
        }

        return message;
    } finally {
        for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) {

            InputStream inputStream = inputStreamOVP.getValue();

            StreamUtil.cleanUp(inputStream);
        }
    }
}

From source file:com.liferay.portlet.messageboards.lar.MBPortletDataHandlerImpl.java

License:Open Source License

protected void importMessage(PortletDataContext portletDataContext, Element messageElement, MBMessage message)
        throws Exception {

    long userId = portletDataContext.getUserId(message.getUserUuid());
    String userName = message.getUserName();

    Map<Long, Long> categoryPKs = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBCategory.class);

    long categoryId = MapUtil.getLong(categoryPKs, message.getCategoryId(), message.getCategoryId());

    Map<Long, Long> threadPKs = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBThread.class);

    long threadId = MapUtil.getLong(threadPKs, message.getThreadId(), 0);

    Map<Long, Long> messagePKs = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBMessage.class);

    long parentMessageId = MapUtil.getLong(messagePKs, message.getParentMessageId(),
            message.getParentMessageId());

    List<String> existingFiles = new ArrayList<String>();

    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = getAttachments(portletDataContext,
            messageElement, message);/*from  w  w w  . j  av a2s.c o  m*/

    try {
        ServiceContext serviceContext = portletDataContext.createServiceContext(messageElement, message,
                _NAMESPACE);

        if (message.getStatus() != WorkflowConstants.STATUS_APPROVED) {
            serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT);
        }

        categoryId = getCategoryId(portletDataContext, message, categoryPKs, categoryId);

        MBMessage importedMessage = null;

        if (portletDataContext.isDataStrategyMirror()) {
            MBMessage existingMessage = MBMessageUtil.fetchByUUID_G(message.getUuid(),
                    portletDataContext.getScopeGroupId());

            if (existingMessage == null) {
                serviceContext.setUuid(message.getUuid());

                importedMessage = MBMessageLocalServiceUtil.addMessage(userId, userName,
                        portletDataContext.getScopeGroupId(), categoryId, threadId, parentMessageId,
                        message.getSubject(), message.getBody(), message.getFormat(), inputStreamOVPs,
                        message.getAnonymous(), message.getPriority(), message.getAllowPingbacks(),
                        serviceContext);
            } else {
                importedMessage = MBMessageLocalServiceUtil.updateMessage(userId,
                        existingMessage.getMessageId(), message.getSubject(), message.getBody(),
                        inputStreamOVPs, existingFiles, message.getPriority(), message.getAllowPingbacks(),
                        serviceContext);
            }
        } else {
            importedMessage = MBMessageLocalServiceUtil.addMessage(userId, userName,
                    portletDataContext.getScopeGroupId(), categoryId, threadId, parentMessageId,
                    message.getSubject(), message.getBody(), message.getFormat(), inputStreamOVPs,
                    message.getAnonymous(), message.getPriority(), message.getAllowPingbacks(), serviceContext);
        }

        threadPKs.put(message.getThreadId(), importedMessage.getThreadId());

        portletDataContext.importClassedModel(message, importedMessage, _NAMESPACE);
    } finally {
        for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) {

            InputStream inputStream = inputStreamOVP.getValue();

            StreamUtil.cleanUp(inputStream);
        }
    }
}

From source file:com.liferay.portlet.messageboards.messaging.MailingListMessageListener.java

License:Open Source License

protected void processMessage(MailingListRequest mailingListRequest, Message mailMessage) throws Exception {

    if (MBUtil.hasMailIdHeader(mailMessage)) {
        return;//  www  .jav  a2s . co m
    }

    String from = null;

    Address[] addresses = mailMessage.getFrom();

    if ((addresses != null) && (addresses.length > 0)) {
        Address address = addresses[0];

        if (address instanceof InternetAddress) {
            from = ((InternetAddress) address).getAddress();
        } else {
            from = address.toString();
        }
    }

    long companyId = mailingListRequest.getCompanyId();
    long groupId = mailingListRequest.getGroupId();
    long categoryId = mailingListRequest.getCategoryId();

    if (_log.isDebugEnabled()) {
        _log.debug("Category id " + categoryId);
    }

    boolean anonymous = false;

    User user = UserLocalServiceUtil.getUserById(companyId, mailingListRequest.getUserId());

    try {
        user = UserLocalServiceUtil.getUserByEmailAddress(companyId, from);
    } catch (NoSuchUserException nsue) {
        anonymous = true;

        if (!mailingListRequest.isAllowAnonymous()) {
            return;
        }
    }

    long parentMessageId = MBUtil.getParentMessageId(mailMessage);

    if (_log.isDebugEnabled()) {
        _log.debug("Parent message id " + parentMessageId);
    }

    MBMessage parentMessage = null;

    try {
        if (parentMessageId > 0) {
            parentMessage = MBMessageLocalServiceUtil.getMessage(parentMessageId);
        }
    } catch (NoSuchMessageException nsme) {
    }

    if (_log.isDebugEnabled()) {
        _log.debug("Parent message " + parentMessage);
    }

    MBMailMessage mbMailMessage = new MBMailMessage();

    MBUtil.collectPartContent(mailMessage, mbMailMessage);

    PermissionCheckerUtil.setThreadValues(user);

    MailingListThreadLocal.setSourceMailingList(true);

    String subject = MBUtil.getSubjectWithoutMessageId(mailMessage);

    ServiceContext serviceContext = new ServiceContext();

    serviceContext.setAddGroupPermissions(true);
    serviceContext.setAddGuestPermissions(true);
    serviceContext.setLayoutFullURL(PortalUtil.getLayoutFullURL(groupId, PortletKeys.MESSAGE_BOARDS));
    serviceContext.setScopeGroupId(groupId);

    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = mbMailMessage.getInputStreamOVPs();

    try {
        if (parentMessage == null) {
            MBMessageServiceUtil.addMessage(groupId, categoryId, subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, anonymous, 0.0, true, serviceContext);
        } else {
            MBMessageServiceUtil.addMessage(groupId, categoryId, parentMessage.getThreadId(),
                    parentMessage.getMessageId(), subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, anonymous, 0.0, true, serviceContext);
        }
    } finally {
        for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) {

            InputStream inputStream = inputStreamOVP.getValue();

            StreamUtil.cleanUp(inputStream);
        }
    }
}

From source file:com.liferay.portlet.messageboards.pop.MessageListenerImpl.java

License:Open Source License

public void deliver(String from, String recipient, Message message) throws MessageListenerException {

    List<ObjectValuePair<String, InputStream>> inputStreamOVPs = null;

    try {//from   w w  w  .j  a  va  2  s  .  c  om
        StopWatch stopWatch = null;

        if (_log.isDebugEnabled()) {
            stopWatch = new StopWatch();

            stopWatch.start();

            _log.debug("Deliver message from " + from + " to " + recipient);
        }

        String messageId = getMessageId(recipient, message);

        Company company = getCompany(messageId);

        if (_log.isDebugEnabled()) {
            _log.debug("Message id " + messageId);
        }

        long groupId = 0;
        long categoryId = getCategoryId(messageId);

        try {
            MBCategory category = MBCategoryLocalServiceUtil.getCategory(categoryId);

            groupId = category.getGroupId();
        } catch (NoSuchCategoryException nsce) {
            groupId = categoryId;
            categoryId = MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID;
        }

        if (_log.isDebugEnabled()) {
            _log.debug("Group id " + groupId);
            _log.debug("Category id " + categoryId);
        }

        User user = UserLocalServiceUtil.getUserByEmailAddress(company.getCompanyId(), from);

        long parentMessageId = getParentMessageId(recipient, message);

        if (_log.isDebugEnabled()) {
            _log.debug("Parent message id " + parentMessageId);
        }

        MBMessage parentMessage = null;

        try {
            if (parentMessageId > 0) {
                parentMessage = MBMessageLocalServiceUtil.getMessage(parentMessageId);
            }
        } catch (NoSuchMessageException nsme) {

            // If the parent message does not exist we ignore it and post
            // the message as a new thread.

        }

        if (_log.isDebugEnabled()) {
            _log.debug("Parent message " + parentMessage);
        }

        String subject = MBUtil.getSubjectWithoutMessageId(message);

        MBMailMessage mbMailMessage = new MBMailMessage();

        MBUtil.collectPartContent(message, mbMailMessage);

        inputStreamOVPs = mbMailMessage.getInputStreamOVPs();

        PermissionCheckerUtil.setThreadValues(user);

        ServiceContext serviceContext = new ServiceContext();

        serviceContext.setAddGroupPermissions(true);
        serviceContext.setAddGuestPermissions(true);
        serviceContext.setLayoutFullURL(PortalUtil.getLayoutFullURL(groupId, PortletKeys.MESSAGE_BOARDS));
        serviceContext.setScopeGroupId(groupId);

        if (parentMessage == null) {
            MBMessageServiceUtil.addMessage(groupId, categoryId, subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, false, 0.0, true, serviceContext);
        } else {
            MBMessageServiceUtil.addMessage(groupId, categoryId, parentMessage.getThreadId(),
                    parentMessage.getMessageId(), subject, mbMailMessage.getBody(),
                    MBMessageConstants.DEFAULT_FORMAT, inputStreamOVPs, false, 0.0, true, serviceContext);
        }

        if (_log.isDebugEnabled()) {
            _log.debug("Delivering message takes " + stopWatch.getTime() + " ms");
        }
    } catch (PrincipalException pe) {
        if (_log.isDebugEnabled()) {
            _log.debug("Prevented unauthorized post from " + from);
        }

        throw new MessageListenerException(pe);
    } catch (Exception e) {
        _log.error(e, e);

        throw new MessageListenerException(e);
    } finally {
        if (inputStreamOVPs != null) {
            for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) {

                InputStream inputStream = inputStreamOVP.getValue();

                StreamUtil.cleanUp(inputStream);
            }
        }

        PermissionCheckerUtil.setThreadValues(null);
    }
}

From source file:com.liferay.portlet.messageboards.service.impl.MBMessageLocalServiceImpl.java

License:Open Source License

public MBMessage addMessage(long userId, String userName, long groupId, long categoryId, long threadId,
        long parentMessageId, String subject, String body, String format,
        List<ObjectValuePair<String, InputStream>> inputStreamOVPs, boolean anonymous, double priority,
        boolean allowPingbacks, ServiceContext serviceContext) throws PortalException, SystemException {

    // Message//from w  ww  . jav  a  2  s .  c o  m

    User user = userPersistence.findByPrimaryKey(userId);
    userName = user.isDefaultUser() ? userName : user.getFullName();
    subject = ModelHintsUtil.trimString(MBMessage.class.getName(), "subject", subject);

    PortletPreferences preferences = ServiceContextUtil.getPortletPreferences(serviceContext);

    if (preferences != null) {
        if (!MBUtil.isAllowAnonymousPosting(preferences)) {
            if (anonymous || user.isDefaultUser()) {
                throw new PrincipalException();
            }
        }
    }

    if (user.isDefaultUser()) {
        anonymous = true;
    }

    Date now = new Date();

    long messageId = counterLocalService.increment();

    body = SanitizerUtil.sanitize(user.getCompanyId(), groupId, userId, MBMessage.class.getName(), messageId,
            "text/" + format, body);

    validate(subject, body);

    subject = getSubject(subject, body);
    body = getBody(subject, body);

    MBMessage message = mbMessagePersistence.create(messageId);

    message.setUuid(serviceContext.getUuid());
    message.setGroupId(groupId);
    message.setCompanyId(user.getCompanyId());
    message.setUserId(user.getUserId());
    message.setUserName(userName);
    message.setCreateDate(serviceContext.getCreateDate(now));
    message.setModifiedDate(serviceContext.getModifiedDate(now));

    if (threadId > 0) {
        message.setThreadId(threadId);
    }

    if (priority != MBThreadConstants.PRIORITY_NOT_GIVEN) {
        message.setPriority(priority);
    }

    message.setAllowPingbacks(allowPingbacks);
    message.setStatus(WorkflowConstants.STATUS_DRAFT);
    message.setStatusByUserId(user.getUserId());
    message.setStatusByUserName(userName);
    message.setStatusDate(serviceContext.getModifiedDate(now));

    // Thread

    if (parentMessageId != MBMessageConstants.DEFAULT_PARENT_MESSAGE_ID) {
        MBMessage parentMessage = mbMessagePersistence.fetchByPrimaryKey(parentMessageId);

        if (parentMessage == null) {
            parentMessageId = MBMessageConstants.DEFAULT_PARENT_MESSAGE_ID;
        }
    }

    MBThread thread = null;

    if (threadId > 0) {
        thread = mbThreadPersistence.fetchByPrimaryKey(threadId);
    }

    if ((thread == null) || (parentMessageId == MBMessageConstants.DEFAULT_PARENT_MESSAGE_ID)) {

        thread = mbThreadLocalService.addThread(categoryId, message);
    }

    if ((priority != MBThreadConstants.PRIORITY_NOT_GIVEN) && (thread.getPriority() != priority)) {

        thread.setPriority(priority);

        mbThreadPersistence.update(thread, false);

        updatePriorities(thread.getThreadId(), priority);
    }

    // Message

    message.setCategoryId(categoryId);
    message.setThreadId(thread.getThreadId());
    message.setRootMessageId(thread.getRootMessageId());
    message.setParentMessageId(parentMessageId);
    message.setSubject(subject);
    message.setBody(body);
    message.setFormat(format);
    message.setAttachments(!inputStreamOVPs.isEmpty());
    message.setAnonymous(anonymous);

    if (message.isDiscussion()) {
        long classNameId = PortalUtil.getClassNameId((String) serviceContext.getAttribute("className"));
        long classPK = GetterUtil.getLong((String) serviceContext.getAttribute("classPK"));

        message.setClassNameId(classNameId);
        message.setClassPK(classPK);
    }

    mbMessagePersistence.update(message, false);

    // Attachments

    if (!inputStreamOVPs.isEmpty()) {
        long companyId = message.getCompanyId();
        long repositoryId = CompanyConstants.SYSTEM;
        String dirName = message.getAttachmentsDir();

        try {
            DLStoreUtil.deleteDirectory(companyId, repositoryId, dirName);
        } catch (NoSuchDirectoryException nsde) {
            if (_log.isDebugEnabled()) {
                _log.debug(nsde.getMessage());
            }
        }

        DLStoreUtil.addDirectory(companyId, repositoryId, dirName);

        for (int i = 0; i < inputStreamOVPs.size(); i++) {
            ObjectValuePair<String, InputStream> inputStreamOVP = inputStreamOVPs.get(i);

            String fileName = inputStreamOVP.getKey();
            InputStream inputStream = inputStreamOVP.getValue();

            try {
                DLStoreUtil.addFile(companyId, repositoryId, dirName + "/" + fileName, inputStream);
            } catch (DuplicateFileException dfe) {
                if (_log.isDebugEnabled()) {
                    _log.debug(dfe.getMessage());
                }
            }
        }
    }

    // Resources

    if (!message.isDiscussion()) {
        if (user.isDefaultUser()) {
            addMessageResources(message, true, true);
        } else if (serviceContext.isAddGroupPermissions() || serviceContext.isAddGuestPermissions()) {

            addMessageResources(message, serviceContext.isAddGroupPermissions(),
                    serviceContext.isAddGuestPermissions());
        } else {
            addMessageResources(message, serviceContext.getGroupPermissions(),
                    serviceContext.getGuestPermissions());
        }
    }

    // Asset

    updateAsset(userId, message, serviceContext.getAssetCategoryIds(), serviceContext.getAssetTagNames(),
            serviceContext.getAssetLinkEntryIds(), serviceContext.isAssetEntryVisible());

    // Expando

    ExpandoBridge expandoBridge = message.getExpandoBridge();

    expandoBridge.setAttributes(serviceContext);

    // Workflow

    WorkflowHandlerRegistryUtil.startWorkflowInstance(user.getCompanyId(), groupId, userId,
            message.getWorkflowClassName(), message.getMessageId(), message, serviceContext);

    // Testing roll back

    /*if (true) {
       throw new SystemException("Testing roll back");
    }*/

    return message;
}