/* ColorConverter.java created 2007-09-19
*
*/
package org.signalml.app.config;
import java.util.HashMap;
import java.util.Map;
import java.io.File;
import org.signalml.app.SvarogApplication;
import org.signalml.util.Util;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
/** ColorConverter
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class SubstitutingStringConverter implements Converter {
private final Map<String,String> tokens, invTokens;
public SubstitutingStringConverter() {
tokens = new HashMap<String,String>();
File dir = SvarogApplication.getSharedInstance().getProfileDir();
if (dir != null)
tokens.put("profile", dir.getAbsolutePath());
invTokens = Util.invertStringMap(tokens);
}
@Override
public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
writer.setValue(Util.substituteForTokens((String) value, invTokens, false));
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
return Util.expandTokens(reader.getValue(), tokens);
}
@SuppressWarnings("unchecked")
@Override
public boolean canConvert(Class clazz) {
return String.class.isAssignableFrom(clazz);
}
}