View Javadoc

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  }