Search in sources :

Example 1 with CSVReader

use of jp.ossc.nimbus.io.CSVReader in project nimbus by nimbus-org.

the class CSVCompareEvaluateActionService method execute.

/**
 * 2つのCSVファイルを比較して、内容が等価かどうか評価する。<p>
 * リソースのフォーマットは、以下。<br>
 * <pre>
 * srcFilePath
 * dstFilePath
 * ignoreCSVElements
 * </pre>
 * srcFilePathは、比較元のCSVファイルのパスを指定する。<br>
 * dstFilePathは、比較先のCSVファイルのパスを指定する。ここで指定したファイルが存在しない場合は、比較を行わずにtrueを返す。<br>
 * ignoreCSVElementsは、比較時に無視するCSV要素を要素名または要素インデックスで指定する。要素名を指定する場合は、CSVファイルの一行目にCSV要素名ヘッダ行が必要である。要素インデックスは、0から開始する。複数指定する場合は、カンマ区切りで指定する。<br>
 *
 * @param context コンテキスト
 * @param actionId アクションID
 * @param resource リソース
 * @return 比較結果が等しい場合は、true
 */
public boolean execute(TestContext context, String actionId, Reader resource) throws Exception {
    BufferedReader br = new BufferedReader(resource);
    File srcFile = null;
    File dstFile = null;
    int[] ignoreIndexes = null;
    String[] ignoreNames = null;
    try {
        final String srcFilePath = br.readLine();
        if (srcFilePath == null) {
            throw new Exception("Unexpected EOF on srcFilePath");
        }
        final String dstFilePath = br.readLine();
        if (dstFilePath == null) {
            throw new Exception("Unexpected EOF on dstFilePath");
        }
        srcFile = new File(srcFilePath);
        if (!srcFile.exists()) {
            srcFile = new File(context.getCurrentDirectory(), srcFilePath);
        }
        if (!srcFile.exists()) {
            throw new Exception("File not found. srcFilePath=" + srcFilePath);
        }
        dstFile = new File(dstFilePath);
        if (!dstFile.exists()) {
            dstFile = new File(context.getCurrentDirectory(), dstFilePath);
        }
        if (!dstFile.exists()) {
            return !isResultNGOnNotFoundDestFile;
        }
        String ignoreCSVElementsStr = br.readLine();
        if (ignoreCSVElementsStr != null) {
            final String[] ignoreCSVElements = CSVReader.toArray(ignoreCSVElementsStr, ',', '\\', '"', "null", "#", false, false, true, false);
            if (ignoreCSVElements != null && ignoreCSVElements.length != 0) {
                try {
                    ignoreIndexes = new int[ignoreCSVElements.length];
                    for (int i = 0; i < ignoreCSVElements.length; i++) {
                        ignoreIndexes[i] = Integer.parseInt(ignoreCSVElements[i]);
                    }
                } catch (NumberFormatException e) {
                    ignoreNames = ignoreCSVElements;
                    ignoreIndexes = null;
                }
            }
        }
    } finally {
        br.close();
        br = null;
    }
    InputStreamReader srcisr = null;
    InputStreamReader dstisr = null;
    CSVReader srccsvr = null;
    CSVReader dstcsvr = null;
    OutputStreamWriter srcosw = null;
    OutputStreamWriter dstosw = null;
    CSVWriter srccsvw = null;
    CSVWriter dstcsvw = null;
    boolean result = true;
    try {
        srcisr = fileEncoding == null ? new InputStreamReader(new FileInputStream(srcFile)) : new InputStreamReader(new FileInputStream(srcFile), fileEncoding);
        dstisr = fileEncoding == null ? new InputStreamReader(new FileInputStream(dstFile)) : new InputStreamReader(new FileInputStream(dstFile), fileEncoding);
        srccsvr = csvReader == null ? new CSVReader() : csvReader.cloneReader();
        dstcsvr = csvReader == null ? new CSVReader() : csvReader.cloneReader();
        srccsvr.setReader(srcisr);
        dstcsvr.setReader(dstisr);
        if (isOutputFileAfterEdit) {
            File editSrcFile = new File(srcFile.getPath() + fileAfterEditExtention);
            File editDstFile = new File(dstFile.getPath() + fileAfterEditExtention);
            srcosw = fileEncoding == null ? new OutputStreamWriter(new FileOutputStream(editSrcFile)) : new OutputStreamWriter(new FileOutputStream(editSrcFile), fileEncoding);
            dstosw = fileEncoding == null ? new OutputStreamWriter(new FileOutputStream(editDstFile)) : new OutputStreamWriter(new FileOutputStream(editDstFile), fileEncoding);
            srccsvw = csvWriter == null ? new CSVWriter() : csvWriter.cloneWriter();
            dstcsvw = csvWriter == null ? new CSVWriter() : csvWriter.cloneWriter();
            srccsvw.setWriter(srcosw);
            dstcsvw.setWriter(dstosw);
        }
        List srccsv = new ArrayList();
        List dstcsv = new ArrayList();
        boolean[] ignores = null;
        if (ignoreNames != null && ignoreNames.length != 0) {
            Set ignoreNameSet = new HashSet();
            for (int i = 0; i < ignoreNames.length; i++) {
                ignoreNameSet.add(ignoreNames[i]);
            }
            srccsv = srccsvr.readCSVLineList(srccsv);
            if (srccsv != null && srccsv.size() != 0) {
                ignores = new boolean[srccsv.size()];
                for (int i = 0; i < srccsv.size(); i++) {
                    ignores[i] = ignoreNameSet.contains(srccsv.get(i));
                }
            }
            if (isOutputFileAfterEdit) {
                writeCSV(srccsvw, srccsv, ignores);
            }
            dstcsv = dstcsvr.readCSVLineList(dstcsv);
            if (isOutputFileAfterEdit) {
                writeCSV(dstcsvw, dstcsv, ignores);
            }
            if (!compareCSVList(srccsv, dstcsv, ignores)) {
                return false;
            }
        } else if (ignoreIndexes != null && ignoreIndexes.length != 0) {
            srccsv = srccsvr.readCSVLineList(srccsv);
            if (srccsv != null && srccsv.size() != 0) {
                ignores = new boolean[srccsv.size()];
                for (int i = 0, imax = ignoreIndexes.length; i < imax; i++) {
                    if (ignores.length > ignoreIndexes[i]) {
                        ignores[ignoreIndexes[i]] = true;
                    }
                }
            }
            if (isOutputFileAfterEdit) {
                writeCSV(srccsvw, srccsv, ignores);
            }
            dstcsv = dstcsvr.readCSVLineList(dstcsv);
            if (isOutputFileAfterEdit) {
                writeCSV(dstcsvw, dstcsv, ignores);
            }
            if (!compareCSVList(srccsv, dstcsv, ignores)) {
                return false;
            }
        }
        do {
            if (srccsv != null) {
                srccsv = srccsvr.readCSVLineList(srccsv);
            }
            if (dstcsv != null) {
                dstcsv = dstcsvr.readCSVLineList(dstcsv);
            }
            if (isOutputFileAfterEdit) {
                writeCSV(srccsvw, srccsv, ignores);
                writeCSV(dstcsvw, dstcsv, ignores);
            }
            result &= compareCSVList(srccsv, dstcsv, ignores);
        } while (isOutputFileAfterEdit ? (srccsv != null || dstcsv != null) : result);
    } finally {
        if (srcisr != null) {
            try {
                srcisr.close();
            } catch (IOException e) {
            }
        }
        if (dstisr != null) {
            try {
                dstisr.close();
            } catch (IOException e) {
            }
        }
        if (srccsvr != null) {
            try {
                srccsvr.close();
            } catch (IOException e) {
            }
        }
        if (dstcsvr != null) {
            try {
                dstcsvr.close();
            } catch (IOException e) {
            }
        }
        if (isOutputFileAfterEdit) {
            srccsvw.flush();
            dstcsvw.flush();
        }
        if (srcosw != null) {
            try {
                srcosw.close();
            } catch (IOException e) {
            }
        }
        if (dstosw != null) {
            try {
                dstosw.close();
            } catch (IOException e) {
            }
        }
        if (srccsvw != null) {
            try {
                srccsvw.close();
            } catch (IOException e) {
            }
        }
        if (dstcsvw != null) {
            try {
                dstcsvw.close();
            } catch (IOException e) {
            }
        }
    }
    return result;
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) InputStreamReader(java.io.InputStreamReader) CSVReader(jp.ossc.nimbus.io.CSVReader) ArrayList(java.util.ArrayList) CSVWriter(jp.ossc.nimbus.io.CSVWriter) IOException(java.io.IOException) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) FileOutputStream(java.io.FileOutputStream) BufferedReader(java.io.BufferedReader) OutputStreamWriter(java.io.OutputStreamWriter) ArrayList(java.util.ArrayList) List(java.util.List) File(java.io.File) HashSet(java.util.HashSet)

