com.rivetlogic.hangouts.portlet.HangoutsPortlet.java Source code

Java tutorial

Introduction

Here is the source code for com.rivetlogic.hangouts.portlet.HangoutsPortlet.java

Source

/**
 * Copyright (C) 2005-2016 Rivet Logic Corporation.
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; version 3 of the License.
 * 
 * This program 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 General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 51
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

package com.rivetlogic.hangouts.portlet;

import com.rivetlogic.hangouts.beans.PreferencesBean;
import com.rivetlogic.hangouts.model.HangoutsGroup;
import com.rivetlogic.hangouts.model.impl.HangoutsGroupImpl;
import com.rivetlogic.hangouts.service.HangoutsGroupLocalServiceUtil;
import com.rivetlogic.hangouts.util.Constants;
import com.rivetlogic.hangouts.beans.ContactsBean;
import com.rivetlogic.hangouts.beans.GroupsBean;
import com.rivetlogic.hangouts.util.HangoutsUtil;
import com.liferay.portal.kernel.json.JSONArray;
import com.liferay.portal.kernel.json.JSONException;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.ReadOnlyException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import javax.portlet.ValidatorException;

/**
 * Portlet implementation class HangoutsPortlet
 */
public class HangoutsPortlet extends MVCPortlet {

    private static final Log LOG = LogFactoryUtil.getLog(HangoutsPortlet.class);

    @Override
    public void render(RenderRequest request, RenderResponse response) throws IOException, PortletException {
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        PreferencesBean prefBean = new PreferencesBean(request);
        request.setAttribute(Constants.SIGNED_IN, themeDisplay.isSignedIn());
        request.setAttribute(Constants.PREF_BEAN, prefBean);
        super.render(request, response);
    }

    public void savePreferences(ActionRequest request, ActionResponse response)
            throws ReadOnlyException, ValidatorException, IOException {
        PreferencesBean prefBean = new PreferencesBean();
        prefBean.save(request);
        SessionMessages.add(request,
                PortalUtil.getPortletId(request) + SessionMessages.KEY_SUFFIX_UPDATED_PREFERENCES);

        String redirect = getRedirect(request, response);

        if (Validator.isNotNull(redirect)) {
            response.sendRedirect(redirect);
        }
    }

    @Override
    public void serveResource(ResourceRequest request, ResourceResponse response)
            throws IOException, PortletException {
        String cmd = ParamUtil.getString(request, Constants.CMD);
        JSONObject jsonResponse = null;

        if (Constants.CMD_LIST_USERS.equalsIgnoreCase(cmd)) {
            listUsers(request, response);
        } else if (Constants.CMD_LIST_GROUPS.equalsIgnoreCase(cmd)) {
            listGroups(request, response);
        } else if (Constants.CMD_ADD_GROUP.equalsIgnoreCase(cmd)) {
            jsonResponse = JSONFactoryUtil.createJSONObject();
            addGroup(request, response, jsonResponse);
        } else if (Constants.CMD_UPDATE_GROUP.equalsIgnoreCase(cmd)) {
            jsonResponse = JSONFactoryUtil.createJSONObject();
            updateGroup(request, response, jsonResponse);
        } else if (Constants.CMD_UPDATE_GROUP_NAME.equalsIgnoreCase(cmd)) {
            jsonResponse = JSONFactoryUtil.createJSONObject();
            updateGroupName(request, response, jsonResponse);
        } else if (Constants.CMD_GET_GROUP.equalsIgnoreCase(cmd)) {
            jsonResponse = JSONFactoryUtil.createJSONObject();
            getGroupInfo(request, response, jsonResponse);
        } else if (Constants.CMD_REMOVE_GROUP.equalsIgnoreCase(cmd)) {
            jsonResponse = JSONFactoryUtil.createJSONObject();
            removeGroup(request, response, jsonResponse);
        }

        if (jsonResponse != null) {
            HangoutsUtil.returnJSONObject(response, jsonResponse);
        }
    }

