class FormInterpretationAlgorithm implements FormItemVisitor {

    public void visitFieldFormItem(final InputItem field)
            throws JVoiceXMLEvent {
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("visiting field '" + field.getName() + "'...");
        }

        // Add the handlers.
        final EventHandler handler = context.getEventHandler();
        eventStrategies = handler.collect(context, interpreter, this, field);

        final ImplementationPlatform platform = context
                .getImplementationPlatform();
        final EventBus eventbus = context.getEventBus();
        platform.setEventBus(eventbus);
        platform.waitNonBargeInPlayed();

        final UserInput input = platform.getUserInput();
        final CallControl call = platform.getCallControl();
        try {
            if (call != null) {
                final CallControlProperties callProps = context
                        .getCallControlProperties(this);
                call.record(input, callProps);
            }
            final DataModel model = context.getDataModel();
            final SpeechRecognizerProperties speech = context
                    .getSpeechRecognizerProperties(this);
            final DtmfRecognizerProperties dtmf = context
                    .getDtmfRecognizerProperties(this);
            final ActiveGrammarSet activeGrammars =
                    context.getActiveGrammarSet();
            final Collection<ModeType> types =
                    activeGrammars.getModeTypes();
            input.startRecognition(model, types, speech, dtmf);
        } catch (ConfigurationException e) {
            throw new NoresourceError(e.getMessage(), e);
        } catch (IOException e) {
            throw new BadFetchError("error recording", e);
        }
    }

    public  FormInterpretationAlgorithm(final VoiceXmlInterpreterContext ctx,
            final VoiceXmlInterpreter ip, final Dialog currentDialog);

}