org.lsug.quota.portlet.UserQuotaPortlet.java Source code

Java tutorial

Introduction

Here is the source code for org.lsug.quota.portlet.UserQuotaPortlet.java

Source

/**
 * Copyright (c) 2013-present Liferay Spain User Group 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 org.lsug.quota.portlet;

import com.liferay.compat.portal.util.PortalUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.ContentTypes;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.User;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.util.bridges.mvc.MVCPortlet;

import java.awt.Color;

import java.io.IOException;
import java.io.OutputStream;

import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

import org.lsug.quota.model.Quota;
import org.lsug.quota.service.QuotaLocalServiceUtil;
import org.lsug.quota.util.QuotaUtil;

/**
 *  Portlet controller for user's quota.
 *  @author LSUG
 *
 */
public class UserQuotaPortlet extends MVCPortlet {

    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
            throws IOException, PortletException {

        super.doView(renderRequest, renderResponse);
    }

    @Override
    public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse)
            throws IOException, PortletException {

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

        StringBundler sb = new StringBundler(5);

        JFreeChart jFreeChart = null;

        DefaultPieDataset pieDataset = new DefaultPieDataset();

        try {
            long groupId = themeDisplay.getUser().getGroupId();

            long classNameId = PortalUtil.getClassNameId(User.class);

            Quota siteQuota = QuotaLocalServiceUtil.fetchQuotaByClassNameIdClassPK(classNameId, groupId);

            if (siteQuota != null && siteQuota.isEnabled()) {
                pieDataset.setValue(QuotaUtil.getResource(resourceRequest, "used-space"),
                        siteQuota.getQuotaUsedPercentage());
                pieDataset.setValue(QuotaUtil.getResource(resourceRequest, "unused-space"),
                        100 - siteQuota.getQuotaUsedPercentage());

                sb.append(QuotaUtil.getResource(resourceRequest, "user-site-current-used-size-diagram-title"));

                jFreeChart = getCurrentSizeJFreeChart(sb.toString(), pieDataset);

                resourceResponse.setContentType(ContentTypes.IMAGE_PNG);

                OutputStream outputStream = null;

                try {
                    outputStream = resourceResponse.getPortletOutputStream();
                    ChartUtilities.writeChartAsPNG(outputStream, jFreeChart, 400, 200);
                } finally {
                    if (outputStream != null) {
                        outputStream.close();
                    }
                }
            }
        } catch (Exception e) {
            LOGGER.error(e);
            throw new PortletException(e);
        }
    }

    protected JFreeChart getCurrentSizeJFreeChart(String title, PieDataset pieDataset) {
        JFreeChart jFreeChart = ChartFactory.createPieChart3D(title, pieDataset, true, false, null);
        jFreeChart.setBackgroundPaint(Color.white);

        return jFreeChart;
    }

    /**
     * Log.
     */
    private static final transient Log LOGGER = LogFactoryUtil.getLog(UserQuotaPortlet.class);

}