org.bonitasoft.console.common.server.servlet.PageUploadServlet.java Source code

Java tutorial

Introduction

Here is the source code for org.bonitasoft.console.common.server.servlet.PageUploadServlet.java

Source

/**
 * Copyright (C) 2014 BonitaSoft S.A.
 * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble
 * 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, either version 2.0 of the License, or
 * (at your option) any later version.
 * 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, see <http://www.gnu.org/licenses/>.
 */
package org.bonitasoft.console.common.server.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.bonitasoft.console.common.server.page.CustomPageService;
import org.bonitasoft.console.common.server.preferences.properties.PropertiesFactory;
import org.bonitasoft.engine.exception.AlreadyExistsException;
import org.bonitasoft.engine.exception.BonitaException;
import org.bonitasoft.engine.exception.InvalidPageTokenException;
import org.bonitasoft.engine.exception.InvalidPageZipContentException;
import org.bonitasoft.engine.session.APISession;

public class PageUploadServlet extends TenantFileUploadServlet {

    /**
     * UID
     */
    private static final long serialVersionUID = -5733037726905793432L;

    protected static final String ACTION_PARAM_NAME = "action";

    private static final String PROCESS_PARAM_NAME = "process";

    protected static final String ADD_ACTION = "add";

    protected static final String EDIT_ACTION = "edit";

    protected static final String PAGE_PROPERTIES = "page.properties";

    protected static final Logger LOGGER = Logger.getLogger(PageUploadServlet.class.getName());

    @Override
    protected String generateResponseString(final HttpServletRequest request, final String fileName,
            final File uploadedFile) throws Exception {

        final String responseString = super.generateResponseString(request, fileName, uploadedFile);
        final String permissions = getPermissions(request, uploadedFile);
        return responseString + RESPONSE_SEPARATOR + permissions;
    }

    protected String getPermissions(final HttpServletRequest request, final File uploadedFile)
            throws IOException, BonitaException {

        final String action = request.getParameter(ACTION_PARAM_NAME);
        final boolean checkIfItAlreadyExists = ADD_ACTION.equals(action);
        String permissions;
        try {
            final Set<String> permissionsSet = getPagePermissions(request, uploadedFile, checkIfItAlreadyExists);
            permissions = permissionsSet.toString();
        } catch (final InvalidPageZipContentException e) {
            permissions = getPermissionsError(e);
        } catch (final InvalidPageTokenException e) {
            permissions = getPermissionsError(e);
        } catch (final AlreadyExistsException e) {
            permissions = getPermissionsError(e);
        }
        if (permissions == null) {
            permissions = "[]";
        }
        return permissions;
    }

    protected String getPermissionsError(final Exception e) {
        if (LOGGER.isLoggable(Level.WARNING)) {
            LOGGER.log(Level.WARNING, e.getMessage());
        }
        return e.getClass().getSimpleName();
    }

    protected Set<String> getPagePermissions(final HttpServletRequest request, final File uploadedFile,
            final boolean checkIfItAlreadyExists) throws InvalidPageZipContentException, InvalidPageTokenException,
            AlreadyExistsException, BonitaException, IOException, InvalidPageZipContentException {

        final APISession apiSession = getAPISession(request);
        final Long processDefinitionId = getProcessDefinitionId(request);
        final CustomPageService customPageService = new CustomPageService();
        final Properties properties = customPageService.getPageProperties(apiSession,
                FileUtils.readFileToByteArray(uploadedFile), checkIfItAlreadyExists, processDefinitionId);
        return customPageService.getCustomPagePermissions(properties,
                PropertiesFactory.getResourcesPermissionsMapping(apiSession.getTenantId()), true);
    }

    private Long getProcessDefinitionId(final HttpServletRequest request) {
        final String processStr = request.getParameter(PROCESS_PARAM_NAME);
        Long processDefinitionId = null;
        if (processStr != null) {
            processDefinitionId = Long.parseLong(processStr);
        }
        return processDefinitionId;
    }

}