Java tutorial
/* * M2M ServiceFOTA ONM version 1.0 * * Copyright 2014 kt corp. All rights reserved. * * This is a proprietary software of kt corp, and you may not use this file except in * compliance with license agreement with kt corp. Any redistribution or use of this * software, with or without modification shall be strictly prohibited without prior written * approval of kt corp, and the copyright notice above does not evidence any actual or * intended publication of such software. */ package com.fota.commMgt.controller; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.json.MappingJacksonJsonView; import com.dgs.diffgen.PackageGenerator; import com.dgs.vo.CreateDdfFileInfoVo; import com.dgs.vo.DdfPkgVo; import com.fota.comm.util.FileDownloadManager; import com.fota.comm.util.VoV; import com.fota.commMgt.vo.UserLoginVO; import com.fota.firmMgt.service.FirmMgtSVC; import com.fota.firmMgt.vo.FirmSearchVO; //import java.util.Enumeration; //import javax.servlet.http.HttpSessionContext; import com.fota.fota3g.deviceSetupMgt.vo.FirmwareMgtDiffPackageDetailVo; import com.oreilly.servlet.MultipartRequest; @Controller @RequestMapping("/firmware") //@RequestMapping("/firmwareDownload" /* MenuMgtInterceptor ? * ?? Menu ? ? * MenuMgtInterceptor ? ? * ? ? ? ? */ public class FirmCTR { private static final Logger logger = LoggerFactory.getLogger(FirmCTR.class); /** * @uml.property name="firmSVC" * @uml.associationEnd readOnly="true" */ @Autowired FirmMgtSVC firmSVC; /** * @uml.property name="ajaxMainView" * @uml.associationEnd readOnly="true" */ @Autowired private MappingJacksonJsonView ajaxMainView; private static final String gSaveFilePath = "/firmwareDiff/"; // ?? : 100M private static final int MAX_FILE_SIZE = 100 * 1024 * 1024; private DdfPkgVo ddfPkgVo = new DdfPkgVo(); private List<File> destCurrentVerFirmList = new ArrayList<File>(); private List<File> destUpdateVerFirmList = new ArrayList<File>(); /** * Service FOTA * @param vo * @param model * @return */ @RequestMapping(value = "/download/service") public String download(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("firmSearchVO") FirmSearchVO vo, ModelMap model) throws Exception { // if (!request.getServletPath().equals("/firmwareDownload/service")) { // response.setStatus(403); // return null; // } Runtime.getRuntime().exec("sudo mount -t nfs 10.220.250.11:/vol/vol2/c-dms-pd1-w01 /home/jboss/firmware"); // ?? ? ? 2~3 sleep 3 Thread.sleep(3000); // validation check vo.setFirmwareVerId(VoV.valid(vo.getFirmwareVerId(), 30, 4)); //------------------- vo = firmSVC.getFileInfo(vo); String path = vo.getFilePath(); String filename = vo.getFileName(); FileDownloadManager fd = new FileDownloadManager(); fd.downloadExistFile2(path + filename, filename, response); Runtime.getRuntime().exec("sudo umount /home/jboss/firmware"); return null; } /** * 3G FOTA (DMS) * @param vo * @param model * @return */ @RequestMapping(value = "/download/dms") public String download(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("FirmwareMgtDiffPackageDetailVo") FirmwareMgtDiffPackageDetailVo vo, ModelMap model) throws Exception { // if (!request.getServletPath().equals("/firmwareDownload/dms")) { // response.setStatus(403); // return null; // } // logger.warn("firmCTR - download()\r\n" // + "diffPackageFile : " + vo.getDiffPackageFile() // ); String filePath = vo.getDiffPackageFile(); String[] filePathSplit = filePath.split("\\/"); // filePathSplit[0] : model name // filePathSplit[1] : file name ( tbl_firmware_diff ? diff_package_name ) // logger.warn("download path : " + gSaveFilePath + filePath // + " / model name : " + filePathSplit[0] // + " / file name : " + filePathSplit[1]); FileDownloadManager fd = new FileDownloadManager(); fd.downloadExistFile2(gSaveFilePath + filePath, filePathSplit[1], response); return null; } @RequestMapping(value = "/upload/submitCreateDdfPkg") @ResponseBody public ModelAndView createDdfFiles(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { // logger.warn("CreateDdfFileCTR - createDdfFiles() start \r\n"); String resultMsg = ""; // root ?? ? ? ? File rootDir = new File(gSaveFilePath); if (!rootDir.exists() || !rootDir.isDirectory()) { rootDir.mkdirs(); } // ? ?? String dirPath = gSaveFilePath + "ddfPkg/"; File dir = new File(dirPath); if (!dir.exists() || !dir.isDirectory()) { dir.mkdirs(); } String userId = ((UserLoginVO) request.getSession().getAttribute("userInfo")).getUserId(); // ?? String dirTempPath = gSaveFilePath + "ddfPkgTmp/" + userId + "/"; File dirTemp = new File(dirTempPath); if (!dirTemp.exists() || !dirTemp.isDirectory()) { dirTemp.mkdirs(); } // ??? ?? if (dirTemp.exists() && dirTemp.isDirectory()) { String[] tempFiles = dirTemp.list(); if (tempFiles != null) { for (int i = 0; i < tempFiles.length; i++) { String tempFileName = tempFiles[i]; File tempFile = new File(dirTempPath + tempFileName); if (tempFile.exists()) { tempFile.delete(); } } } } ///////// Diffgen ? ? start ////////// String diffGemPath = gSaveFilePath + "ddfPkg/" + "ori"; File diffGemDir = new File(diffGemPath); if (!diffGemDir.exists() || !diffGemDir.isDirectory()) { diffGemDir.mkdirs(); } diffGemPath = gSaveFilePath + "ddfPkg/" + "dest"; diffGemDir = new File(diffGemPath); if (!diffGemDir.exists() || !diffGemDir.isDirectory()) { diffGemDir.mkdirs(); } diffGemPath = gSaveFilePath + "ddfPkg/" + "diff"; diffGemDir = new File(diffGemPath); if (!diffGemDir.exists() || !diffGemDir.isDirectory()) { diffGemDir.mkdirs(); } diffGemPath = gSaveFilePath + "ddfPkg/" + "temp"; diffGemDir = new File(diffGemPath); if (!diffGemDir.exists() || !diffGemDir.isDirectory()) { diffGemDir.mkdirs(); } ///////// Diffgen ? ? end ////////// MultipartRequest multi = null; List<File> getCurrentVerFirmList = new ArrayList<File>(); List<File> getUpdateVerFirmList = new ArrayList<File>(); try { multi = new MultipartRequest(request, dirTempPath, MAX_FILE_SIZE, "utf-8"); String modelName = multi.getParameter("model"); int imgCnt = Integer.parseInt(multi.getParameter("imgCnt")); // logger.warn(" >>>>> Create Diff Pkg Vo Info 1 <<<<<\r\n" // + "model : " + modelName + ", imgCnt : " + imgCnt); ArrayList<CreateDdfFileInfoVo> ddfList = new ArrayList<CreateDdfFileInfoVo>(); CreateDdfFileInfoVo tempDdfVo = null; File currentTempFile = null; File updateTempFile = null; for (int i = 1; i <= imgCnt; i++) { tempDdfVo = new CreateDdfFileInfoVo(); tempDdfVo.setImageType(multi.getParameter("imageType" + i)); tempDdfVo.setCurrentVer(multi.getParameter("currentVer" + i)); tempDdfVo.setCurrentVerFirm(multi.getParameter("currentVerFirm" + i)); tempDdfVo.setCurrentVerFirmSize(multi.getParameter("currentVerFirm" + i + "Size")); tempDdfVo.setCurrentVerFirmPath(dirPath + tempDdfVo.getCurrentVerFirm()); tempDdfVo.setUpdateVer(multi.getParameter("updateVer" + i)); tempDdfVo.setUpdateVerFirm(multi.getParameter("updateVerFirm" + i)); tempDdfVo.setUpdateVerFirmSize(multi.getParameter("updateVerFirm" + i + "Size")); tempDdfVo.setUpdateVerFirmPath(dirPath + tempDdfVo.getUpdateVerFirm()); tempDdfVo.setDiffName(multi.getParameter("diffName" + i)); ddfList.add(tempDdfVo); // ??? currentTempFile = new File(dirTempPath + multi.getFilesystemName("currentVerFirm" + i + "File")); getCurrentVerFirmList.add(currentTempFile); updateTempFile = new File(dirTempPath + multi.getFilesystemName("updateVerFirm" + i + "File")); getUpdateVerFirmList.add(updateTempFile); // ?? ? ? ? // currentTempFile = new File(dirPath + multi.getFilesystemName("currentVerFirm" + i + "File")); // updateTempFile = new File(dirPath + multi.getFilesystemName("updateVerFirm" + i + "File")); // logger.warn(">>>>> Image Info [" + i + "]\r\n" // + "imageType : " + tempDdfVo.getImageType() + "\r\n" // + "currentVer : " + tempDdfVo.getCurrentVer() + "\r\n" // + "currentVerFirm : " + tempDdfVo.getCurrentVerFirm() + "\r\n" // + "currentVerFirmSize : " + tempDdfVo.getCurrentVerFirmSize() + "\r\n" // + "currentVerFirmPath : " + tempDdfVo.getCurrentVerFirmPath() + "\r\n" // + "updateVer : " + tempDdfVo.getUpdateVer() + "\r\n" // + "updateVerFirm : " + tempDdfVo.getUpdateVerFirm() + "\r\n" // + "updateVerFirmSize : " + tempDdfVo.getUpdateVerFirmSize() + "\r\n" // + "updateVerFirmPath : " + tempDdfVo.getUpdateVerFirmPath() + "\r\n" // + "diffName : " + tempDdfVo.getDiffName() + "\r\n" // + "------------------------------------------------------" // ); } destCurrentVerFirmList.clear(); destUpdateVerFirmList.clear(); // ??? for (int i = 0; i < imgCnt; i++) { currentTempFile = new File(dirPath + getCurrentVerFirmList.get(i).getName()); FileUtils.moveFile(getCurrentVerFirmList.get(i), currentTempFile); destCurrentVerFirmList.add(currentTempFile); updateTempFile = new File(dirPath + getUpdateVerFirmList.get(i).getName()); FileUtils.moveFile(getUpdateVerFirmList.get(i), updateTempFile); destUpdateVerFirmList.add(updateTempFile); } resultMsg = "1"; //////////////////////////////////////////////////////////////////////////////////////////// // ? DM ? ?? ... ddfPkgVo.setModel(modelName); if (ddfPkgVo.getImages() != null && ddfPkgVo.getImages().size() > 0) { ddfPkgVo.getImages().clear(); } ddfPkgVo.setImages(ddfList); // ? ?? ? // /jboss/lib/libJniDiffgen.so ?? PackageGenerator pkg = new PackageGenerator(); String diffDownPath = pkg.makeDiffPackage(ddfPkgVo); // String diffDownPath = "/firmwareDiff/ddfPkg/Download_TEST.txt"; String[] diffDownPathSplit = diffDownPath.split("\\/"); String diffDownFileName = diffDownPathSplit[diffDownPathSplit.length - 1]; String diffDownFilePath = ""; for (int i = 0; i < diffDownPathSplit.length - 1; i++) { diffDownFilePath += diffDownPathSplit[i] + "/"; } // logger.warn("file down..... name : " + diffDownFileName + ", path : " + diffDownFilePath + ", total : " + diffDownPath); // ?? ? for (int i = 0; i < destCurrentVerFirmList.size(); i++) { if (destCurrentVerFirmList.get(i) != null && destCurrentVerFirmList.get(i).exists()) { destCurrentVerFirmList.get(i).delete(); } } for (int i = 0; i < destUpdateVerFirmList.size(); i++) { if (destUpdateVerFirmList.get(i) != null && destUpdateVerFirmList.get(i).exists()) { destUpdateVerFirmList.get(i).delete(); } } // logger.warn("diff pkg process completed... so files delete"); model.addAttribute("diffDownPath", diffDownPath); } catch (Exception e) { // ?? // ??? ? ? if (getCurrentVerFirmList.size() > 0) { for (int i = 0; i < getCurrentVerFirmList.size(); i++) { if (getCurrentVerFirmList.get(i) != null && getCurrentVerFirmList.get(i).exists()) { getCurrentVerFirmList.get(i).delete(); } } } if (getUpdateVerFirmList.size() > 0) { for (int i = 0; i < getUpdateVerFirmList.size(); i++) { if (getUpdateVerFirmList.get(i) != null && getUpdateVerFirmList.get(i).exists()) { getUpdateVerFirmList.get(i).delete(); } } } logger.error("createDdfFiles() exception : " + e.getMessage()); // resultMsg = e.getMessage(); // if(resultMsg.indexOf("exceeds") != 0){ // model.addAttribute("resultMsg", resultMsg ); // } // resultMsg = "? ."; resultMsg = "0"; // logger.info("File update error : " + errorMSG); response.setStatus(500); } model.addAttribute("resultMsg", resultMsg); return new ModelAndView(ajaxMainView, model); } /** * 3G FOTA (DMS) * @param vo * @param model * @return */ @RequestMapping(value = "/download/dmsDiffPkg") public String downloadDmsDiffPkg(HttpServletRequest request, HttpServletResponse response, @ModelAttribute("FirmwareMgtDiffPackageDetailVo") FirmwareMgtDiffPackageDetailVo vo, ModelMap model) throws Exception { // if (!request.getServletPath().equals("/firmware/download/dmsDiffPkg")) { // response.setStatus(403); // return null; // } String filePath = vo.getDiffPackageFile(); String[] diffDownPathSplit = filePath.split("\\/"); String diffDownFileName = diffDownPathSplit[diffDownPathSplit.length - 1]; FileDownloadManager fd = new FileDownloadManager(); fd.downloadExistFile2(filePath, diffDownFileName, response); return null; } }