Example 2 with CSVReader

use of jp.ossc.nimbus.io.CSVReader in project nimbus by nimbus-org.

the class VelocityTemplateEngineService method transform.

/**
 * テンプレートファイルとデータファイルを読み込んで、変換を行い出力ファイルに書き出す。<p>
 * テンプレートファイルは、Apache VelocityのVTL(Velocity Template Language)で記述する。<br>
 * データファイルは、VTLで参照するオブジェクトを、2種類の記述方法を混在させて、複数記述できる。<br>
 * 1つは、プロパティ形式で、"変数名=値"で指定する。複数指定する場合は、改行して記述する。<br>
 * もう1つは、CSV形式で、1行目に変数名、2行目にプロパティ名、3行目以降に値を記述する。プロパティ名は、CSV形式で1行のみ記述する。値は、CSV形式で複数行記述できる。値の行の終端を示すには、空行を挿入する。この変数を参照すると、指定した値の行数分のListで、その要素には、プロパティ名と値が格納されたMapが格納されている。<br>
 *
 * @param tmplateFile テンプレートファイル
 * @param dataFile データファイル
 * @param outputFile 出力ファイル
 * @param encoding 文字エンコーディング。テンプレートファイル、データファイルは、同じ文字エンコーディングである必要があり、出力ファイルも、この文字エンコーディングとなる。
 * @exception Exception 変換に失敗した場合
 */
