01: /*
02: * Copyright (C) 2006, 2007 XStream Committers.
03: * All rights reserved.
04: *
05: * The software in this package is published under the terms of the BSD
06: * style license a copy of which has been included with this distribution in
07: * the LICENSE.txt file.
08: *
09: * Created on 07. July 2006 by Mauro Talevi
10: */
11: package com.thoughtworks.xstream.converters.extended;
12:
13: import com.thoughtworks.xstream.converters.ConversionException;
14: import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
15:
16: import java.lang.reflect.Constructor;
17: import java.lang.reflect.InvocationTargetException;
18:
19: /**
20: * Convenient converter for classes with natural string representation.
21: *
22: * Converter for classes that adopt the following convention:
23: * - a constructor that takes a single string parameter
24: * - a toString() that is overloaded to issue a string that is meaningful
25: *
26: * @author Paul Hammant
27: */
28: public class ToStringConverter extends AbstractSingleValueConverter {
29: private final Class clazz;
30: private final Constructor ctor;
31:
32: public ToStringConverter(Class clazz) throws NoSuchMethodException {
33: this .clazz = clazz;
34: ctor = clazz.getConstructor(new Class[] { String.class });
35: }
36:
37: public boolean canConvert(Class type) {
38: return type.equals(clazz);
39: }
40:
41: public String toString(Object obj) {
42: return obj == null ? null : obj.toString();
43: }
44:
45: public Object fromString(String str) {
46: try {
47: return ctor.newInstance(new Object[] { str });
48: } catch (InstantiationException e) {
49: throw new ConversionException(
50: "Unable to instantiate single String param constructor",
51: e);
52: } catch (IllegalAccessException e) {
53: throw new ConversionException(
54: "Unable to access single String param constructor",
55: e);
56: } catch (InvocationTargetException e) {
57: throw new ConversionException(
58: "Unable to target single String param constructor",
59: e.getTargetException());
60: }
61: }
62: }
|