001/*
002 * Copyright (c) 2013 Nu Echo Inc. All rights reserved.
003 */
004
005package com.nuecho.rivr.voicexml.turn.last;
006
007import static com.nuecho.rivr.voicexml.rendering.voicexml.VoiceXmlDomUtil.*;
008
009import org.w3c.dom.*;
010
011import com.nuecho.rivr.core.channel.*;
012import com.nuecho.rivr.core.util.*;
013import com.nuecho.rivr.voicexml.dialogue.*;
014import com.nuecho.rivr.voicexml.rendering.voicexml.*;
015import com.nuecho.rivr.voicexml.turn.*;
016
017/**
018 * Base class for the last turn returned by a {@link VoiceXmlDialogue}.
019 * 
020 * @author Nu Echo Inc.
021 * @see VoiceXmlDialogue
022 */
023public abstract class VoiceXmlLastTurn extends VoiceXmlDocumentTurn implements LastTurn {
024
025    public VoiceXmlLastTurn(String name) {
026        super(name);
027    }
028
029    @Override
030    protected Document createVoiceXmlDocument(VoiceXmlDialogueContext dialogueContext)
031            throws VoiceXmlDocumentRenderingException {
032        Document document = createDocument(dialogueContext);
033        Element formElement = createForm(document);
034        fillVoiceXmlDocument(document, formElement, dialogueContext);
035        addEventHandlers(document.getDocumentElement());
036        addFatalErrorHandlerForm(dialogueContext, document, this);
037        return document;
038    }
039
040    private void addEventHandlers(Element vxmlElement) {
041        Element catchElement = DomUtils.appendNewElement(vxmlElement, CATCH_ELEMENT);
042        catchElement.setAttribute(EVENT_ATTRIBUTE, ERROR_EVENT_NAME);
043        createGotoFatalHandler(catchElement);
044    }
045
046    protected abstract void fillVoiceXmlDocument(Document document,
047                                                 Element formElement,
048                                                 VoiceXmlDialogueContext dialogueContext)
049            throws VoiceXmlDocumentRenderingException;
050
051}