Simple types can be manifested in elements and in attributes. Simple type strategies must be capable of parsing simple values regardless of the form.
Strategy objects must declare how they relate to other strategy objects in the type hierarchy of the type they parse. To allow strategy objects which relate through a type hiearchy to communicate, a value is passed along to strategies as they are executed. As an example, consider the strategies for integer and decimal.
class DecimalStrategy implements Strategy { ... int getExecutionMode() { return OVERRIDE; } Object parse(InstanceComponent instance, Object value) throws Exception { BigDecimal decimal = new BigDecimal(instance.getText()); return decimal; } ... } class IntegerStrategy implements Strategy { ... int getExecutionMode() { return AFTER; } Object parse(InstanceComponent instance, Object value) throws Exception { BigDecimal decimal = (BigDecimal)value; return decimal.toBigInteger(); } ... }
In the above example, the decimal strategy is at the top of the hierarchy as it declares its execution mode as {@link org.geotools.xml.Binding#OVERRIDE}. Therefore it must process the raw text of the instance being parsed, and transform it into the specific object, in this case an object of type BigDecimal.
The integer strategy extends the decimal strategy as it declares its execution mode as {@link org.geotools.xml.Binding#AFTER}. Therefore the integer strategy has access to the result of the decimal strategy, and can simply transform the result of the decimal strategy into its specific type. In this case an object of type BigInteger.
@author Justin Deoliveira,Refractions Research Inc.,jdeolive@refractions.net @source $URL$
|
|
|
|
|
|