com.liferay.expando.web.internal.portlet.ExpandoPortlet.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.expando.web.internal.portlet.ExpandoPortlet.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.expando.web.internal.portlet;

import com.liferay.expando.kernel.exception.ColumnNameException;
import com.liferay.expando.kernel.exception.ColumnTypeException;
import com.liferay.expando.kernel.exception.DuplicateColumnNameException;
import com.liferay.expando.kernel.exception.NoSuchColumnException;
import com.liferay.expando.kernel.exception.ValueDataException;
import com.liferay.expando.kernel.model.ExpandoBridge;
import com.liferay.expando.kernel.model.ExpandoColumnConstants;
import com.liferay.expando.kernel.service.ExpandoColumnService;
import com.liferay.expando.kernel.util.ExpandoBridgeFactoryUtil;
import com.liferay.expando.kernel.util.ExpandoPresetUtil;
import com.liferay.expando.web.internal.constants.ExpandoPortletKeys;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.kernel.security.auth.PrincipalException;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.LocalizationUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.UnicodeProperties;
import com.liferay.portal.kernel.util.WebKeys;

import java.io.IOException;
import java.io.Serializable;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Enumeration;
import java.util.List;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

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

/**
 * @author Raymond Aug
 * @author Drew Brokke
 */
@Component(immediate = true, property = { "com.liferay.portlet.add-default-resource=true",
        "com.liferay.portlet.css-class-wrapper=portlet-expando",
        "com.liferay.portlet.display-category=category.hidden",
        "com.liferay.portlet.header-portlet-css=/css/main.css", "com.liferay.portlet.icon=/icons/expando.png",
        "com.liferay.portlet.preferences-owned-by-group=true",
        "com.liferay.portlet.private-request-attributes=false",
        "com.liferay.portlet.private-session-attributes=false", "com.liferay.portlet.render-weight=50",
        "com.liferay.portlet.system=true", "com.liferay.portlet.use-default-template=true",
        "javax.portlet.display-name=Custom Fields", "javax.portlet.expiration-cache=0",
        "javax.portlet.init-param.template-path=/", "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.name=" + ExpandoPortletKeys.EXPANDO, "javax.portlet.portlet-mode=text/html",
        "javax.portlet.resource-bundle=content.Language" }, service = Portlet.class)
public class ExpandoPortlet extends MVCPortlet {

    public void addExpando(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

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

        String modelResource = ParamUtil.getString(actionRequest, "modelResource");
        long resourcePrimKey = ParamUtil.getLong(actionRequest, "resourcePrimKey");

        String name = ParamUtil.getString(actionRequest, "name");
        String preset = ParamUtil.getString(actionRequest, "type");

        ExpandoBridge expandoBridge = ExpandoBridgeFactoryUtil.getExpandoBridge(themeDisplay.getCompanyId(),
                modelResource, resourcePrimKey);

        if (preset.startsWith("Preset")) {
            ExpandoPresetUtil.addPresetExpando(expandoBridge, preset, name);
        } else {
            int type = ParamUtil.getInteger(actionRequest, "type");

            expandoBridge.addAttribute(name, type);

            updateProperties(actionRequest, expandoBridge, name);
        }
    }

    public void deleteExpando(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

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

        _expandoColumnService.deleteColumn(columnId);
    }

    public void deleteExpandos(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

        long[] columnIds = StringUtil.split(ParamUtil.getString(actionRequest, "columnIds"), 0L);

        for (long columnId : columnIds) {
            _expandoColumnService.deleteColumn(columnId);
        }
    }

    public void updateExpando(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

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

        String modelResource = ParamUtil.getString(actionRequest, "modelResource");
        long resourcePrimKey = ParamUtil.getLong(actionRequest, "resourcePrimKey");

        String name = ParamUtil.getString(actionRequest, "name");
        int type = ParamUtil.getInteger(actionRequest, "type");

        Serializable defaultValue = getValue(actionRequest, "defaultValue", type);

        ExpandoBridge expandoBridge = ExpandoBridgeFactoryUtil.getExpandoBridge(themeDisplay.getCompanyId(),
                modelResource, resourcePrimKey);

        expandoBridge.setAttributeDefault(name, defaultValue);

        updateProperties(actionRequest, expandoBridge, name);
    }

    @Override
    protected void doDispatch(RenderRequest renderRequest, RenderResponse renderResponse)
            throws IOException, PortletException {

        if (SessionErrors.contains(renderRequest, ColumnNameException.class.getName())
                || SessionErrors.contains(renderRequest, ColumnTypeException.class.getName())
                || SessionErrors.contains(renderRequest, DuplicateColumnNameException.class.getName())
                || SessionErrors.contains(renderRequest, ValueDataException.class.getName())) {

            include("/edit_expando.jsp", renderRequest, renderResponse);
        } else if (SessionErrors.contains(renderRequest, NoSuchColumnException.class.getName())
                || SessionErrors.contains(renderRequest, PrincipalException.getNestedClasses())) {

            include("/error.jsp", renderRequest, renderResponse);
        } else {
            super.doDispatch(renderRequest, renderResponse);
        }
    }

