All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.techgap.common.offline.controller.OfflineManifestLoader Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
package it.techgap.common.offline.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.LinkedList;
import java.util.List;

public class OfflineManifestLoader extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            response.setContentType("text/cache-manifest");

            String dir = "WEB-INF";
            String realPath = request.getSession().getServletContext().getRealPath(dir);
            List cacheList = getCacheList(realPath, "app");

            List manifestContext = readFile(realPath + "/" + "offline.manifest.template");
            PrintWriter out = response.getWriter();
            boolean excludeListMode = false;
            List excludeList = new LinkedList<>();
            for (String manifestLine : manifestContext) {
                if ("# EXCLUDE LIST".equals(manifestLine))
                    excludeListMode = true;

                if (!excludeListMode)
                    out.append(manifestLine).append("\n");
                else {
                    if ("".equals(manifestLine.trim()))
                        excludeListMode = false;
                    else
                        excludeList.add(manifestLine.split("\\#")[1].trim());
                }

                if ("CACHE:".equals(manifestLine)) {
                    for (String file : cacheList) {
                        if (!excludeList.contains(file))
                            out.append(file).append("\n");
                    }
                }
            }
        } catch (Exception e) {
            throw new IOException(e);
        }
    }

    private List readFile(String pathFile) throws Exception {
        List fileContent = new LinkedList<>();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(pathFile));
            String line;
            while ((line = br.readLine()) != null)
                fileContent.add(line);
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                if (br != null)
                    br.close();
            } catch (Exception e) {
            }
        }
        return fileContent;
    }

    private List getCacheList(String realPath, String dir) throws IOException {
        List cacheList = new LinkedList<>();

        File contextRoot = new File(realPath + "/" + dir);
        List fileList = getFileList(contextRoot);
        for (String file : fileList) {
            String fileName = file.substring(realPath.length() + 1, file.length());
            fileName = URLEncoder.encode(fileName, "UTF-8");
            fileName = fileName.replaceAll("%2F", "/");
            fileName = fileName.replaceAll("\\+", "%20");
            cacheList.add(fileName);
        }
        return cacheList;
    }

    private List getFileList(File file) throws IOException {
        List fileList = new LinkedList<>();
        if (file != null && file.isDirectory()) {
            for (File subFile : file.listFiles())
                fileList.addAll(getFileList(subFile));
        } else
            fileList.add(file.getCanonicalPath());
        return fileList;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy