/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.image.param;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public abstract class AbstractParameterSerializer
implements ParameterSerializer
{
private final static String SEPARATOR = "/";
private final static String SEPARATOR_ENC = "/";
public final String serializeMap( Map<String, String> map )
{
ArrayList<String> list = new ArrayList<String>();
for ( Map.Entry<String, String> entry : map.entrySet() )
{
list.add( entry.getKey() );
list.add( entry.getValue() );
}
return serializeList( list );
}
public final Map<String, String> deserializeMap( String value )
{
HashMap<String, String> map = new HashMap<String, String>();
Iterator<String> list = deserializeList( value ).iterator();
while ( list.hasNext() )
{
String key = list.next();
if ( list.hasNext() )
{
map.put( key, list.next() );
}
else
{
map.put( key, "" );
}
}
return map;
}
public final String serializeList( List<String> value )
{
StringBuffer str = new StringBuffer();
for ( int i = 0; i < value.size(); i++ )
{
if ( i > 0 )
{
str.append( SEPARATOR );
}
str.append( encodeValue( value.get( i ) ) );
}
return serialize( str.toString() );
}
public final List<String> deserializeList( String value )
{
value = deserialize( value );
ArrayList<String> list = new ArrayList<String>();
for ( String current : value.split( SEPARATOR ) )
{
list.add( decodeValue( current ) );
}
return list;
}
private String encodeValue( String value )
{
return value.replaceAll( SEPARATOR, SEPARATOR_ENC );
}
private String decodeValue( String value )
{
return value.replaceAll( SEPARATOR_ENC, SEPARATOR );
}
}