001 package org.trails.io;
002
003 import org.apache.tapestry.record.PropertyChange;
004 import org.apache.tapestry.record.PropertyChangeImpl;
005 import org.apache.tapestry.services.DataSqueezer;
006 import org.apache.tapestry.util.io.SqueezeAdaptor;
007
008
009 /**
010 * Squeezes a {@link PropertyChangeAdaptor}
011 */
012 public class PropertyChangeAdaptor implements SqueezeAdaptor
013 {
014 public static final String DELIMITER = "trails:";
015 public static final String PREFIX = "X";
016
017 public String getPrefix()
018 {
019 return PREFIX;
020 }
021
022 public Class getDataClass()
023 {
024 return PropertyChange.class;
025 }
026
027 public String squeeze(DataSqueezer next, Object o)
028 {
029 PropertyChange propertyChange = (PropertyChange) o;
030 return PREFIX + next.squeeze(propertyChange.getComponentPath()) + DELIMITER +
031 next.squeeze(propertyChange.getPropertyName() + DELIMITER + next.squeeze(propertyChange.getNewValue()));
032
033 }
034
035 public Object unsqueeze(DataSqueezer next, String string)
036 {
037 String[] squeezeds = string.substring(PREFIX.length()).split(DELIMITER);
038 return new PropertyChangeImpl((String) next.unsqueeze(squeezeds[0]), (String) next.unsqueeze(squeezeds[1]),
039 next.unsqueeze(squeezeds[2]));
040 }
041 }