Java tutorial
/** * Global Sensor Networks (GSN) Source Code * Copyright (c) 2006-2014, Ecole Polytechnique Federale de Lausanne (EPFL) * * This file is part of GSN. * * GSN is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSN 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSN. If not, see <http://www.gnu.org/licenses/>. * * File: src/gsn/http/ac/ParameterSet.java * * @author Behnaz Bostanipour * */ package 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.slf4j.LoggerFactory; import org.slf4j.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 = LoggerFactory.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 *******************************************/ /*************************************************************************************************/ 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) { logger.error(e.getMessage(), e); } 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) { logger.error(e.getMessage(), e); } catch (IOException e) { logger.error(e.getMessage(), e); } try { FileWriter fstream = new FileWriter(f); // write file again BufferedWriter outobj = new BufferedWriter(fstream); outobj.write(sb.toString()); outobj.close(); } catch (Exception e) { logger.error(e.getMessage(), e); } } }