Subversion Repositories bacoAlunos

Rev

Rev 1350 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.web;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.services.ftpservices.FtpRequestForm;
import pt.estgp.estgweb.utils.*;
import pt.estgp.estgweb.utils.Globals;
import pt.estgp.estgweb.web.controllers.ApplicationController;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Jorge
 * @date 27/Fev/2009
 * @time 1:19:57
 */

public class FtpManager
{

    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(FtpManager.class);

    public static void checkIfAnyFilesToUploadFromRequest(ApplicationController messageBack, HttpServletRequest request, HttpServletResponse response)
    {
        1.5.0/docs/api/java/lang/String.html">String formUploadStyle = "display:none;";
        int maxMegas = pt.estgp.estgweb.utils.Globals.MAX_FILE_UPOLOAD_SIZE_MBYTES;
        try
        {

            // Check that we have a file upload request
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if (isMultipart)
            {
                // Create a factory for disk-based file items
                DiskFileItemFactory factory = new DiskFileItemFactory();
                // Set factory constraints
                factory.setSizeThreshold(maxMegas * 1024 * 1024);
                factory.setRepository(new 1.5.0/docs/api/java/io/File.html">File(Globals.TMP_DIR));
                // Create a new file upload handler
                ServletFileUpload upload = new ServletFileUpload(factory);
                // Set overall request size constraint
                upload.setSizeMax((maxMegas + 1) * 1024 * 1024);
                // Parse the request
                List<FileItem> items = upload.parseRequest(request);
                List<FileItem> items2import = new ArrayList<FileItem>();
                for (FileItem item : items)
                {
                    5+0%2Fdocs%2Fapi+InputStream">InputStream stream = item.getInputStream();
                    if (item.isFormField())
                    {
                        request.setAttribute(item.getFieldName(), new 1.5.0/docs/api/java/lang/String.html">String(item.getString().getBytes("ISO-8859-1")));
                    }
                    if (stream != null && item.getSize() > 0 && item.getName() != null)
                    {
                        items2import.add(item);
                    }
                    else if(stream != null && item.getName() != null)
                    {
                        1.5.0/docs/api/java/lang/String.html">String newFolder = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("newFolder");
                        1.5.0/docs/api/java/lang/String.html">String deleteFile = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("deleteFile");
                        1.5.0/docs/api/java/lang/String.html">String deleteFolder = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("deleteFolder");
                        if((newFolder == null || newFolder.length() == 0) && (deleteFile == null || deleteFile.length() == 0) && (deleteFolder == null || deleteFolder.length() == 0))
                        {
                            logger.warn("ITEM:" + item.getName() + " not parameter and has ZERO BYTES will not import");
                            messageBack.addError(request,"errors.file.zero.bytes",item.getName());
                        }
                    }
                }
                1.5.0/docs/api/java/lang/String.html">String username = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("username");
                1.5.0/docs/api/java/lang/String.html">String password = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("password");
                1.5.0/docs/api/java/lang/String.html">String server = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("server");
                1.5.0/docs/api/java/lang/String.html">String startPath = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute(DirWebProxy.FTP_ACTUAL_PATH_KEY);
                if (startPath == null)
                    startPath = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute(LayoutController.FTP_ACTUAL_PATH_KEY);
                1.5.0/docs/api/java/lang/String.html">String serverConfName = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("serverConfName");
                1.5.0/docs/api/java/lang/String.html">String savePassword = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("savePassword");
                1.5.0/docs/api/java/lang/String.html">String newFolder = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("newFolder");
                1.5.0/docs/api/java/lang/String.html">String deleteFile = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("deleteFile");
                1.5.0/docs/api/java/lang/String.html">String deleteFolder = (1.5.0/docs/api/java/lang/String.html">String) request.getAttribute("deleteFolder");
                if (items2import.size() > 0
                        ||
                        (newFolder != null && newFolder.trim().length() > 0)
                        ||
                        (deleteFile != null && deleteFile.trim().length() > 0)
                        ||
                        (deleteFolder != null && deleteFolder.trim().length() > 0))
                {

                    FtpRequestForm ftpRequestForm = new FtpRequestForm();
                    CourseUnitView courseUnitView = (CourseUnitView) request.getAttribute("CourseUnitView");
                    if(courseUnitView != null)
                        ftpRequestForm.setCourseUnitView(courseUnitView);
                    ftpRequestForm.setServerConfName(serverConfName);
                    ftpRequestForm.setUsername(username);
                    ftpRequestForm.setPassword(password);
                    if (savePassword != null && savePassword.trim().length() > 0)
                        ftpRequestForm.setSavePassword(true);
                    ftpRequestForm.setNewFolderName(newFolder);
                    ftpRequestForm.setFileToDelete(deleteFile);
                    ftpRequestForm.setFolderToDelete(deleteFolder);
                    ftpRequestForm.setServerUrl(server);
                    ftpRequestForm.setStartPath(startPath);
                    ftpRequestForm.setFilesToImport(items2import);

                    IServiceManager sm = ServiceManager.getInstance();
                    1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{};
                    5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{ftpRequestForm};
                    try
                    {
                        1.5.0/docs/api/java/lang/String.html">String result = (1.5.0/docs/api/java/lang/String.html">String) sm.execute(RequestUtils.getRequester(request, response), "FtpService", args, names);
                        if(result.indexOf("error") >= 0)
                            messageBack.addError(request, result);
                        else
                            messageBack.addMessage(request, result);
                    }
                    catch (1.5.0/docs/api/java/lang/Exception.html">Exception e)
                    {
                        response.sendError(500,e.toString());
                        return;
                    }
                    catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable throwable)
                    {
                        logger.error(throwable,throwable);
                    }
                }
                else
                {
                    logger.info("Zero items to import");
                }
            }
        }
        catch (FileUploadException e)
        {
            formUploadStyle = "";
            messageBack.addError(request,"errors.file.too.long",""+maxMegas);

        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e,e);
        }
        request.setAttribute("formUploadStyle",formUploadStyle);
    }
}