com.fota.commMgt.controller.FirmCTR.java Source code

Java tutorial

Introduction

Here is the source code for com.fota.commMgt.controller.FirmCTR.java

Source

/*
 * 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;
    }
}