View Javadoc

1   package net.sourceforge.jparam.conversion.converters;
2   
3   import net.sourceforge.jparam.conversion.creators.ICreator;
4   import net.sourceforge.jparam.conversion.weights.ScalarConversionWeight;
5   
6   // @TODO: Missing support for explicit constructor that is not a converter
7   // @TODO: Support abstract classes...
8   
9   public class CreatorConverter extends AbstractConverter {
10  	ICreator conversionCreator;
11  
12  	/***
13  	 * @param conversionConstructor
14  	 */
15  	public CreatorConverter(ICreator conversionCreator) {
16  		super();
17  		this.conversionCreator = conversionCreator;
18  
19  		if (conversionCreator.getParameterTypes().length != 1) {
20  			throw new RuntimeException(
21  					"Creator must have exactly one argument: "
22  							+ conversionCreator);
23  		}
24  
25  		sourceClass = conversionCreator.getParameterTypes()[0];
26  		targetClass = conversionCreator.getReturnClass();
27  
28  		conversionWeight = ScalarConversionWeight.CONV_USER;
29  	}
30  
31  	public Object internalConvert(Object o) throws Exception {
32  		return conversionCreator.create(new Object[] { o });
33  	}
34  
35  	protected boolean converterEquals(IConverter o) {
36  		CreatorConverter other = (CreatorConverter) o;
37  		return conversionCreator.equals(other.conversionCreator);
38  	}
39  
40  	public IConverter update(IConverter updatedConverter) {
41  	    // ignore updatedConverter
42  	    if (updatedConverter == null){
43  	    }
44  		// this converter cannot change due to registration of new converters...
45  		return this;
46  	}
47  }