nl.fontys.pts61a.vps.controller.UploadController.java Source code

Java tutorial

Introduction

Here is the source code for nl.fontys.pts61a.vps.controller.UploadController.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package nl.fontys.pts61a.vps.controller;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import nl.fontys.pts61a.vps.model.Cartracker;
import nl.fontys.pts61a.vps.model.Movement;
import nl.fontys.pts61a.vps.service.MovementService;
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.commons.io.IOUtils;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

/**
 *
 * @author Jesper
 */
@WebServlet(name = "TestController", urlPatterns = { "/test" })
public class UploadController extends HttpServlet {

    @Inject
    MovementService service;

    private static final long serialVersionUID = 1L;

    // location to store file uploaded
    private static final String UPLOAD_DIRECTORY = "";

    // upload settings
    private static final int MEMORY_THRESHOLD = 1024 * 1 * 1; // 3MB
    private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
    private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB

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

        getServletContext().getRequestDispatcher("/upload.jsp").forward(request, response);
    }

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

        if (!ServletFileUpload.isMultipartContent(request)) {
            PrintWriter writer = response.getWriter();
            writer.println("Error: Form must has enctype=multipart/form-data.");
            writer.flush();
            return;
        }

        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(MEMORY_THRESHOLD);
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setFileSizeMax(MAX_FILE_SIZE);
        upload.setSizeMax(MAX_REQUEST_SIZE);
        String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY;

        File uploadDir = new File("verplaatsingen");
        if (!uploadDir.exists()) {
            uploadDir.mkdir();
        }

        try {
            @SuppressWarnings("unchecked")
            List<FileItem> formItems = upload.parseRequest(request);

            if (formItems != null && formItems.size() > 0) {
                for (FileItem item : formItems) {
                    if (!item.isFormField()) {

                        final InputStream stream = item.getInputStream();
                        final byte[] bytes = IOUtils.toByteArray(stream);
                        String movementJson = new String(bytes, "UTF-8");

                        String fileName = new File(item.getName()).getName();
                        String filePath = uploadPath + File.separator + fileName;
                        File storeFile = new File(filePath);

                        JSONObject json = (JSONObject) new JSONParser().parse(movementJson);
                        Long cartrackerId = Long.parseLong(json.get("cartrackerId").toString());

                        String verificatieCode = json.get("verificatieCode").toString();

                        Cartracker c = service.checkCartrackerId(cartrackerId, verificatieCode);
                        Long nextId = c.getLastId() + 1l;

                        if (Objects.equals(nextId, Long.valueOf(json.get("currentId").toString()))) {

                            List<JSONObject> movementsJson = (List<JSONObject>) json.get("verplaatsingen");

                            for (JSONObject jo : movementsJson) {
                                Movement m = new Movement();
                                m.setLongitude(Double.parseDouble(jo.get("longitude").toString()));
                                m.setLatitude(Double.parseDouble(jo.get("latitude").toString()));
                                String string = jo.get("date").toString();

                                java.util.Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(string);
                                new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(date);
                                m.setRegistrationDate(date);
                                m.setMovementId(Long.parseLong(jo.get("movementId").toString()));
                                m.setDistance(Long.parseLong(jo.get("distance").toString()));
                                m.setCartracker(c);
                                service.addMovement(m);
                            }
                            service.setCartracketNextId(c, nextId);
                        } else {
                            PrintWriter writer = response.getWriter();
                            writer.println("Missing: " + nextId);
                            writer.flush();
                            return;
                        }
                        //                        try {
                        //                            item.write(storeFile);
                        //                        } catch (Exception ex) {
                        //                            Logger.getLogger(UploadController.class.getName()).log(Level.SEVERE, null, ex);
                        //                        }

                    }
                }

                PrintWriter writer = response.getWriter();
                writer.println("File uploaded.");
                writer.flush();
            }
        } catch (ParseException | FileUploadException | java.text.ParseException ex) {
            Logger.getLogger(UploadController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}