org.openiot.gsn.http.ac.ParameterSet.java Source code

Java tutorial

Introduction

Here is the source code for org.openiot.gsn.http.ac.ParameterSet.java

Source

/**
*    Copyright (c) 2011-2014, OpenIoT
*   
*    This file is part of OpenIoT.
*
*    OpenIoT is free software: you can redistribute it and/or modify
*    it under the terms of the GNU Lesser General Public License as published by
*    the Free Software Foundation, version 3 of the License.
*
*    OpenIoT 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 Lesser General Public License for more details.
*
*    You should have received a copy of the GNU Lesser General Public License
*    along with OpenIoT.  If not, see <http://www.gnu.org/licenses/>.
*
*     Contact: OpenIoT mailto: info@openiot.eu
 * @author Behnaz Bostanipour
*/

package org.openiot.gsn.http.ac;
/**
 * Created by IntelliJ IDEA.
 * User: Behnaz Bostanipour
 * Date: Feb 15, 2010
 * Time: 12:38:44 PM
 * To change this template use File | Settings | File Templates.
 */

import com.oreilly.servlet.MultipartRequest;
import org.apache.log4j.Logger;
import org.apache.commons.io.FileUtils;

import java.io.*;
import java.util.*;

import javax.servlet.http.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/* this is a  class for using and processing the parameters of a http form */

public class ParameterSet {

    private Hashtable paramset;
    private MultipartRequest multipartreq;
    private static final int maxPostSize = 5 * 1024 * 1024;
    private static transient Logger logger = Logger.getLogger(ParameterSet.class);

    /****************************************** Constructors*******************************************/
    /*************************************************************************************************/

    /* constructor for processing parameters of a normal form */
    public ParameterSet(HttpServletRequest req) {
        paramset = new Hashtable();
        Enumeration myenum = req.getParameterNames();
        while (myenum.hasMoreElements()) {
            String name = (String) myenum.nextElement();
            String values[] = req.getParameterValues(name);
            if (values != null) {
                if (values.length <= 1) {
                    paramset.put(name, req.getParameter(name));

                }
            } else {
                paramset.put(name, req.getParameter(name));

            }
        }
    }

    /* constructor for processing parameters of a file uploading form */
    public ParameterSet(HttpServletRequest req, String saveDirectory) {
        try {
            this.multipartreq = new MultipartRequest(req, saveDirectory, maxPostSize);
            paramset = new Hashtable();
            Enumeration myenum = multipartreq.getParameterNames();
            while (myenum.hasMoreElements()) {
                String name = (String) myenum.nextElement();
                paramset.put(name, multipartreq.getParameter(name));
                //printHashtable(name);
            }
        } catch (Exception e) {

            logger.error("ERROR IN ParameterSet");
            logger.error(e.getMessage(), e);

        }

    }

    /****************************************** Methods *******************************************/
    /*************************************************************************************************/

    public void printHashtable(String name) {
        System.out.println("Param name = " + name + " value =  " + this.paramset.get(name));

    }

    boolean hasEmptyParameter() {
        return paramset.contains("");
    }

    /* given the name of the parameter, returns its value */
    String valueForName(String name) {
        return (String) paramset.get(name);

    }

    /* if a parameter has more than one value, given the name of the parameter, returns a Vector of its values */
    Vector getValuesForParam(String paramname, HttpServletRequest req) {
        String values[] = req.getParameterValues(paramname);
        Vector vector = new Vector();
        if (values != null) {
            for (int i = 0; i < values.length; i++) {
                vector.add(values[i]);
            }
        }
        return vector;

    }

    /* make a DataSource(virtual sensor name, access right) object using parameters of a file uploading form */
    public DataSource fileUploader(String vsname, String saveDirectory) {
        DataSource ds = null;
        String name = null;
        String filename = null;
        String filetype = null;
        File file = null;
        try {
            Enumeration filesEnum = this.multipartreq.getFileNames();
            while (filesEnum.hasMoreElements()) {
                name = (String) filesEnum.nextElement();
                filename = this.multipartreq.getFilesystemName(name);
                filetype = this.multipartreq.getContentType(name);
                file = this.multipartreq.getFile(name);

                if (filename != null && filetype != null) { //rename the name of the Virtual Sensor to the unique name
                                                            //logger.info("filename " + filename);
                                                            //logger.info("name " + name);
                                                            //logger.info("abs path " + file.getAbsolutePath());
                    changeSensorName(file.getAbsolutePath(), vsname);
                    String newFilePath = file.getAbsolutePath().replace(file.getName(), "") + vsname + ".xml";
                    File newFile = new File(newFilePath);

                    try {
                        FileUtils.moveFile(file, newFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    ds = new DataSource(vsname, "4", vsname + ".xml", filetype, saveDirectory);
                }
                if (file != null) {
                    logger.info("length: " + file.length());
                }
            }
        } catch (Exception e) {
            logger.error("ERROR IN fileUploader Method");
            logger.error(e.getMessage(), e);

        }
        return ds;
    }

    private static void changeSensorName(String filepath, String name) {
        File f = new File(filepath);

        Pattern pat = Pattern.compile("name[\\s]*=[\\s]*\"[\\s]*[\\S]+[\\s]*\"");
        Matcher match;
        FileInputStream fs = null;
        InputStreamReader in = null;
        BufferedReader br = null;

        StringBuffer sb = new StringBuffer();
        String textinLine;

        try {
            fs = new FileInputStream(f);
            in = new InputStreamReader(fs);
            br = new BufferedReader(in);

            while (true) {
                textinLine = br.readLine();
                if (textinLine == null)
                    break;
                if (textinLine.contains("<virtual-sensor")) {
                    match = pat.matcher(textinLine);
                    match.find();
                    textinLine = match.replaceFirst("name=\"" + name + "\"");
                }
                sb.append(textinLine + "\n");
            }
            fs.close();
            in.close();
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            FileWriter fstream = new FileWriter(f); // write file again
            BufferedWriter outobj = new BufferedWriter(fstream);
            outobj.write(sb.toString());
            outobj.close();

        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }

}