    private void listUsers(PortletRequest request, PortletResponse response) {
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        ContactsBean cb = new ContactsBean(themeDisplay.getUserId(), themeDisplay.getCompanyId());
        cb.setCurPage(ParamUtil.getInteger(request, Constants.CURRENT_PAGE, Constants.DEFAULT_ELEMENT_VALUE));
        cb.setDelta(ParamUtil.getInteger(request, Constants.DELTA, Constants.DEFAULT_DELTA));
        cb.setStart(cb.getCurPage() * cb.getDelta() - cb.getDelta());
        cb.setEnd(cb.getStart() + cb.getDelta());

        cb.setObc(HangoutsUtil.getHangoutsComparator(
                ParamUtil.getString(request, Constants.ORDER_BY_COL, Constants.FIRST_NAME),
                ParamUtil.getBoolean(request, Constants.IS_ASC, true)));
        cb.setSearch(ParamUtil.getString(request, Constants.SEARCH, null));

        cb.load();

        LOG.debug("Results: " + cb.toJSON());
        HangoutsUtil.returnJSONObject(response, cb.toJSON());
    }

    private void listGroups(PortletRequest request, PortletResponse response) {
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        GroupsBean gb = new GroupsBean(themeDisplay.getUserId());
        gb.setCurPage(ParamUtil.getInteger(request, Constants.CURRENT_PAGE, Constants.DEFAULT_ELEMENT_VALUE));
        gb.setDelta(ParamUtil.getInteger(request, Constants.DELTA, Constants.DEFAULT_DELTA));
        gb.setStart(gb.getCurPage() * gb.getDelta() - gb.getDelta());
        gb.setEnd(gb.getStart() + gb.getDelta());

        gb.load();

        LOG.debug("Results: " + gb.toJSON());
        HangoutsUtil.returnJSONObject(response, gb.toJSON());
    }

    private void addGroup(PortletRequest request, PortletResponse response, JSONObject jsonResponse) {
        try {
            List<String> errors = new ArrayList<String>();
            HangoutsGroup sg = hangoutsGroupFromRequest(request);
            if (HangoutsPortletValidator.validateCreateGroup(sg, errors)) {
                HangoutsGroupLocalServiceUtil.createHangoutsGroup(sg);
                jsonResponse.put(Constants.HANGOUTS_GROUP_ID, sg.getHangoutsGroupId());
                jsonResponse.put(Constants.CMD_SUCCESS, true);
            } else {
                jsonResponse.put(Constants.ERRORS, ListUtil.toString(errors, StringPool.BLANK, StringPool.COMMA));
                jsonResponse.put(Constants.CMD_SUCCESS, false);
            }

        } catch (JSONException e) {
            jsonResponse.put(Constants.CMD_SUCCESS, false);
            LOG.error("Wrong format in ids: ", e);
        } catch (Exception se) {
            jsonResponse.put(Constants.CMD_SUCCESS, false);
            LOG.error(se);
        }

    }

    private void updateGroup(PortletRequest request, PortletResponse response, JSONObject jsonResponse) {
        Long hangoutsGroupId = ParamUtil.getLong(request, Constants.HANGOUTS_GROUP_ID, Constants.UNDEFINED_ID);
        HangoutsGroup hangoutsGroup = null;
        if (Constants.UNDEFINED_ID != hangoutsGroupId) {
            try {
                List<String> errors = new ArrayList<String>();
                hangoutsGroup = HangoutsGroupLocalServiceUtil.getHangoutsGroup(hangoutsGroupId);
                JSONArray obj = contactsFromRequest(request);
                hangoutsGroup.setGroupName(ParamUtil.getString(request, Constants.HANGOUTS_GROUP_NAME));
                hangoutsGroup.setHangoutsContacts(obj.toString());

                if (HangoutsPortletValidator.validateUpdateGroup(hangoutsGroup, errors)) {
                    HangoutsGroupLocalServiceUtil.updateHangoutsGroup(hangoutsGroup);
                    jsonResponse.put(Constants.CMD_SUCCESS, true);
                } else {
                    jsonResponse.put(Constants.ERRORS,
                            ListUtil.toString(errors, StringPool.BLANK, StringPool.COMMA));
                    jsonResponse.put(Constants.CMD_SUCCESS, false);
                }

            } catch (JSONException e) {
                jsonResponse.put(Constants.CMD_SUCCESS, false);
                LOG.error("Wrong format in ids: ", e);
            } catch (Exception e) {
                jsonResponse.put(Constants.CMD_SUCCESS, false);
                LOG.error(e);
            }

        } else {
            jsonResponse.put(Constants.CMD_SUCCESS, false);
        }
    }

