Some fixes (crash when adding raw "x=" field, "dirty" handling)
[jvcard.git] / src / be / nikiroo / jvcard / parsers / Parser.java
1 package be.nikiroo.jvcard.parsers;
2
3 import java.security.InvalidParameterException;
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 Parser {
11
12 public static List<Contact> parse(List<String> lines, Format format) {
13 switch (format) {
14 case VCard21:
15 return Vcard21Parser.parse(lines);
16 case Abook:
17 return AbookParser.parse(lines);
18
19 default:
20 throw new InvalidParameterException("Unknown format: "
21 + format.toString());
22 }
23 }
24
25 // -1 = no bkeys
26 public static String toString(Card card, Format format) {
27 switch (format) {
28 case VCard21:
29 return Vcard21Parser.toString(card);
30 case Abook:
31 return AbookParser.toString(card);
32
33 default:
34 throw new InvalidParameterException("Unknown format: "
35 + format.toString());
36 }
37 }
38
39 // -1 = no bkeys
40 public static String toString(Contact contact, Format format,
41 int startingBKey) {
42 switch (format) {
43 case VCard21:
44 return Vcard21Parser.toString(contact, startingBKey);
45 case Abook:
46 return AbookParser.toString(contact, startingBKey);
47
48 default:
49 throw new InvalidParameterException("Unknown format: "
50 + format.toString());
51 }
52 }
53
54 // return -1 if no bkey
55 public static int getBKey(Data data) {
56 if (data.isBinary() && data.getValue().startsWith("<HIDDEN_")) {
57 try {
58 int bkey = Integer.parseInt(data.getValue()
59 .replace("<HIDDEN_", "").replace(">", ""));
60 if (bkey < 0)
61 throw new InvalidParameterException(
62 "All bkeys MUST be positive");
63 return bkey;
64 } catch (NumberFormatException nfe) {
65 }
66 }
67
68 return -1;
69 }
70
71 static String generateBKeyString(int bkey) {
72 if (bkey < 0)
73 throw new InvalidParameterException("All bkeys MUST be positive");
74
75 return "<HIDDEN_" + bkey + ">";
76 }
77 }