@@ -49,59 +49,61 @@ if(resources.isDirectory()) {
4949 * @throws RuntimeException If an {@link IOException} occurs while processing the ZIP or CSV files.
5050 */
5151def sortRules (File rulesZip ) {
52- def settings = new CsvParserSettings ()
53- def zip = new ZipFile (rulesZip)
54- def entries = zip. entries()
55- def entryMap = new HashMap<String , List<Row > > ()
56- def entryHashMap = new HashMap<String , byte[]> ()
57- while (entries. hasMoreElements()) {
58- ZipEntry entry = entries. nextElement()
59- if (entry. getName(). endsWith(" .csv" ) && ! entry. isDirectory()) {
60- log. info " \t Sorting " + entry. getName()
61- def rows = new ArrayList<Row > ()
62- MessageDigest md = MessageDigest . getInstance(" MD5" )
63- try (DigestInputStream dis = new DigestInputStream (zip. getInputStream(entry), md)
64- def reader = new InputStreamReader (dis, UTF_8 )
65- def br = new BufferedReader (reader)) {
52+ def settings = new CsvParserSettings (lineSeparatorDetectionEnabled : true )
53+ boolean hasChanges = false
54+ def sortedZip = File . createTempFile(" browscap-" , " .zip" )
55+ try (def zip = new ZipFile (rulesZip)) {
56+ def entries = zip. entries()
57+ def entryMap = new HashMap<String , List<Row > > ()
58+ def entryHashMap = new HashMap<String , byte[]> ()
59+ while (entries. hasMoreElements()) {
60+ ZipEntry entry = entries. nextElement()
61+ if (entry. getName(). endsWith(" .csv" ) && ! entry. isDirectory()) {
62+ log. info " \t Sorting " + entry. getName()
63+ def rows = new ArrayList<Row > ()
64+ MessageDigest md = MessageDigest . getInstance(" MD5" )
65+ try (DigestInputStream dis = new DigestInputStream (zip. getInputStream(entry), md)
66+ def reader = new InputStreamReader (dis, UTF_8 )
67+ def br = new BufferedReader (reader)) {
6668
67- def csvParser = new CsvParser (settings)
68- csvParser. beginParsing(br)
69- Record record
70- while ((record = csvParser. parseNextRecord()) != null ) {
71- rows. add(new Row (record. getString(0 ), record))
69+ def csvParser = new CsvParser (settings)
70+ csvParser. beginParsing(br)
71+ Record record
72+ while ((record = csvParser. parseNextRecord()) != null ) {
73+ rows. add(new Row (record. getString(0 ), record))
74+ }
75+ } catch (IOException e) {
76+ throw new RuntimeException (e)
7277 }
73- } catch (IOException e) {
74- throw new RuntimeException (e)
75- }
7678
77- // Sorting rows by pattern length in descending order, then by the pattern value
78- rows. sort { r1 , r2 ->
79- r2. pattern. length() <=> r1. pattern. length() ?: r1. pattern <=> r2. pattern
80- }
79+ // Sorting rows by pattern length in descending order, then by the pattern value
80+ rows. sort { r1 , r2 ->
81+ r2. pattern. length() <=> r1. pattern. length() ?: r1. pattern <=> r2. pattern
82+ }
8183
82- entryMap. put(entry. getName(), rows)
83- entryHashMap. put(entry. getName(), md. digest())
84+ entryMap. put(entry. getName(), rows)
85+ entryHashMap. put(entry. getName(), md. digest())
86+ }
8487 }
85- }
86- def sortedZip = File . createTempFile(" browscap-" , " .zip" )
87- def writerSettings = new CsvWriterSettings ()
88- MessageDigest md = MessageDigest . getInstance(" MD5" )
89- boolean hasChanges = false
90- try (def fos = new FileOutputStream (sortedZip)
91- def zipOut = new ZipOutputStream (fos)
92- def dig = new DigestOutputStream (zipOut, md)
93- def writer = new OutputStreamWriter (dig, UTF_8 )) {
94- for (def csvEntry : entryMap. entrySet()) {
95- def outCsv = new ZipEntry (csvEntry. getKey())
96- zipOut. putNextEntry(outCsv)
88+ def writerSettings = new CsvWriterSettings ()
89+ MessageDigest md = MessageDigest . getInstance(" MD5" )
9790
98- def csvWriter = new CsvWriter (writer, writerSettings)
99- csvEntry. getValue(). each { row ->
100- csvWriter. writeRow(row. record. values)
101- }
102- csvWriter. flush()
103- if (! Arrays . equals(entryHashMap. get(csvEntry. getKey()), md. digest())) {
104- hasChanges = true
91+ try (def fos = new FileOutputStream (sortedZip)
92+ def zipOut = new ZipOutputStream (fos)
93+ def dig = new DigestOutputStream (zipOut, md)
94+ def writer = new OutputStreamWriter (dig, UTF_8 )) {
95+ for (def csvEntry : entryMap. entrySet()) {
96+ def outCsv = new ZipEntry (csvEntry. getKey())
97+ zipOut. putNextEntry(outCsv)
98+
99+ def csvWriter = new CsvWriter (writer, writerSettings)
100+ csvEntry. getValue(). each { row ->
101+ csvWriter. writeRow(row. record. values)
102+ }
103+ csvWriter. flush()
104+ if (! Arrays . equals(entryHashMap. get(csvEntry. getKey()), md. digest())) {
105+ hasChanges = true
106+ }
105107 }
106108 }
107109 }
0 commit comments