package org.openmrs.module.sync.serialization; import java.util.Properties; public class PropertiesNormalizer extends Normalizer { @Override public String toString(Object o) { if (o != null && o instanceof Properties){ Properties ps = (Properties) o; StringBuilder sb = new StringBuilder(""); if (ps.size() == 0){ return ""; } else { for (Object key : ps.keySet()) { sb.append("{{"); sb.append(key); sb.append("||"); sb.append(ps.get(key)); sb.append("}}"); } } return sb.toString(); } if (o != null) log.error("Sync PropertiesNormalizer was passed an object of class " + o.getClass()); return null; } @Override public Object fromString(Class clazz, String s) { Properties ps = new Properties(); if (!Properties.class.isAssignableFrom(clazz) || s == null) { log.error("PropertiesNormalizer incorrectly chosen to deserialize object of type " + clazz.getName()); return null; } //if it is empty string return empty map if (s.length() == 0) { return ps; } // strip leading and closing {{ }} since we're splitting it if (!s.startsWith("{{") || s.lastIndexOf("}}") < 3) { //this isn't right, we are expecting {{k,v}}||{{k,v}}... throw new IllegalArgumentException( "Invalid serialization format for Properties object. {{key||value}}{{key||value}} expected."); } String tmp = s; tmp = tmp.replaceFirst("\\{\\{", ""); tmp = tmp.substring(0, tmp.lastIndexOf("}}")); for (String entry : tmp.split("\\}\\}\\{\\{")) { //entry = entry.trim(); // take out whitespace if (entry.contains("||")) { String keyvalArray[] = entry.split("\\|\\|"); ps.put(keyvalArray[0], keyvalArray[1]); } else { throw new IllegalArgumentException( "Invalid serialization format for Properties entry. {{key||value}} expected. encountered:" + entry); } } return ps; } }