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

com.njzxw.compress_maven_plugin.merge.CompressMerge Maven / Gradle / Ivy

package com.njzxw.compress_maven_plugin.merge;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import com.njzxw.compress_maven_plugin.CompressAbs;
import com.njzxw.compress_maven_plugin.CompressMojo;
import java.io.FileInputStream;
import java.io.IOException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;

/**
 * 合并操作
 *
 * @author eliay
 *
 */
public class CompressMerge extends CompressAbs {

    public CompressMerge(CompressMojo compressMojo) {
        super(compressMojo);
    }

    @Override
    public void init() {
        int count = getCompressMojo().getMergeXmlFile().size();
        log.info("需要合并压缩的文件数量:" + count);
        if (getCompressMojo().getMergeXmlFile().size() >= getCompressMojo().getPoolNum()) {
            getCompressMojo().setLatch(new CountDownLatch(getCompressMojo().getPoolNum()));
        } else {
            getCompressMojo().setLatch(new CountDownLatch(count));
        }
    }

    @Override
    public void start() {
        int count = getCompressMojo().getMergeXmlFile().size();
        for (int j = 0; j < count; j++) {
            final File mergeXmlF = getCompressMojo().getMergeXmlFile().get(j);
            getCompressMojo().addPool(new Runnable() {
                @Override
                public void run() {
                    mergeFile(mergeXmlF);
                    getCompressMojo().getLatch().countDown();
                }
            });
            if ((j + 1) % getCompressMojo().getPoolNum() == 0) {
                try {
                    getCompressMojo().getLatch().await();
                    if (getCompressMojo().getMergeXmlFile().size() - (j + 1) >= getCompressMojo().getPoolNum()) {
                        getCompressMojo().setLatch(new CountDownLatch(getCompressMojo().getPoolNum()));
                    } else {
                        getCompressMojo().setLatch(new CountDownLatch(getCompressMojo().getMergeXmlFile().size() - (j + 1)));
                    }
                } catch (InterruptedException e) {
                    log.error("执行合并出现错误:" + mergeXmlF.getPath(), e);
                }
            }
        }
    }

    /**
     * 执行压缩操作,单个文件执行
     *
     * @param jsfile
     */
    private void mergeFile(File mergeFile) {
        String outpath = getCompressMojo().getOutDir().getPath() + getCompressMojo().orgFile(mergeFile.getPath());
        // 创建对应的输出文件夹路径
        checkDir(outpath);

        mergeFile(mergeFile, outpath);
    }

    private void mergeFile(File file, String outPath) {
        try {
            JAXBContext serverContext = JAXBContext.newInstance(MergeBean.class);
            Unmarshaller serverUnmarshaller = serverContext.createUnmarshaller();
            MergeBean mergeBean = (MergeBean) serverUnmarshaller.unmarshal(file);

            log.info("outPath:" + outPath + "file:" + file.getPath());
//            SAXReader reader = new SAXReader();
//            Document document = reader.read(file);
//            Element node = document.getRootElement();
//            List elementList = node.elements();
            for (int i = 0; i < mergeBean.getGroup().size(); i++) {
                String name = mergeBean.getGroup().get(i).getName();
                List jsList = mergeBean.getGroup().get(i).getJs();
                if(jsList != null){
                    mergeFileJsEl(name, jsList);
                }
                List cssList = mergeBean.getGroup().get(i).getCss();
                if(cssList != null){
                    mergeFileCssEl(name, cssList);
                }
//                mergeFileEl("css", name, cssElList);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void mergeFileJsEl(String name, List elList) {
        File jsOutDirFile = new File(getCompressMojo().getOutDir().getPath() + File.separator + getCompressMojo().getJsOutDir());
        if (!jsOutDirFile.exists()) {
            jsOutDirFile.mkdirs();
        }
        String path = getCompressMojo().getOutDir().getPath() + File.separator + getCompressMojo().getJsOutDir() + File.separator + name + ".js";

        File file = new File(path);
        OutputStreamWriter fw = null;
        InputStreamReader fr = null;
        BufferedReader br = null;
        try {
            file.createNewFile();
            fw = new OutputStreamWriter(new FileOutputStream(file), getCompressMojo().getEncoding());
            for (int i = 0; i < elList.size(); i++) {
                String spath = getCompressMojo().getSpath(elList.get(i).getPath());

                //log.debug("spath:" + spath);
                if (!"".equals(spath)) {
                    fr = new InputStreamReader(new FileInputStream(spath),
                            getCompressMojo().getEncoding());
                    br = new BufferedReader(fr);
                    String line = "";
                    while ((line = br.readLine()) != null) {
                        fw.write(line);
                        fw.write("\r\n");
                    }
                }
            }
            fw.flush();
        } catch (Exception e) {
            getCompressMojo().addErrorLog("合并出错:" + elList + " \n" + e.getMessage());
            log.error("合并出错:", e);
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    log.error("合并出错:", e);
                }
            }
            if (fr != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    log.error("合并出错:", e);
                }
            }
            if (fw != null) {
                try {
                    fw.close();
                } catch (Exception e) {
                    log.error("合并出错:", e);
                }
            }
        }
    }

    private void mergeFileCssEl(String name, List elList) {
        File cssOutDirFile = new File(getCompressMojo().getOutDir().getPath() + "/" + getCompressMojo().getCssOutDir());
        if (!cssOutDirFile.exists()) {
            cssOutDirFile.mkdirs();
        }
        String path = getCompressMojo().getOutDir().getPath() + File.separator + getCompressMojo().getCssOutDir() + File.separator + name + ".css";
        File file = new File(path);
        OutputStreamWriter fw = null;
        InputStreamReader fr = null;
        BufferedReader br = null;
        try {
            file.createNewFile();
            fw = new OutputStreamWriter(new FileOutputStream(file), getCompressMojo().getEncoding());
            
            for (int i = 0; i < elList.size(); i++) {
                String spath = getCompressMojo().getSpath(elList.get(i).getPath());

                //log.debug("spath:" + spath);
                if (!"".equals(spath)) {
                    fr = new InputStreamReader(new FileInputStream(spath),
                            getCompressMojo().getEncoding());
                    br = new BufferedReader(fr);
                    String line = "";
                    while ((line = br.readLine()) != null) {
                        fw.write(line);
                        fw.write("\r\n");
                    }
                }
            }
            fw.flush();
        } catch (Exception e) {
            getCompressMojo().addErrorLog("合并出错:" + elList + " \n" + e.getMessage());
            log.error("合并出错:", e);
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    log.error("合并出错:", e);
                }
            }
            if (fr != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    log.error("合并出错:", e);
                }
            }
            if (fw != null) {
                try {
                    fw.close();
                } catch (Exception e) {
                    log.error("合并出错:", e);
                }
            }
        }
    }

    /**
     * 检查文件路径是否存在,如果不存在就进行创建
     */
    private void checkDir(String outpath) {
        // 创建对应的输出文件夹路径
        File outDirFile = new File(outpath.substring(0,
                outpath.lastIndexOf(File.separator)));
        if (!outDirFile.exists()) {
            outDirFile.mkdirs();
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy