org.sakaiproject.myshowcase.servlet.MyShowcaseFileUploadServlet.java Source code

Java tutorial

Introduction

Here is the source code for org.sakaiproject.myshowcase.servlet.MyShowcaseFileUploadServlet.java

Source

//***************************************************************************
//*MyShowcase                                                               * 
//*Copyright (C) 2010 MyKnowledgeMap Ltd.                                   *
//*                                                                         *
//*This program is free software: you can redistribute it and/or modify     *
//*it under the terms of the GNU Affero General Public License as           *
//*published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.                      *
//*                                                                         *
//*You should have received a copy of the GNU Affero General Public License *
//*along with this program.  If not, see <http://www.gnu.org/licenses/>.    *
//*                                                                         *
//*Web: <http://www.my-showcase.org/>.                                      *
//*Email: <myshowcase@myknowledgemap.com>                                   *
//*                                                                         *
//***************************************************************************

package org.sakaiproject.myshowcase.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.sakaiproject.myshowcase.logic.IMyShowcaseService;
import org.sakaiproject.myshowcase.model.Artefact;
import org.sakaiproject.myshowcase.model.ArtefactDetail;
import org.sakaiproject.myshowcase.model.ArtefactType;
import org.sakaiproject.myshowcase.model.Owner;
import org.sakaiproject.myshowcase.config.*;