public void transform(File tmplateFile, File dataFile, File outputFile, String encoding) throws Exception {
    if (dataFile == null) {
        final FileInputStream fis = new FileInputStream(templateResourceDirectory == null ? tmplateFile : new File(templateResourceDirectory, tmplateFile.getPath()));
        final FileOutputStream fos = new FileOutputStream(outputFile);
        try {
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = fis.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }
        } finally {
            fis.close();
            fos.close();
        }
    } else {
        Template template = encoding == null ? engine.getTemplate(tmplateFile.getPath()) : engine.getTemplate(tmplateFile.getPath(), encoding);
        Context context = new VelocityContext();
        CSVReader reader = csvReader == null ? new CSVReader() : csvReader.cloneReader();
        reader.setReader(encoding == null ? new FileReader(dataFile) : new InputStreamReader(new FileInputStream(dataFile), encoding));
        try {
            String line = null;
            while ((line = reader.readLine()) != null) {
                if (line.length() == 0) {
                    continue;
                }
                final int index = line.indexOf("=");
                if (index == -1) {
                    String name = line;
                    String[] propNames = reader.readCSVLine();
                    List propValues = null;
                    List records = new ArrayList();
                    while ((propValues = reader.readCSVLineList(propValues)) != null && propValues.size() != 0) {
                        Map record = new HashMap();
                        for (int i = 0; i < propNames.length; i++) {
                            String value = replaceProperty((String) propValues.get(i));
                            record.put(propNames[i], value);
                        }
                        records.add(record);
                    }
                    context.put(name, records);
                } else {
                    String value = replaceProperty(line.substring(index + 1));
                    context.put(line.substring(0, index), value);
                }
            }
        } finally {
            reader.close();
            reader = null;
        }
        Writer writer = encoding == null ? new FileWriter(outputFile) : new OutputStreamWriter(new FileOutputStream(outputFile), encoding);
        try {
            template.merge(context, writer);
        } finally {
            writer.close();
            writer = null;
        }
    }
}
Also used : VelocityContext(org.apache.velocity.VelocityContext) Context(org.apache.velocity.context.Context) InputStreamReader(java.io.InputStreamReader) CSVReader(jp.ossc.nimbus.io.CSVReader) HashMap(java.util.HashMap) VelocityContext(org.apache.velocity.VelocityContext) FileWriter(java.io.FileWriter) ArrayList(java.util.ArrayList) FileInputStream(java.io.FileInputStream) Template(org.apache.velocity.Template) FileOutputStream(java.io.FileOutputStream) FileReader(java.io.FileReader) ArrayList(java.util.ArrayList) List(java.util.List) OutputStreamWriter(java.io.OutputStreamWriter) File(java.io.File) HashMap(java.util.HashMap) Map(java.util.Map) FileWriter(java.io.FileWriter) Writer(java.io.Writer) OutputStreamWriter(java.io.OutputStreamWriter)

Aggregations

File (java.io.File)2 FileInputStream (java.io.FileInputStream)2 FileOutputStream (java.io.FileOutputStream)2 InputStreamReader (java.io.InputStreamReader)2 OutputStreamWriter (java.io.OutputStreamWriter)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 CSVReader (jp.ossc.nimbus.io.CSVReader)2 BufferedReader (java.io.BufferedReader)1 FileReader (java.io.FileReader)1 FileWriter (java.io.FileWriter)1 IOException (java.io.IOException)1 Writer (java.io.Writer)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 Set (java.util.Set)1 CSVWriter (jp.ossc.nimbus.io.CSVWriter)1 Template (org.apache.velocity.Template)1 VelocityContext (org.apache.velocity.VelocityContext)1