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 }