    protected Serializable getValue(PortletRequest portletRequest, String name, int type) throws PortalException {

        String delimiter = StringPool.COMMA;

        Serializable value = null;

        if (type == ExpandoColumnConstants.BOOLEAN) {
            value = ParamUtil.getBoolean(portletRequest, name);
        } else if (type == ExpandoColumnConstants.BOOLEAN_ARRAY) {
        } else if (type == ExpandoColumnConstants.DATE) {
            User user = _portal.getUser(portletRequest);

            int valueDateMonth = ParamUtil.getInteger(portletRequest, name + "Month");
            int valueDateDay = ParamUtil.getInteger(portletRequest, name + "Day");
            int valueDateYear = ParamUtil.getInteger(portletRequest, name + "Year");
            int valueDateHour = ParamUtil.getInteger(portletRequest, name + "Hour");
            int valueDateMinute = ParamUtil.getInteger(portletRequest, name + "Minute");
            int valueDateAmPm = ParamUtil.getInteger(portletRequest, name + "AmPm");

            if (valueDateAmPm == Calendar.PM) {
                valueDateHour += 12;
            }

            value = _portal.getDate(valueDateMonth, valueDateDay, valueDateYear, valueDateHour, valueDateMinute,
                    user.getTimeZone(), ValueDataException.class);
        } else if (type == ExpandoColumnConstants.DATE_ARRAY) {
        } else if (type == ExpandoColumnConstants.DOUBLE) {
            value = ParamUtil.getDouble(portletRequest, name);
        } else if (type == ExpandoColumnConstants.DOUBLE_ARRAY) {
            String paramValue = ParamUtil.getString(portletRequest, name);

            if (paramValue.contains(StringPool.NEW_LINE)) {
                delimiter = StringPool.NEW_LINE;
            }

            String[] values = StringUtil.split(paramValue, delimiter);

            value = GetterUtil.getDoubleValues(values);
        } else if (type == ExpandoColumnConstants.FLOAT) {
            value = ParamUtil.getFloat(portletRequest, name);
        } else if (type == ExpandoColumnConstants.FLOAT_ARRAY) {
            String paramValue = ParamUtil.getString(portletRequest, name);

            if (paramValue.contains(StringPool.NEW_LINE)) {
                delimiter = StringPool.NEW_LINE;
            }

            String[] values = StringUtil.split(paramValue, delimiter);

            value = GetterUtil.getFloatValues(values);
        } else if (type == ExpandoColumnConstants.INTEGER) {
            value = ParamUtil.getInteger(portletRequest, name);
        } else if (type == ExpandoColumnConstants.INTEGER_ARRAY) {
            String paramValue = ParamUtil.getString(portletRequest, name);

            if (paramValue.contains(StringPool.NEW_LINE)) {
                delimiter = StringPool.NEW_LINE;
            }

            String[] values = StringUtil.split(paramValue, delimiter);

            value = GetterUtil.getIntegerValues(values);
        } else if (type == ExpandoColumnConstants.LONG) {
            value = ParamUtil.getLong(portletRequest, name);
        } else if (type == ExpandoColumnConstants.LONG_ARRAY) {
            String paramValue = ParamUtil.getString(portletRequest, name);

            if (paramValue.contains(StringPool.NEW_LINE)) {
                delimiter = StringPool.NEW_LINE;
            }

            String[] values = StringUtil.split(paramValue, delimiter);

            value = GetterUtil.getLongValues(values);
        } else if (type == ExpandoColumnConstants.NUMBER) {
            value = ParamUtil.getNumber(portletRequest, name);
        } else if (type == ExpandoColumnConstants.NUMBER_ARRAY) {
            String paramValue = ParamUtil.getString(portletRequest, name);

            if (paramValue.contains(StringPool.NEW_LINE)) {
                delimiter = StringPool.NEW_LINE;
            }

            String[] values = StringUtil.split(paramValue, delimiter);

            value = GetterUtil.getNumberValues(values);
        } else if (type == ExpandoColumnConstants.SHORT) {
            value = ParamUtil.getShort(portletRequest, name);
        } else if (type == ExpandoColumnConstants.SHORT_ARRAY) {
            String paramValue = ParamUtil.getString(portletRequest, name);

            if (paramValue.contains(StringPool.NEW_LINE)) {
                delimiter = StringPool.NEW_LINE;
            }

            String[] values = StringUtil.split(paramValue, delimiter);

            value = GetterUtil.getShortValues(values);
        } else if (type == ExpandoColumnConstants.STRING_ARRAY) {
            String paramValue = ParamUtil.getString(portletRequest, name);

            if (paramValue.contains(StringPool.NEW_LINE)) {
                delimiter = StringPool.NEW_LINE;
            }

            value = StringUtil.split(paramValue, delimiter);
        } else if (type == ExpandoColumnConstants.STRING_LOCALIZED) {
            value = (Serializable) LocalizationUtil.getLocalizationMap(portletRequest, name);
        } else {
            value = ParamUtil.getString(portletRequest, name);
        }

        return value;
    }

    @Override
    protected boolean isSessionErrorException(Throwable cause) {
        if (cause instanceof ColumnNameException || cause instanceof ColumnTypeException
                || cause instanceof DuplicateColumnNameException || cause instanceof NoSuchColumnException
                || cause instanceof PrincipalException || cause instanceof ValueDataException) {

            return true;
        }

        return false;
    }

    @Reference(unbind = "-")
    protected void setExpandoColumnService(ExpandoColumnService expandoColumnService) {

        _expandoColumnService = expandoColumnService;
    }

    protected void updateProperties(ActionRequest actionRequest, ExpandoBridge expandoBridge, String name)
            throws Exception {

        Enumeration<String> enu = actionRequest.getParameterNames();

        UnicodeProperties properties = expandoBridge.getAttributeProperties(name);

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

        while (enu.hasMoreElements()) {
            String param = enu.nextElement();

            if (param.contains("PropertyName--")) {
                String propertyName = ParamUtil.getString(actionRequest, param);

                propertyNames.add(propertyName);
            }
        }

        for (String propertyName : propertyNames) {
            String value = ParamUtil.getString(actionRequest, "Property--" + propertyName + "--");

            properties.setProperty(propertyName, value);
        }

        expandoBridge.setAttributeProperties(name, properties);
    }

    private ExpandoColumnService _expandoColumnService;

    @Reference
    private Portal _portal;

}