/* * Created on Jan 21, 2004 To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package org.jactr.core.utils.parameter; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.naming.OperationNotSupportedException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author harrison To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class CollectionParameterHandler<T> extends ParameterHandler<Collection<T>> { static private transient final Log LOGGER = LogFactory .getLog(CollectionParameterHandler.class); IParameterHandler<T> _secondaryHandler; public CollectionParameterHandler() { } public CollectionParameterHandler(IParameterHandler<T> secondaryHandler) { _secondaryHandler = secondaryHandler; } public Collection<T> coerce(String value) { if (_secondaryHandler == null) throw new ParameterException("Cannot coerce " + value + " into an array without a secondary handler", new OperationNotSupportedException( "Use coerce(String, ParameterHandler) instead")); return coerce(value, _secondaryHandler); } public Collection<T> coerce(String value, IParameterHandler<T> secondaryHandler) { /* * strip the first and last () */ String stripped = value.substring(value.indexOf("(") + 1, value .lastIndexOf(")")); if (LOGGER.isDebugEnabled()) LOGGER.debug("Stripped " + value + " to " + stripped); /* * split at , */ String[] splits = stripped.split(","); List<T> rtn = new ArrayList<T>(splits.length); for (String split : splits) { split = split.trim(); if (split.length() != 0) try { T secondary = secondaryHandler.coerce(split); rtn.add(secondary); } catch (Exception e) { LOGGER.error("Failed to coerce " + split + " with secondary handler " + secondaryHandler, e); } } return rtn; } public String toString(Collection<T> values, IParameterHandler<T> secondaryHandler) { StringBuilder sb = new StringBuilder("("); for (T element : values) sb.append(secondaryHandler.toString(element)).append(", "); // delete the last two characters if (values.size() != 0) { sb.deleteCharAt(sb.length() - 1); sb.deleteCharAt(sb.length() - 1); } sb.append(")"); return sb.toString(); } public String toString(Collection<T> values) { if (_secondaryHandler == null) throw new ParameterException( "Cannot toString without a secondary parameter handler", new OperationNotSupportedException( "Using toString(value, ParameterHandler)")); return toString(values, _secondaryHandler); } }