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    }