Commit | Line | Data |
---|---|---|
a3b510ab NR |
1 | package be.nikiroo.jvcard.parsers; |
2 | ||
3 | import java.util.LinkedList; | |
4 | import java.util.List; | |
5 | ||
6 | import be.nikiroo.jvcard.Card; | |
7 | import be.nikiroo.jvcard.Contact; | |
8 | import be.nikiroo.jvcard.Data; | |
9 | ||
10 | public class AbookParser { | |
11 | public static List<Contact> parse(List<String> lines) { | |
12 | List<Contact> contacts = new LinkedList<Contact>(); | |
78e4af97 | 13 | |
a3b510ab NR |
14 | for (String line : lines) { |
15 | List<Data> content = new LinkedList<Data>(); | |
16 | ||
17 | String tab[] = line.split("\t"); | |
18 | ||
19 | if (tab.length >= 1) | |
20 | content.add(new Data(null, "NICKNAME", tab[0].trim(), null)); | |
21 | if (tab.length >= 2) | |
22 | content.add(new Data(null, "FN", tab[1].trim(), null)); | |
23 | if (tab.length >= 3) | |
24 | content.add(new Data(null, "EMAIL", tab[2].trim(), null)); | |
25 | if (tab.length >= 4) | |
26 | content.add(new Data(null, "X-FCC", tab[3].trim(), null)); | |
27 | if (tab.length >= 5) | |
28 | content.add(new Data(null, "NOTE", tab[4].trim(), null)); | |
29 | ||
30 | contacts.add(new Contact(content)); | |
31 | } | |
32 | ||
33 | return contacts; | |
34 | } | |
35 | ||
36 | // -1 = no bkeys | |
37 | public static String toString(Contact contact, int startingBKey) { | |
38 | // BKey is not used in pine mode | |
39 | ||
40 | StringBuilder builder = new StringBuilder(); | |
41 | ||
42 | String nick = contact.getPreferredDataValue("NICKNAME"); | |
43 | if (nick != null) { | |
44 | nick = nick.replaceAll(" ", "_"); | |
45 | nick = nick.replaceAll(",", "-"); | |
46 | nick = nick.replaceAll("@", "(a)"); | |
47 | nick = nick.replaceAll("\"", "'"); | |
48 | nick = nick.replaceAll(";", "."); | |
49 | nick = nick.replaceAll(":", "="); | |
50 | nick = nick.replaceAll("[()\\[\\]<>\\\\]", "/"); | |
51 | ||
52 | builder.append(nick); | |
53 | } | |
54 | ||
55 | builder.append('\t'); | |
56 | ||
57 | String fn = contact.getPreferredDataValue("FN"); | |
58 | if (fn != null) | |
59 | builder.append(fn); | |
60 | ||
61 | builder.append('\t'); | |
62 | ||
63 | String email = contact.getPreferredDataValue("EMAIL"); | |
64 | if (email != null) | |
65 | builder.append(email); | |
66 | ||
67 | // optional fields follow: | |
68 | ||
69 | String xfcc = contact.getPreferredDataValue("X-FCC"); | |
70 | if (xfcc != null) { | |
71 | builder.append('\t'); | |
72 | builder.append(xfcc); | |
73 | } | |
74 | ||
75 | String notes = contact.getPreferredDataValue("NOTE"); | |
76 | if (notes != null) { | |
77 | if (xfcc == null) | |
78 | builder.append('\t'); | |
79 | ||
80 | builder.append('\t'); | |
81 | builder.append(notes); | |
82 | } | |
83 | ||
84 | // note: save as pine means normal LN, nor CRLN | |
85 | builder.append('\n'); | |
78e4af97 | 86 | |
a3b510ab NR |
87 | return builder.toString(); |
88 | } | |
89 | ||
90 | public static String toString(Card card) { | |
91 | StringBuilder builder = new StringBuilder(); | |
92 | ||
78e4af97 NR |
93 | for (int index = 0; index < card.size(); index++) { |
94 | builder.append(toString(card.get(index), -1)); | |
a3b510ab NR |
95 | } |
96 | ||
97 | return builder.toString(); | |
98 | } | |
99 | } |