[ 
http://jira.codehaus.org/browse/JBEHAVE-258?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=216599#action_216599
 ] 

Bruno Bieth commented on JBEHAVE-258:
-------------------------------------

I believe in most cases converters don't need parameters.
If I recall the example in the documentation speak about dates. Honestly I 
don't think you should handle date conversion differently across your scenarios.
Of course I'm not saying you should remove the possibility to instanciate 
converters. So, most of the time you'd have :
{code}
@ParameterConverters({DateTimeConverter.class,PercentageConverter.class})
public class PersonSteps {
//...
}
{code}
As opposed to
{code}
public class PersonSteps extends Steps {
private static final StepsConfiguration configuration = new 
StepsConfiguration();
 
public PersonSteps(ClassLoader classLoader) {
    super(configuration);
    configuration.useParameterConverters(new ParameterConverters(
           new DateTimeConverter(),new PercentageConverter()));  // define 
converter for custom type Date
}
}
{code}
and as a side note you have to extend Steps (at least that's what the 
documentation says).

> Annotation for ParameterConverter
> ---------------------------------
>
>                 Key: JBEHAVE-258
>                 URL: http://jira.codehaus.org/browse/JBEHAVE-258
>             Project: JBehave
>          Issue Type: Improvement
>            Reporter: Bruno Bieth
>
> Simplifying adding ParameterConverter to Steps. Here's an example :
> {code}
> public class DateTimeConverter  implements ParameterConverter {
>       @Override
>       public boolean accept(Type type) {
>               return type.equals( DateTime.class );
>       }
>       @Override
>       public Object convertValue(String value, Type type) {                   
>               return new DateTime( value );
>       }
> }
> {code}
> {code}
> @ParameterConverters(DateTimeConverter.class)
> public class PersonSteps {
>       private Person person;
>       private DateTime currentDate;
>       // ... steps
> }
> {code}
> The ParameterConverters annotation takes an array of TypeConverter :
> {code}
> @Retention(RetentionPolicy.RUNTIME)
> @Target(ElementType.TYPE)
> public @interface ParameterConverters {
>       Class<? extends ParameterConverter>[] value();
> }
> {code}
> Here is a steps factory :
> {code}
> public class ParameterConverterStepsFactory {
>     public CandidateSteps[] createCandidateSteps(Object... stepsInstances) 
> throws InstantiationException, IllegalAccessException {
>         CandidateSteps[] candidateSteps = new 
> CandidateSteps[stepsInstances.length];
>         for (int i = 0; i < stepsInstances.length; i++) {
>               Object stepsInstance = stepsInstances[i];
>               StepsConfiguration configuration;
>               
>               ParameterConverters parameterConverters = 
>                       stepsInstance.getClass().getAnnotation( 
> ParameterConverters.class );
>               
>               if( parameterConverters != null ) {
>                       configuration = createConfiguration( 
> parameterConverters );
>               } else {                
>                       configuration = new StepsConfiguration();
>               }
>               
>             candidateSteps[i] = new Steps(configuration, stepsInstance);
>         }
>         return candidateSteps;
>     }
>       private StepsConfiguration createConfiguration(
>                       ParameterConverters annotation) throws 
> InstantiationException, IllegalAccessException {
>               ParameterConverter[] converters = new ParameterConverter[ 
> annotation.value().length ];
>               for( int i = 0; i < converters.length; i ++ ) {
>                       converters[ i ] = annotation.value()[ i ].newInstance();
>               }
>               org.jbehave.scenario.steps.ParameterConverters 
> converterAggregate = 
>                       new org.jbehave.scenario.steps.ParameterConverters( 
> converters );
>               return new StepsConfiguration( converterAggregate );
>       }
> }
> {code}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to