edu.purdue.pivot.skwiki.server.ImageUploaderServlet.java Source code

Java tutorial

Introduction

Here is the source code for edu.purdue.pivot.skwiki.server.ImageUploaderServlet.java

Source

/*
 * Adopted and Improved for skWiki by Karthik Badam 
 * 
 * Copyright 2009 Manuel Carrasco Moino. (manuel_carrasco at users.sourceforge.net) 
 * http://code.google.com/p/gwtupload
 * 
 * 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 edu.purdue.pivot.skwiki.server;

import gwtupload.server.UploadAction;
import gwtupload.server.exceptions.UploadActionException;
import gwtupload.shared.UConsts;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.io.FilenameUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * This class sends by email, all the fields and files received by GWTUpload
 * servlet.
 * 
 * @author Manolo Carrasco Moino
 * 
 */

public class ImageUploaderServlet extends UploadAction {

    private static final long serialVersionUID = 1L;
    private String current_project_name = "";
    private String main_database_name = "";
    private String postgres_name = "postgres";
    private String postgres_password = "fujiko";

    Hashtable<String, String> receivedContentTypes = new Hashtable<String, String>();
    /**
     * Maintain a list with received files and their content types.
     */
    Hashtable<String, File> receivedFiles = new Hashtable<String, File>();
    Hashtable<String, String> receivedFilePaths = new Hashtable<String, String>();

    /**
     * Override executeAction to save the received files in a custom place and
     * delete this items from session.
     */

    Connection connection;

    @Override
    public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles)
            throws UploadActionException {

        connection = null;
        Statement st = null;

        /* read database details from file */
        BufferedReader br;
        current_project_name = "";
        main_database_name = "";

        try {
            br = new BufferedReader(new FileReader(this.getServletContext().getRealPath("/serverConfig.txt")));
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                String first = line.substring(0, line.lastIndexOf(':'));
                String last = line.substring(line.lastIndexOf(':') + 1);

                if (first.contains("content_database")) {
                    current_project_name = last;
                }

                if (first.contains("owner_database")) {
                    main_database_name = last;
                }

                if (first.contains("username")) {
                    postgres_name = last;
                }

                if (first.contains("password")) {
                    postgres_password = last;
                }

                sb.append(line);
                sb.append(System.lineSeparator());
                line = br.readLine();
            }

            //String everything = sb.toString();
            //System.out.println("file: "+everything);
            br.close();

        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } finally {

        }

        try {
            connection = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/" + current_project_name,
                    "postgres", "fujiko");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String response = "";
        int cont = 0;
        for (FileItem item : sessionFiles) {
            if (false == item.isFormField()) {
                cont++;
                try {
                    String uuid = UUID.randomUUID().toString();
                    String saveName = uuid + '.' + FilenameUtils.getExtension(item.getName());

                    //               String saveName = item.getName();

                    //write to database
                    File file = new File(saveName);
                    item.write(file);

                    // / Save a list with the received files
                    receivedFiles.put(item.getFieldName(), file);
                    receivedContentTypes.put(item.getFieldName(), item.getContentType());
                    receivedFilePaths.put(item.getFieldName(), file.getAbsolutePath());

                    // / Send a customized message to the client.
                    response += "File saved as " + file.getAbsolutePath();

                    //write filename to database

                    String selectStr = "insert into images values (" + "\'" + item.getFieldName() + "\'," + "\'"
                            + file.getAbsolutePath() + "\'" + ")";
                    st = connection.createStatement();
                    int textReturnCode = st.executeUpdate(selectStr);

                } catch (Exception e) {
                    throw new UploadActionException(e.getMessage());
                }
            }
        }

        // / Remove files from session because we have a copy of them
        removeSessionFileItems(request);

        // / Send your customized message to the client.
        return response;
    }

    /**
     * Get the content of an uploaded file.
     */
    @Override
    public void getUploadedFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String fieldName = request.getParameter(UConsts.PARAM_SHOW);
        //File f = receivedFiles.get(fieldName);

        String selectStr = "select path from images where field_name = \'" + fieldName + "\'";
        Statement st = null;
        ResultSet rs = null;
        ResultSet rst = null;
        String receivedFilePath = receivedFilePaths.get(fieldName);

        try {
            st = connection.createStatement();
            rs = st.executeQuery(selectStr);
            while (rs.next()) {
                receivedFilePath = rs.getString(1);

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        File f = new File(receivedFilePath);
        if (f != null) {
            response.setContentType(receivedContentTypes.get(fieldName));
            FileInputStream is = new FileInputStream(f);
            copyFromInputStreamToOutputStream(is, response.getOutputStream());
        } else {
            renderXmlResponse(request, response, XML_ERROR_ITEM_NOT_FOUND);
        }
    }

    /**
     * Remove a file when the user sends a delete request.
     */
    @Override
    public void removeItem(HttpServletRequest request, String fieldName) throws UploadActionException {
        File file = receivedFiles.get(fieldName);
        receivedFiles.remove(fieldName);
        receivedContentTypes.remove(fieldName);
        if (file != null) {
            file.delete();
        }
    }
}