com.liferay.comment.internal.jsonws.CommentManagerJSONWS.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.comment.internal.jsonws.CommentManagerJSONWS.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.comment.internal.jsonws;

import com.liferay.portal.kernel.comment.CommentManager;
import com.liferay.portal.kernel.comment.Discussion;
import com.liferay.portal.kernel.comment.DiscussionComment;
import com.liferay.portal.kernel.comment.DiscussionCommentIterator;
import com.liferay.portal.kernel.comment.DiscussionPermission;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.jsonwebservice.JSONWebService;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.security.access.control.AccessControlled;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.security.permission.BaseModelPermissionCheckerUtil;
import com.liferay.portal.kernel.service.BaseServiceImpl;
import com.liferay.portal.kernel.service.GroupLocalService;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.util.Function;
import com.liferay.portal.kernel.workflow.WorkflowConstants;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Adolfo Prez
 */
@AccessControlled
@Component(immediate = true, property = { "json.web.service.context.name=comment",
        "json.web.service.context.path=Comment" }, service = CommentManagerJSONWS.class)
@JSONWebService
public class CommentManagerJSONWS extends BaseServiceImpl {

    public long addComment(long groupId, String className, long classPK, String body) throws PortalException {

        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        long companyId = getCompanyId(groupId);

        discussionPermission.checkAddPermission(companyId, groupId, className, classPK);

        return _commentManager.addComment(getUserId(), groupId, className, classPK, body,
                createServiceContextFunction(companyId));
    }

    public void deleteComment(long commentId) throws PortalException {
        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        discussionPermission.checkDeletePermission(commentId);

        _commentManager.deleteComment(commentId);
    }

    public List<CommentJSONWS> getComments(long commentId, int start, int end) throws PortalException {

        DiscussionComment discussionComment = _commentManager.fetchDiscussionComment(getUserId(), commentId);

        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        discussionPermission.checkViewPermission(getCompanyId(discussionComment.getGroupId()),
                discussionComment.getGroupId(), discussionComment.getClassName(), discussionComment.getClassPK());

        return getComments(discussionComment, start, end);
    }

    public List<CommentJSONWS> getComments(long groupId, String className, long classPK, int start, int end)
            throws PortalException {

        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        discussionPermission.checkViewPermission(getCompanyId(groupId), groupId, className, classPK);

        Discussion discussion = _commentManager.getDiscussion(getUserId(), groupId, className, classPK,
                createServiceContextFunction());

        DiscussionComment rootDiscussionComment = discussion.getRootDiscussionComment();

        return getComments(rootDiscussionComment, start, end);
    }

    public int getCommentsCount(long groupId, String className, long classPK) throws PortalException {

        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        discussionPermission.checkViewPermission(getCompanyId(groupId), groupId, className, classPK);

        return _commentManager.getCommentsCount(className, classPK);
    }

    public boolean hasDiscussion(long groupId, String className, long classPK) throws PortalException {

        BaseModelPermissionCheckerUtil.containsBaseModelPermission(getPermissionChecker(), groupId, className,
                classPK, ActionKeys.VIEW);

        return _commentManager.hasDiscussion(className, classPK);
    }

    public void subscribeDiscussion(long groupId, String className, long classPK) throws PortalException {

        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        discussionPermission.checkSubscribePermission(getCompanyId(groupId), groupId, className, classPK);

        _commentManager.subscribeDiscussion(getUserId(), groupId, className, classPK);
    }

    public void unsubscribeDiscussion(long groupId, String className, long classPK) throws PortalException {

        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        discussionPermission.checkSubscribePermission(getCompanyId(groupId), groupId, className, classPK);

        _commentManager.unsubscribeDiscussion(getUserId(), className, classPK);
    }

    public long updateComment(String className, long classPK, long commentId, String subject, String body)
            throws PortalException {

        DiscussionPermission discussionPermission = _commentManager.getDiscussionPermission(getPermissionChecker());

        discussionPermission.checkUpdatePermission(commentId);

        return _commentManager.updateComment(getUserId(), className, classPK, commentId, subject, body,
                createServiceContextFunction(WorkflowConstants.ACTION_PUBLISH));
    }

    protected Function<String, ServiceContext> createServiceContextFunction() {
        return new Function<String, ServiceContext>() {

            @Override
            public ServiceContext apply(String className) {
                return new ServiceContext();
            }

        };
    }

    protected Function<String, ServiceContext> createServiceContextFunction(final int workflowAction) {

        return new Function<String, ServiceContext>() {

            @Override
            public ServiceContext apply(String className) {
                ServiceContext serviceContext = new ServiceContext();

                serviceContext.setWorkflowAction(workflowAction);

                return serviceContext;
            }

        };
    }

    protected Function<String, ServiceContext> createServiceContextFunction(final long companyId) {

        return new Function<String, ServiceContext>() {

            @Override
            public ServiceContext apply(String className) {
                ServiceContext serviceContext = new ServiceContext();

                serviceContext.setCompanyId(companyId);

                return serviceContext;
            }

        };
    }

    protected List<CommentJSONWS> getAllComments(DiscussionCommentIterator threadDiscussionCommentIterator) {

        List<CommentJSONWS> commentJSONWSs = new ArrayList<>();

        while (threadDiscussionCommentIterator.hasNext()) {
            CommentJSONWS commentJSONWS = new CommentJSONWS(threadDiscussionCommentIterator.next());

            commentJSONWSs.add(commentJSONWS);
        }

        return commentJSONWSs;
    }

    protected List<CommentJSONWS> getComments(DiscussionComment discussionComment, int start, int end) {

        if (start == QueryUtil.ALL_POS) {
            start = 0;
        }

        DiscussionCommentIterator threadDiscussionCommentIterator = discussionComment
                .getThreadDiscussionCommentIterator(start);

        if (end == QueryUtil.ALL_POS) {
            return getAllComments(threadDiscussionCommentIterator);
        }

        int commentsCount = end - start;

        if (commentsCount <= 0) {
            return Collections.emptyList();
        }

        List<CommentJSONWS> commentJSONWSs = new ArrayList<>(commentsCount);

        while (threadDiscussionCommentIterator.hasNext() && (commentsCount > 0)) {

            CommentJSONWS commentJSONWS = new CommentJSONWS(threadDiscussionCommentIterator.next());

            commentJSONWSs.add(commentJSONWS);

            commentsCount--;
        }

        return commentJSONWSs;
    }

    protected long getCompanyId(long groupId) throws PortalException {
        Group group = _groupLocalService.getGroup(groupId);

        return group.getCompanyId();
    }

    protected String getUserName() throws PortalException {
        User user = getUser();

        return user.getFullName();
    }

    @Reference(unbind = "-")
    protected void setCommentManager(CommentManager commentManager) {
        _commentManager = commentManager;
    }

    @Reference(unbind = "-")
    protected void setGroupLocalService(GroupLocalService groupLocalService) {
        _groupLocalService = groupLocalService;
    }

    private CommentManager _commentManager;
    private GroupLocalService _groupLocalService;

}