    private void updateGroupName(PortletRequest request, PortletResponse response, JSONObject jsonResponse) {
        Long hangoutsGroupId = ParamUtil.getLong(request, Constants.HANGOUTS_GROUP_ID, Constants.UNDEFINED_ID);
        HangoutsGroup hangoutsGroup = null;
        if (Constants.UNDEFINED_ID != hangoutsGroupId) {
            try {
                List<String> errors = new ArrayList<String>();
                hangoutsGroup = HangoutsGroupLocalServiceUtil.getHangoutsGroup(hangoutsGroupId);
                hangoutsGroup.setGroupName(ParamUtil.getString(request, Constants.HANGOUTS_GROUP_ID));
                if (HangoutsPortletValidator.validateUpdateGroup(hangoutsGroup, errors)) {
                    HangoutsGroupLocalServiceUtil.updateHangoutsGroup(hangoutsGroup);
                    jsonResponse.put(Constants.CMD_SUCCESS, true);
                } else {
                    jsonResponse.put(Constants.CMD_SUCCESS, false);
                }

            } catch (JSONException e) {
                jsonResponse.put(Constants.CMD_SUCCESS, false);
                LOG.error("Wrong format in ids: ", e);
            } catch (Exception e) {
                jsonResponse.put(Constants.CMD_SUCCESS, false);
                LOG.error(e);
            }

        } else {
            jsonResponse.put(Constants.CMD_SUCCESS, false);
        }
    }

    private void getGroupInfo(PortletRequest request, PortletResponse response, JSONObject jsonResponse) {
        Long hangoutsGroupId = ParamUtil.getLong(request, Constants.HANGOUTS_GROUP_ID, Constants.UNDEFINED_ID);
        HangoutsGroup hangoutsGroup = null;
        if (Constants.UNDEFINED_ID != hangoutsGroupId) {
            try {
                hangoutsGroup = HangoutsGroupLocalServiceUtil.getHangoutsGroup(hangoutsGroupId);
                jsonResponse.put(Constants.GROUP_INFO, hangoutsGroup.toJSON());
            } catch (Exception e) {
                jsonResponse.put(Constants.CMD_SUCCESS, false);
                LOG.error(e);
            }
        } else {
            jsonResponse.put(Constants.CMD_SUCCESS, false);
        }
    }

    private void removeGroup(PortletRequest request, PortletResponse response, JSONObject jsonResponse) {
        Long hangoutsGroupId = ParamUtil.getLong(request, Constants.HANGOUTS_GROUP_ID, Constants.UNDEFINED_ID);

        if (Constants.UNDEFINED_ID != hangoutsGroupId) {
            try {
                HangoutsGroupLocalServiceUtil.deleteHangoutsGroup(hangoutsGroupId);
                jsonResponse.put(Constants.CMD_SUCCESS, true);
            } catch (Exception e) {
                jsonResponse.put(Constants.CMD_SUCCESS, false);
                LOG.error(e);
            }
        } else {
            jsonResponse.put(Constants.CMD_SUCCESS, false);
        }
    }

    private HangoutsGroup hangoutsGroupFromRequest(PortletRequest request) throws JSONException {
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
        HangoutsGroup hangoutsGroup = new HangoutsGroupImpl();
        hangoutsGroup.setGroupName(ParamUtil.getString(request, Constants.HANGOUTS_GROUP_NAME));
        hangoutsGroup.setUserId(themeDisplay.getUserId());
        JSONArray obj = contactsFromRequest(request);
        hangoutsGroup.setHangoutsContacts(obj.toString());
        return hangoutsGroup;
    }

    private JSONArray contactsFromRequest(PortletRequest request) throws JSONException {
        return JSONFactoryUtil.createJSONArray(ParamUtil.getString(request, Constants.IDS));
    }

}