ch.inofix.referencemanager.web.internal.portlet.ReferenceManagerPortlet.java Source code

Java tutorial

Introduction

Here is the source code for ch.inofix.referencemanager.web.internal.portlet.ReferenceManagerPortlet.java

Source

/**
 * Copyright 2016-present Inofix GmbH, Luzern.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ch.inofix.referencemanager.web.internal.portlet;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.servlet.http.HttpServletRequest;

import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Modified;

import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.kernel.security.auth.PrincipalException;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.ServiceContextFactory;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.kernel.util.Constants;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;

import aQute.bnd.annotation.metatype.Configurable;
import ch.inofix.referencemanager.constants.PortletKeys;
import ch.inofix.referencemanager.exception.NoSuchReferenceException;
import ch.inofix.referencemanager.model.Reference;
import ch.inofix.referencemanager.service.ReferenceService;
import ch.inofix.referencemanager.web.configuration.ReferenceManagerConfiguration;
import ch.inofix.referencemanager.web.internal.portlet.util.PortletUtil;

/**
 * View Controller of Inofix' reference-manager.
 * 
 * @author Christian Berndt
 * @created 2016-04-10 22:32
 * @modified 2017-11-04 19:03
 * @version 1.1.7
 */
@Component(configurationPid = "ch.inofix.referencemanager.web.configuration.ReferenceManagerConfiguration", immediate = true, property = {
        "com.liferay.portlet.add-default-resource=true",
        "com.liferay.portlet.css-class-wrapper=portlet-reference-manager",
        "com.liferay.portlet.display-category=category.inofix",
        "com.liferay.portlet.header-portlet-css=/css/main.css", "com.liferay.portlet.instanceable=false",
        "javax.portlet.init-param.template-path=/", "javax.portlet.init-param.view-template=/reference/view.jsp",
        "javax.portlet.name=" + PortletKeys.REFERENCE_MANAGER, "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user" }, service = Portlet.class)
public class ReferenceManagerPortlet extends MVCPortlet {

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

        renderRequest.setAttribute(ReferenceManagerConfiguration.class.getName(), _referenceManagerConfiguration);

        super.doView(renderRequest, renderResponse);
    }

    /**
     * 
     * @param actionRequest
     * @param actionResponse
     * @since 1.0.0
     * @throws Exception
     */
    public void importBibTeXFile(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

        HttpServletRequest request = PortalUtil.getHttpServletRequest(actionRequest);

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

        UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);

        File file = uploadPortletRequest.getFile("file");
        String fileName = file.getName();

        long userId = themeDisplay.getUserId();
        long groupId = themeDisplay.getScopeGroupId();
        boolean privateLayout = themeDisplay.getLayout().isPrivateLayout();

        String servletContextName = request.getSession().getServletContext().getServletContextName();

        String[] servletContextNames = new String[] { servletContextName };

        Map<String, String[]> parameterMap = new HashMap<String, String[]>(actionRequest.getParameterMap());
        parameterMap.put("servletContextNames", servletContextNames);

        if (Validator.isNotNull(file)) {

            String message = PortletUtil.translate("upload-successfull-import-will-finish-in-a-separate-thread");
            ServiceContext serviceContext = ServiceContextFactory.getInstance(Reference.class.getName(),
                    uploadPortletRequest);

            _referenceService.importReferencesInBackground(userId, fileName, groupId, privateLayout, parameterMap,
                    file, serviceContext);

            SessionMessages.add(actionRequest, "request_processed", message);

        } else {

            SessionErrors.add(actionRequest, "file-not-found");

        }
    }

    //    @Override
    //    public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) {
    //
    //        String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
    //
    //        _log.info("processAction()");
    //        _log.info("cmd = " + cmd);
    //        
    //        try {
    //            if (cmd.equals("deleteReferences")) {
    //                
    //                deleteReferences(actionRequest, actionResponse);
    //
    //            } else if (cmd.equals("deleteGroupReferences")) {
    //                
    //                deleteGroupReferences(actionRequest, actionResponse);
    //
    //            }
    //        } catch (Exception e) {
    //
    //            // TODO: improve error handling
    //            _log.error(e);
    //            
    ////            throw new Exception(e);
    //
    //        }
    //    }

    @Activate
    @Modified
    protected void activate(Map<Object, Object> properties) {
        _referenceManagerConfiguration = Configurable.createConfigurable(ReferenceManagerConfiguration.class,
                properties);
    }

    /**
     * 
     * @param actionRequest
     * @param actionResponse
     * @since 1.0.4
     * @throws Exception
     */
    protected void deleteAllReferences(ActionRequest actionRequest, ActionResponse actionResponse)
            throws Exception {

        String tabs1 = ParamUtil.getString(actionRequest, "tabs1");

        List<Reference> references = _referenceService.deleteReferences();

        SessionMessages.add(actionRequest, REQUEST_PROCESSED,
                PortletUtil.translate("successfully-deleted-x-references", references.size()));

        actionResponse.setRenderParameter("tabs1", tabs1);
    }

    /**
     * 
     * @param actionRequest
     * @param actionResponse
     * @since 1.0.8
     * @throws Exception
     */
    protected void deleteGroupReferences(ActionRequest actionRequest, ActionResponse actionResponse)
            throws Exception {

        String tabs1 = ParamUtil.getString(actionRequest, "tabs1");

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

        List<Reference> references = _referenceService.deleteGroupReferences(serviceContext.getScopeGroupId());

        SessionMessages.add(actionRequest, REQUEST_PROCESSED,
                PortletUtil.translate("successfully-deleted-x-references", references.size()));

        actionResponse.setRenderParameter("tabs1", tabs1);
    }

    /**
    *
    * @param actionRequest
    * @param actionResponse
    * @throws Exception
    */
    protected void deleteReferences(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

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

        long[] referenceIds = ParamUtil.getLongValues(actionRequest, "deleteBibliographyIds");

        if (referenceId > 0) {
            referenceIds = new long[] { referenceId };
        }

        for (long id : referenceIds) {
            _referenceService.deleteReference(id);
        }

    }

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

        if (SessionErrors.contains(renderRequest, PrincipalException.getNestedClasses())
                || SessionErrors.contains(renderRequest, NoSuchReferenceException.class)) {
            include("/error.jsp", renderRequest, renderResponse);
        } else {
            super.doDispatch(renderRequest, renderResponse);
        }
    }

    @org.osgi.service.component.annotations.Reference
    protected void setReferenceService(ReferenceService referenceService) {
        this._referenceService = referenceService;
    }

    private ReferenceService _referenceService;

    private volatile ReferenceManagerConfiguration _referenceManagerConfiguration;

    private static final String REQUEST_PROCESSED = "request_processed";

    private static Log _log = LogFactoryUtil.getLog(ReferenceManagerPortlet.class.getName());

}