1 package org.inigma.utopia.parser;
2
3 import java.util.HashMap;
4 import java.util.LinkedHashMap;
5 import java.util.Map;
6 import java.util.regex.Matcher;
7 import java.util.regex.Pattern;
8
9 import org.inigma.utopia.Personality;
10 import org.inigma.utopia.Province;
11 import org.inigma.utopia.Race;
12 import org.inigma.utopia.Rank;
13 import org.inigma.utopia.utils.NumberUtil;
14
15 class CommonParser {
16 protected static final Pattern ANGEL_KEY_VALUE = Pattern.compile("(.+?): ([\\d,]+)");
17 protected static final Pattern ANGEL_KEY_STRING = Pattern.compile("(.+?): (.+?)");
18
19 public static Map<String, String> getAngelSections(String data) {
20 Map<String, String> values = new LinkedHashMap<String, String>();
21 int lastMatch = -1;
22 int index = -1;
23 while ((index = data.indexOf("** ", lastMatch)) != -1) {
24 String key = data.substring(index + "** ".length(), data.indexOf(" **", index));
25 index += "** ".length() + key.length() + " **".length();
26 lastMatch = index;
27 int endindex = data.indexOf("** ", index);
28 String body = null;
29 if (endindex != -1) {
30 body = data.substring(index, endindex);
31 } else {
32 body = data.substring(index);
33 }
34 values.put(key, body);
35 }
36 return values;
37 }
38
39 public static Map<String, String> getAngleKeyValue(String info) {
40 Map<String, String> values = new HashMap<String, String>();
41 Matcher matcher = ANGEL_KEY_STRING.matcher(info);
42 while (matcher.find()) {
43 values.put(matcher.group(1), matcher.group(2));
44 }
45 return values;
46 }
47
48 public static Map<String, Integer> getAngleKeyIntegerValue(String info) {
49 Map<String, Integer> values = new HashMap<String, Integer>();
50 Matcher matcher = ANGEL_KEY_VALUE.matcher(info);
51 while (matcher.find()) {
52 values.put(matcher.group(1), getNumber(matcher.group(2)).intValue());
53 }
54 return values;
55 }
56
57 public static Number getNumber(String num) {
58 Number number = NumberUtil.getNumber(num);
59 if (number == null) {
60 return 0;
61 }
62 return number;
63 }
64
65 public static Race getRace(String string) {
66 for (Race race : Race.values()) {
67 if (string.contains(race.getDisplayName())) {
68 return race;
69 }
70 }
71 return Race.Unknown;
72 }
73
74 public static Rank getRank(String str) {
75 for (Rank rank : Rank.values()) {
76 for (String title : rank.getTitles()) {
77 if (str.contains(title)) {
78 return rank;
79 }
80 }
81 }
82 return Rank.Unknown;
83 }
84
85 public static Personality getPersonality(Province province) {
86 String leader = province.getLeader();
87 for (Personality person : Personality.values()) {
88 Pattern pattern = person.getPattern();
89 Matcher matcher = pattern.matcher(leader);
90 if (matcher.find()) {
91 province.setLeader(matcher.group(1));
92 return person;
93 }
94 }
95 return Personality.Unknown;
96 }
97 }