at.ac.tuwien.dsg.depic.depictool.uploader.InputSpecificationUploader.java Source code

Java tutorial

Introduction

Here is the source code for at.ac.tuwien.dsg.depic.depictool.uploader.InputSpecificationUploader.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 at.ac.tuwien.dsg.depic.depictool.uploader;

import at.ac.tuwien.dsg.depic.common.entity.dataanalyticsfunction.DataAnalyticsFunction;
import at.ac.tuwien.dsg.depic.common.entity.dataanalyticsfunction.DataAssetForm;
import at.ac.tuwien.dsg.depic.common.entity.primitiveaction.PrimitiveActionMetadata;
import at.ac.tuwien.dsg.depic.common.entity.runtime.DBType;
import at.ac.tuwien.dsg.depic.common.entity.qor.QoRModel;
import at.ac.tuwien.dsg.depic.common.repository.ElasticProcessRepositoryManager;
import at.ac.tuwien.dsg.depic.common.utils.JAXBUtils;
import at.ac.tuwien.dsg.depic.common.utils.YamlUtils;
import at.ac.tuwien.dsg.depic.depictool.generator.Generator;

import at.ac.tuwien.dsg.depic.depictool.utils.Configuration;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
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 javax.xml.bind.JAXBException;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;

/**
 *
 * @author Jun
 */
@WebServlet(name = "InputSpecificationUploader", urlPatterns = { "/InputSpecificationUploader" })
public class InputSpecificationUploader extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet InputSpecificationUploader</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet InputSpecificationUploader at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //process only if its multipart content

        String eDaaSName = "";
        DBType dbType = null;
        String qor = "";
        String daw = "";

        if (ServletFileUpload.isMultipartContent(request)) {
            try {
                List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

                for (FileItem item : multiparts) {
                    if (!item.isFormField()) {
                        String name = new File(item.getName()).getName();
                        // item.write( new File(UPLOAD_DIRECTORY + File.separator + name));

                        InputStream filecontent = item.getInputStream();

                        StringWriter writer = new StringWriter();
                        IOUtils.copy(filecontent, writer, "UTF-8");
                        String str = writer.toString();

                        //     String log = "item: " + item.getFieldName() + " - file name: " + name + " - content: " + str;

                        if (item.getFieldName().equals("qor")) {

                            qor = str;
                        }

                        if (item.getFieldName().equals("dataAnalyticsFunction")) {

                            daw = str;
                        }

                        //    Logger.getLogger(InputSpecificationUploader.class.getName()).log(Level.INFO, log);

                    } else {

                        String fieldname = item.getFieldName();
                        String fieldvalue = item.getString();
                        if (fieldname.equals("edaas")) {
                            eDaaSName = fieldvalue;
                        }

                        if (fieldname.equals("dbtype")) {
                            String typeStr = fieldvalue;

                            if (typeStr.equals(DBType.MYSQL.getDBType())) {
                                dbType = DBType.MYSQL;
                            } else if (typeStr.equals(DBType.CASSANDRA.getDBType())) {
                                dbType = DBType.CASSANDRA;
                            }
                        }

                    }
                }

                //File uploaded successfully
                request.setAttribute("message", "File Uploaded Successfully");
            } catch (Exception ex) {
                request.setAttribute("message", "File Upload Failed due to " + ex);
            }

        } else {
            request.setAttribute("message", "Sorry this Servlet only handles file upload request");
        }

        String log = "edaas: " + eDaaSName;
        log = log + "dbType: " + dbType + "\n";
        log = log + "qor: " + qor + "\n";
        log = log + "daf: " + daw + "\n";
        log = log + "" + "\n";

        QoRModel qoRModel = YamlUtils.unmarshallYaml(QoRModel.class, qor);
        DataAnalyticsFunction dataAnalyticsFunction = new DataAnalyticsFunction(eDaaSName,
                qoRModel.getDataAssetForm(), dbType, daw);

        Logger.getLogger(InputSpecificationUploader.class.getName()).log(Level.INFO, log);

        ElasticProcessRepositoryManager eprm = new ElasticProcessRepositoryManager(
                getClass().getProtectionDomain().getCodeSource().getLocation().getPath());

        String dafStr = "";

        try {
            dafStr = JAXBUtils.marshal(dataAnalyticsFunction, DataAnalyticsFunction.class);
        } catch (JAXBException ex) {
            Logger.getLogger(InputSpecificationUploader.class.getName()).log(Level.SEVERE, null, ex);
        }

        eprm.insertDaaS(eDaaSName);
        eprm.storeDAF(eDaaSName, dafStr);
        eprm.storeQoR(eDaaSName, qor);
        eprm.storeDBType(eDaaSName, dbType.getDBType());

        Generator generator = new Generator(dataAnalyticsFunction, qoRModel);
        generator.startGenerator();

        //  

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

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}