/** * Wraps a <code>ResultSet</code> to trim strings returned by the <code>getString()</code> and * <code>getObject()</code> methods. * * <p>Usage Example: This example shows how to decorate ResultSets so processing continues as normal * but all Strings are trimmed before being returned from the <code>ResultSet</code>. * * <pre> * ResultSet rs = // somehow get a ResultSet; * * // Substitute wrapped ResultSet with additional behavior for real ResultSet * rs = StringTrimmedResultSet.wrap(rs); * * // Pass wrapped ResultSet to processor * List list = new BasicRowProcessor().toBeanList(rs); * </pre> */ public class StringTrimmedResultSet implements InvocationHandler { /** The factory to create proxies with. */ private static final ProxyFactory factory = ProxyFactory.instance(); /** * Wraps the <code>ResultSet</code> in an instance of this class. This is equivalent to: * * <pre> * ProxyFactory.instance().createResultSet(new StringTrimmedResultSet(rs)); * </pre> * * @param rs The <code>ResultSet</code> to wrap. * @return wrapped ResultSet */ public static ResultSet wrap(ResultSet rs) { return factory.createResultSet(new StringTrimmedResultSet(rs)); } /** The wrapped result. */ private final ResultSet rs; /** * Constructs a new instance of <code>StringTrimmedResultSet</code> to wrap the specified <code> * ResultSet</code>. * * @param rs ResultSet to wrap */ public StringTrimmedResultSet(ResultSet rs) { super(); this.rs = rs; } /** * Intercept calls to the <code>getString()</code> and <code>getObject()</code> methods and trim * any Strings before they're returned. * * @throws Throwable * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, * java.lang.Object[]) */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = method.invoke(this.rs, args); if (method.getName().equals("getObject") || method.getName().equals("getString")) { if (result instanceof String) { result = ((String) result).trim(); } } return result; } }
/** * Wraps the <code>ResultSet</code> in an instance of this class. This is equivalent to: * * <pre> * ProxyFactory.instance().createResultSet(new StringTrimmedResultSet(rs)); * </pre> * * @param rs The <code>ResultSet</code> to wrap. * @return wrapped ResultSet */ public static ResultSet wrap(ResultSet rs) { return factory.createResultSet(new StringTrimmedResultSet(rs)); }