public class MyShowcaseFileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 2740693677625051632L;

    public MyShowcaseFileUploadServlet() {

        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    }

    private String getRepositoryPath(String owner) {

        String rp;

        MyShowcaseConfigValues configValues = new MyShowcaseConfigValues();

        rp = configValues.getAbsoluteFileStore();

        rp = rp + owner; //+ "\\" ;

        // Create folder if necessary
        File rd = new File(rp);

        if (!rd.exists()) {

            rd.mkdir();

        }

        if (!rd.exists()) {

            System.out.println("NB* ** Failed to create folder: " + rp);

        }

        // Put trailing / on the end of the repository path
        rp = rp + "/";

        return rp;
    }

    private String getOwnerName(List fileItemsList) {

        String ownerName = "";

        Iterator it = fileItemsList.iterator();

        while (it.hasNext()) {

            FileItem fileItem = (FileItem) it.next();

            if (fileItem.isFormField()) {

                if (fileItem.getFieldName().equalsIgnoreCase("ownerName")) {
                    ownerName = fileItem.getString();
                }
            }
        }

        return ownerName;
    }

    private String getOwnerId(List fileItemsList) {

        String ownerId = "";

        Iterator it = fileItemsList.iterator();

        while (it.hasNext()) {

            FileItem fileItem = (FileItem) it.next();

            if (fileItem.isFormField()) {

                if (fileItem.getFieldName().equalsIgnoreCase("ownerId")) {

                    ownerId = fileItem.getString();
                }

            }
        }

        return ownerId;
    }

    private String getTitle(List fileItemsList) {

        String title = "";

        Iterator it = fileItemsList.iterator();

        while (it.hasNext()) {

            FileItem fileItem = (FileItem) it.next();

            if (fileItem.isFormField()) {

                if (fileItem.getFieldName().equalsIgnoreCase("input2")) {

                    title = fileItem.getString();
                }

            }
        }

        return title;
    }

    private String getDescription(List fileItemsList) {

        String description = "";

        Iterator it = fileItemsList.iterator();

        while (it.hasNext()) {

            FileItem fileItem = (FileItem) it.next();

            if (fileItem.isFormField()) {

                if (fileItem.getFieldName().equalsIgnoreCase("input4")) {

                    description = fileItem.getString();
                }

            }
        }

        return description;
    }

    private String getDataValue(List fileItemsList) {

        String dataValue = "";

        Iterator it = fileItemsList.iterator();

        while (it.hasNext()) {

            FileItem fileItem = (FileItem) it.next();

            if (fileItem.getFieldName().equalsIgnoreCase("input1")) {

                dataValue = fileItem.getName();
            }

        }

        return dataValue;
    }

    private String getType(List fileItemsList) {

        String type = "";

        Iterator it = fileItemsList.iterator();

        while (it.hasNext()) {

            FileItem fileItem = (FileItem) it.next();

            if (fileItem.isFormField()) {

                if (fileItem.getFieldName().equalsIgnoreCase("type")) {

                    type = fileItem.getString();
                }

            }
        }

        return type;
    }

    private String getFileType(String fName) {

        String fType;

        String sFile[];

        sFile = fName.split("\\.");

        fType = sFile[sFile.length - 1].toLowerCase();

        return fType;
    }

    private boolean isValidFileType(String fName) {

        boolean isValid = false;

        String fileType = getFileType(fName);

        List<String> validFileTypes = MyShowcaseConfigValues.getInstance().getValidFileTypes();

        for (String type : validFileTypes) {

            if (fileType.equals(type)) {

                isValid = true;

            }
        }

        return isValid;
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {

            List fileItemsList = null;

            String input1 = request.getParameter("input1");
            String input2 = request.getParameter("input2");
            String input4 = request.getParameter("input4");

            if (ServletFileUpload.isMultipartContent(request)) {

                ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());

                fileItemsList = servletFileUpload.parseRequest(request);

                DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();

                diskFileItemFactory.setSizeThreshold(40960); /* the unit is bytes */

                String homeDirId = MyShowcaseConfigValues.getInstance().getFileUploadHomeDir();

                File repositoryPath = null;

                String homeDir = "";

                if (homeDirId.equals("ownerName")) {

                    homeDir = getOwnerName(fileItemsList);

                } else if (homeDirId.equals("ownerId")) {

                    homeDir = getOwnerId(fileItemsList);

                }

                repositoryPath = new File(getRepositoryPath(homeDir));

                diskFileItemFactory.setRepository(repositoryPath);

                servletFileUpload.setSizeMax(81920); /* the unit is bytes */

                Iterator it = fileItemsList.iterator();

                while (it.hasNext()) {

                    FileItem fileItem = (FileItem) it.next();

                    if (fileItem.isFormField()) {

                    } else {

                        String fileName = fileItem.getName();

                        fileName = getRepositoryPath(homeDir) + fileName;

                        File uploadedFile = new File(fileName);

                        fileItem.write(uploadedFile);

                        isValidFileType(fileName);

                    }
                }

            } else {

                System.out.println("Not Multipart Request");
            }

            IMyShowcaseService myshowcaseService = getMyShowcaseService();

            String ownerId = getOwnerId(fileItemsList);

            Owner owner = myshowcaseService.getOwnerById(new Long(ownerId));

            String aType = getType(fileItemsList);

            String aTitle = getTitle(fileItemsList);

            String aDescription = getDescription(fileItemsList);

            String aDataValue = getDataValue(fileItemsList);

            // Save Artefact
            Artefact artefact = new Artefact();

            ArtefactDetail artefactDetail = new ArtefactDetail();

            ArtefactType artefactType = myshowcaseService.getArtefactTypeByName(aType);

            artefact.setOwner(owner);

            artefact.setDescription(aDescription);

            artefact.setName(aTitle);

            artefact.setShortDesc(aTitle);

            artefact.setType(artefactType);

            artefactDetail.setFileName(aDataValue);

            artefactDetail.setFileType(getFileType(aDataValue));

            artefactDetail.setFilePath(getRepositoryPath(ownerId));

            artefactDetail.setDetail(aDataValue);

            artefact.setArtefactDetail(artefactDetail);

            myshowcaseService.saveArtefact(artefact);

        } catch (Exception e) {
            System.out.println(e.toString());
        }

        //        response.setContentType("application/json");
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");

        PrintWriter out = response.getWriter();

        out.write("<html>");
        out.write("<head>");
        out.write("<title>File Upload</title>");
        out.write("</head>");
        out.write("<body>");
        out.write("File uploaded");
        out.write("<script type=\"text/javascript\">");
        out.write("parent.$.fancybox.close();");
        out.write("</script>");
        out.write("</body>");
        out.write("</html>");
        out.flush();
        out.close();

    }

    private IMyShowcaseService myshowcaseService;

    public void setMyshowcaseService(IMyShowcaseService service) {

        this.myshowcaseService = service;

    }

    private IMyShowcaseService getMyShowcaseService() {
        ServletContext servletContext = this.getServletContext();

        return (IMyShowcaseService) servletContext.getAttribute("MyShowcaseServiceInServletContext");
    }

}