xref: /aosp_15_r20/external/cldr/tools/cldr-rdf/src/main/java/org/unicode/cldr/rdf/TsvWriter.java (revision 912701f9769bb47905792267661f0baf2b85bed5)
1 package org.unicode.cldr.rdf;
2 
3 import com.google.common.collect.Multimap;
4 import java.io.File;
5 import java.io.IOException;
6 import java.io.PrintWriter;
7 import java.util.Map;
8 import org.unicode.cldr.draft.FileUtilities;
9 import org.unicode.cldr.util.CLDRConfig;
10 
11 /** Utility to aid in writing .tsv files */
12 public class TsvWriter {
13     /**
14      * Write a Multimap as a tsv with pairs
15      *
16      * @param fn filename
17      * @param map
18      * @param k key column name
19      * @param v value column name
20      * @throws IOException
21      */
writeTsv(String fn, Multimap<String, String> map, String k, String v)22     public static void writeTsv(String fn, Multimap<String, String> map, String k, String v)
23             throws IOException {
24         System.out.println("Writing " + fn);
25         try (PrintWriter w = FileUtilities.openUTF8Writer(getTsvDir(), fn)) {
26             writeRow(w, k, v); // header
27             map.entries().forEach(e -> writeRow(w, e.getKey(), e.getValue()));
28         }
29     }
30 
31     /**
32      * Write a Map as a tsv with pairs
33      *
34      * @param fn filename
35      * @param map
36      * @param k key column name
37      * @param v value column name
38      * @throws IOException
39      */
writeTsv(String fn, Map<String, String> map, String k, String v)40     public static void writeTsv(String fn, Map<String, String> map, String k, String v)
41             throws IOException {
42         System.out.println("Writing " + fn);
43         try (PrintWriter w = FileUtilities.openUTF8Writer(getTsvDir(), fn)) {
44             writeRow(w, k, v); // header
45             map.entrySet().forEach(e -> writeRow(w, e.getKey(), e.getValue()));
46         }
47     }
48 
getTsvDir()49     public static File getTsvDir() {
50         File base = CLDRConfig.getInstance().getCldrBaseDirectory();
51         File tsvDir = new File(base, "tools/cldr-rdf/external");
52         tsvDir.mkdirs();
53         return tsvDir;
54     }
55 
56     /**
57      * Write a TSV row
58      *
59      * @param w stream to write to
60      * @param elements columns to write
61      */
writeRow(PrintWriter w, CharSequence... elements)62     public static void writeRow(PrintWriter w, CharSequence... elements) {
63         w.println(String.join("\t", elements));
64     }
65 }
66