/* * Oreka -- A media capture and retrieval platform * * Copyright (C) 2005, orecx LLC * * http://www.orecx.com * * This program is free software, distributed under the terms of * the GNU General Public License. * Please refer to http://www.gnu.org/copyleft/gpl.html * */ package net.sf.oreka.serializers; import net.sf.oreka.OrkException; import net.sf.oreka.OrkObject; import net.sf.oreka.OrkObjectFactory; /** * Serializer that generates and parses objects to and from a single line of text. * key-value pairs are separated by spaces. * key and values are separated by equal signs. * example: message=doit what=run */ public class SingleLineSerializer extends KeyValueSerializer { StringBuffer output; public String serialize(OrkObject input) throws OrkException { output = new StringBuffer(); deserialize = false; // Set Serialize mode addClassName(input.getOrkClassName()); input.define(this); return output.toString(); } enum SingleLineState {StartState, KeyState, ValueState}; public OrkObject deSerialize(String input) throws OrkException { // read string and extract values into map input = input.trim(); SingleLineState state = SingleLineState.StartState; StringBuffer key = new StringBuffer(); StringBuffer value = new StringBuffer(); String firstValue = null; for(int i=0; i 0) { // Add pair to key-value map map.put(key.toString().toLowerCase(), unEscapeSingleLine(value.toString())); if (firstValue == null) { firstValue = value.toString().toLowerCase(); } key = new StringBuffer(); value = new StringBuffer(); } } } deserialize = true; // Set DeSerialize mode OrkObject obj = OrkObjectFactory.instance().newOrkObject(firstValue); obj.define(this); obj.validate(); return obj; } public void addClassName(String value) { addString(classKey, value); } void addString(String key, String value) { String pair; String escapedValue = escapeSingleLine(value); pair = key + "=" + escapedValue + " "; output.append(pair); } /** * Finds the Object Class from a serialized string. * i.e. for a serialized object of the form: * message=dosomething when=now * it returns "dosomething" * * @param input * @return */ /* static String findClass(String input) { String result = ""; int equalsPosition = input.indexOf("="); if (equalsPosition != -1) { int spacePostion = input.indexOf(" "); if (spacePostion > equalsPosition) { result = input.substring(equalsPosition+1, spacePostion-1); } else { result = input.substring(equalsPosition+1, input.length() - 1); } } return result.toLowerCase(); } */ String escapeSingleLine(String in) { StringBuffer out = new StringBuffer(); for(int i=0; i