org.esupportail.portlet.filemanager.portlet.PortletControllerAction.java Source code

Java tutorial

Introduction

Here is the source code for org.esupportail.portlet.filemanager.portlet.PortletControllerAction.java

Source

/**
 * Licensed to EsupPortail under one or more contributor license
 * agreements. See the NOTICE file distributed with this work for
 * additional information regarding copyright ownership.
 *
 * EsupPortail licenses this file to you 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 org.esupportail.portlet.filemanager.portlet;

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

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.apache.log4j.Logger;
import org.esupportail.portlet.filemanager.beans.BasketSession;
import org.esupportail.portlet.filemanager.beans.FileUpload;
import org.esupportail.portlet.filemanager.beans.FormCommand;
import org.esupportail.portlet.filemanager.beans.JsTreeFile;
import org.esupportail.portlet.filemanager.beans.SharedUserPortletParameters;
import org.esupportail.portlet.filemanager.beans.UserPassword;
import org.esupportail.portlet.filemanager.services.IServersAccessService;
import org.esupportail.portlet.filemanager.utils.PathEncodingUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.portlet.ModelAndView;

@Controller
@Scope("request")
public class PortletControllerAction {

    protected Logger log = Logger.getLogger(PortletControllerAction.class);

    @Autowired
    protected IServersAccessService serverAccess;

    @Autowired
    protected BasketSession basketSession;

    @Autowired
    protected PathEncodingUtils pathEncodingUtils;

    @Autowired
    protected SharedUserPortletParameters userParameters;

    @RequestMapping(value = { "VIEW" }, params = { "action=formProcessWai" })
    public void formProcessWai(FormCommand command, @RequestParam String dir,
            @RequestParam(required = false) String prepareCopy, @RequestParam(required = false) String prepareCut,
            @RequestParam(required = false) String past, @RequestParam(required = false) String rename,
            @RequestParam(required = false) String delete, @RequestParam(required = false) String zip,
            @RequestParam(required = false) String createFolder, ActionRequest request, ActionResponse response)
            throws IOException {

        dir = pathEncodingUtils.decodeDir(dir);

        String msg = null;

        if (zip != null) {
            /*
            String url = "/esup-filemanager/servlet-ajax/downloadZip?";
            for(String commandDir: pathEncodingUtils.decodeDirs(command.getDirs())) {
               url = url + "dirs=" + URLEncoder.encode(pathEncodingUtils.encodeDir(commandDir), "utf8") + "&";
               url = url + "sharedSessionId=" + URLEncoder.encode(sharedSessionId, "utf8") + "&";
            }
            url = url.substring(0, url.length()-1);
            response.sendRedirect(url);
            */
            log.warn("TODO !");

        } else if (rename != null) {
            response.setRenderParameter("dir", pathEncodingUtils.encodeDir(dir));
            response.setRenderParameter("dirs", pathEncodingUtils
                    .encodeDirs(pathEncodingUtils.decodeDirs(command.getDirs())).toArray(new String[] {}));
            response.setRenderParameter("action", "renameWai");
        } else {

            if (prepareCopy != null) {
                basketSession.setDirsToCopy(pathEncodingUtils.decodeDirs(command.getDirs()));
                basketSession.setGoal("copy");
                msg = "ajax.copy.ok";
            } else if (prepareCut != null) {
                basketSession.setDirsToCopy(pathEncodingUtils.decodeDirs(command.getDirs()));
                basketSession.setGoal("cut");
                msg = "ajax.cut.ok";
            } else if (past != null) {
                this.serverAccess.moveCopyFilesIntoDirectory(dir, basketSession.getDirsToCopy(),
                        "copy".equals(basketSession.getGoal()), userParameters);
                msg = "ajax.paste.ok";
            } else if (delete != null) {
                msg = "ajax.remove.ok";
                for (String dirToDelete : pathEncodingUtils.decodeDirs(command.getDirs())) {
                    if (!this.serverAccess.remove(dirToDelete, userParameters)) {
                        msg = "ajax.remove.failed";
                    }
                }
            }

            if (msg != null)
                response.setRenderParameter("msg", msg);
            response.setRenderParameter("dir", pathEncodingUtils.encodeDir(dir));
            response.setRenderParameter("action", "browseWai");
        }
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=createFolderWai" })
    public ModelAndView createFolderWai(RenderRequest request, RenderResponse response, @RequestParam String dir) {

        ModelMap model = new ModelMap();
        model.put("currentDir", dir);
        return new ModelAndView("view-portlet-create-wai", model);
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=formCreateWai" })
    public void formCreateWai(FormCommand command, @RequestParam String dir, @RequestParam String folderName,
            ActionRequest request, ActionResponse response) throws IOException {

        dir = pathEncodingUtils.decodeDir(dir);

        String msg = null;
        this.serverAccess.createFile(dir, folderName, "folder", userParameters);

        if (msg != null)
            response.setRenderParameter("msg", msg);
        response.setRenderParameter("dir", pathEncodingUtils.encodeDir(dir));
        response.setRenderParameter("action", "browseWai");
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=renameWai" })
    public ModelAndView renameWai(RenderRequest request, RenderResponse response, @RequestParam String dir,
            @RequestParam List<String> dirs) {

        dir = pathEncodingUtils.decodeDir(dir);
        dirs = pathEncodingUtils.decodeDirs(dirs);

        ModelMap model = new ModelMap();
        List<JsTreeFile> files = this.serverAccess.getChildren(dir, userParameters);
        List<JsTreeFile> filesToRename = new ArrayList<JsTreeFile>();
        if (!dirs.isEmpty()) {
            for (JsTreeFile file : files) {
                if (dirs.contains(file.getPath()))
                    filesToRename.add(file);
            }
        } else {
            filesToRename = files;
        }
        model.put("files", filesToRename);
        pathEncodingUtils.encodeDir(files);
        model.put("currentDir", pathEncodingUtils.encodeDir(dir));
        return new ModelAndView("view-portlet-rename-wai", model);
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=formRenameWai" })
    public void formRenameWai(@RequestParam String dir, ActionRequest request, ActionResponse response)
            throws IOException {

        dir = pathEncodingUtils.decodeDir(dir);

        List<JsTreeFile> files = this.serverAccess.getChildren(dir, userParameters);
        for (JsTreeFile file : files) {
            String newTitle = request.getParameter(pathEncodingUtils.encodeDir(file.getPath()));
            if (newTitle != null && newTitle.length() != 0 && !file.getTitle().equals(newTitle)) {
                this.serverAccess.renameFile(file.getPath(), newTitle, userParameters);
            }
        }

        response.setRenderParameter("dir", pathEncodingUtils.encodeDir(dir));
        response.setRenderParameter("action", "browseWai");
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=fileUploadWai" })
    public ModelAndView fileUploadWai(RenderRequest request, RenderResponse response, @RequestParam String dir) {

        ModelMap model = new ModelMap();
        model.put("currentDir", dir);
        return new ModelAndView("view-portlet-upload-wai", model);
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=formUploadWai" })
    public void formUploadWai(ActionRequest request, ActionResponse response, @RequestParam String dir,
            FileUpload command) throws IOException {

        dir = pathEncodingUtils.decodeDir(dir);

        String filename = command.getQqfile().getOriginalFilename();
        InputStream inputStream = command.getQqfile().getInputStream();
        this.serverAccess.putFile(dir, filename, inputStream, userParameters, userParameters.getUploadOption());

        response.setRenderParameter("dir", pathEncodingUtils.encodeDir(dir));
        response.setRenderParameter("action", "browseWai");
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=formAuthenticationWai" })
    public void formAuthenticationWai(ActionRequest request, ActionResponse response, @RequestParam String dir,
            @RequestParam String username, @RequestParam String password) throws IOException {

        dir = pathEncodingUtils.decodeDir(dir);

        String msg = "auth.bad";
        if (this.serverAccess.authenticate(dir, username, password, userParameters)) {
            msg = "auth.ok";

            // we keep username+password in session so that we can reauthenticate on drive in servlet mode 
            // (and so that download file would be ok for example with the servlet ...)
            String driveName = this.serverAccess.getDrive(dir);
            userParameters.getUserPassword4AuthenticatedFormDrives().put(driveName,
                    new UserPassword(username, password));
        }

        response.setRenderParameter("msg", msg);
        response.setRenderParameter("dir", pathEncodingUtils.encodeDir(dir));
        response.setRenderParameter("action", "browseWai");
    }

    @RequestMapping(value = { "VIEW" }, params = { "action=formAuthenticationMobile" })
    public void formAuthenticationMobile(ActionRequest request, ActionResponse response, @RequestParam String dir,
            @RequestParam String username, @RequestParam String password) throws IOException {

        dir = pathEncodingUtils.decodeDir(dir);

        String msg = "auth.bad";
        if (this.serverAccess.authenticate(dir, username, password, userParameters)) {
            msg = "auth.ok";

            // we keep username+password in session so that we can reauthenticate on drive in servlet mode 
            // (and so that download file would be ok for example with the servlet ...)
            String driveName = this.serverAccess.getDrive(dir);
            userParameters.getUserPassword4AuthenticatedFormDrives().put(driveName,
                    new UserPassword(username, password));
        }

        response.setRenderParameter("msg", msg);
        response.setRenderParameter("dir", pathEncodingUtils.encodeDir(dir));
        response.setRenderParameter("action", "browseMobile");
    }

}