Java tutorial
/** * * Copyright (c) 2014 zhoushineyoung. All Rights Reserved. * * Licensed under the The MIT License (MIT); * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * */ package com.martin.zkedit.controller; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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.zookeeper.KeeperException; import com.martin.zkedit.dao.Dao; import com.martin.zkedit.utils.ServletUtil; import com.martin.zkedit.utils.ZooKeeperUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressWarnings("serial") @WebServlet(urlPatterns = { "/import" }) @MultipartConfig(fileSizeThreshold = 1024 * 1024 * 10, // 10 MB maxFileSize = 1024 * 1024 * 50, // 50 MB maxRequestSize = 1024 * 1024 * 100) // 100 MB public class Import extends HttpServlet { private final static Logger logger = LoggerFactory.getLogger(Import.class); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { logger.debug("Importing Action!"); try { Properties globalProps = (Properties) this.getServletContext().getAttribute("globalProps"); Dao dao = new Dao(globalProps); String zkServer = globalProps.getProperty("zkServer"); String[] zkServerLst = zkServer.split(","); StringBuilder sbFile = new StringBuilder(); String scmOverwrite = "false"; String scmServer = ""; String scmFilePath = ""; String scmFileRevision = ""; String uploadFileName = ""; DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1034); ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { if (item.getFieldName().equals("scmOverwrite")) { scmOverwrite = item.getString(); } if (item.getFieldName().equals("scmServer")) { scmServer = item.getString(); } if (item.getFieldName().equals("scmFilePath")) { scmFilePath = item.getString(); } if (item.getFieldName().equals("scmFileRevision")) { scmFileRevision = item.getString(); } } else { uploadFileName = item.getName(); sbFile.append(item.getString()); } } InputStream inpStream; if (sbFile.toString().length() == 0) { uploadFileName = scmServer + scmFileRevision + "@" + scmFilePath; logger.debug("P4 file Processing " + uploadFileName); dao.insertHistory((String) request.getSession().getAttribute("authName"), request.getRemoteAddr(), "Importing P4 File: " + uploadFileName + "<br/>" + "Overwrite: " + scmOverwrite); URL url = new URL(uploadFileName); URLConnection conn = url.openConnection(); inpStream = conn.getInputStream(); } else { logger.debug("Upload file Processing " + uploadFileName); dao.insertHistory((String) request.getSession().getAttribute("authName"), request.getRemoteAddr(), "Uploading File: " + uploadFileName + "<br/>" + "Overwrite: " + scmOverwrite); inpStream = new ByteArrayInputStream(sbFile.toString().getBytes()); } // open the stream and put it into BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(inpStream)); String inputLine; List<String> importFile = new ArrayList<>(); Integer lineCnt = 0; while ((inputLine = br.readLine()) != null) { lineCnt++; // Empty or comment? if (inputLine.trim().equals("") || inputLine.trim().startsWith("#")) { continue; } if (inputLine.startsWith("-")) { //DO nothing. } else if (!inputLine.matches("/.+=.+=.*")) { throw new IOException("Invalid format at line " + lineCnt + ": " + inputLine); } importFile.add(inputLine); } br.close(); ZooKeeperUtil.INSTANCE.importData(importFile, Boolean.valueOf(scmOverwrite), ServletUtil.INSTANCE.getZookeeper(request, response, zkServerLst[0])); for (String line : importFile) { if (line.startsWith("-")) { dao.insertHistory((String) request.getSession().getAttribute("authName"), request.getRemoteAddr(), "File: " + uploadFileName + ", Deleting Entry: " + line); } else { dao.insertHistory((String) request.getSession().getAttribute("authName"), request.getRemoteAddr(), "File: " + uploadFileName + ", Adding Entry: " + line); } } request.getSession().setAttribute("flashMsg", "Import Completed!"); response.sendRedirect("/home"); } catch (FileUploadException | IOException | InterruptedException | KeeperException ex) { ServletUtil.INSTANCE.renderError(request, response, ex.getMessage()); } } }