package helpers; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; /** * helper functions for handling preferences.. * * @author Quicksilver * */ public final class PrefConverter { /** * helper methods as its sometimes easier to store it like that * will escape the breaking characters.. * @param property * @return */ public static String[] asArray(String property) { List<String> list = new ArrayList<String>(); if (!property.endsWith("\n") && !GH.isEmpty(property)) { property+="\n"; } int i; while (-1 != (i = property.indexOf('\n'))) { list.add(GH.revReplace(property.substring(0, i))) ; property = property.substring(i+1); } return list.toArray(new String[]{}); } public static String asString(String[] ar) { StringBuilder finished = new StringBuilder(); for (String s:ar) { finished.append(GH.replaces(s)).append('\n'); } return finished.toString(); } public static String asString(Map<String,String> kvMap) { String[] str = new String[kvMap.size() *2]; int i =0; for (Entry<String,String> e:kvMap.entrySet()) { str[i] = e.getKey(); str[i+1]= e.getValue(); i+=2; } return asString(str); } public static Map<String,String> asMap(String property) { String[] str = asArray(property); Map<String,String> map = new HashMap<String,String>(); for (int i=0; i < str.length; i+=2) { map.put(str[i], str[i+1]); } return map; } public static <V> String createList(List<V> items,IPrefSerializer<V> translater) { StringBuilder s = new StringBuilder(); for (V v: items) { String item = asString(translater.serialize(v)); s.append( GH.replaces(item)).append('\n'); } return s.toString(); } /** * Splits the given string into a list of strings. * This method is the converse of <code>createList</code>. * <p> * Subclasses must implement this method. * </p> * * @param stringList the string * @return an array of <code>String</code> * @see createList */ public static <V> List<V> parseString(String stringList,IPrefSerializer<V> translater) { List<V> list = new ArrayList<V>(); for (String s : loadList(stringList)) { list.add(translater.unSerialize(asArray(s))); } return list; } /** * just loads a List of item strings from the given string.. * allows decoding * * @param stringList - the preference value that was stored before via complex List editor * @return */ public static List<String> loadList(String stringList) { if (stringList == null) { stringList = ""; } if (!stringList.endsWith("\n")&& !GH.isEmpty(stringList)) { //workaround for old ComplexListEditor so data can still be loaded.. stringList+= "\n"; } List<String> list = new ArrayList<String>(); int i = 0; while ((i = stringList.indexOf('\n')) != -1) { list.add(GH.revReplace(stringList.substring(0, i))); stringList = stringList.substring(i+1); } return list; } }