com.nuecho.rivr.voicexml.turn.output.Message Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rivr-voicexml Show documentation
Show all versions of rivr-voicexml Show documentation
Rivr is a lightweight open-source dialogue engine enabling flexible VoiceXML web application development for the agile Java developer and enterprise.
/*
* Copyright (c) 2013 Nu Echo Inc. All rights reserved.
*/
package com.nuecho.rivr.voicexml.turn.output;
import static com.nuecho.rivr.voicexml.rendering.voicexml.VoiceXmlDomUtil.*;
import static java.util.Arrays.*;
import java.util.*;
import javax.json.*;
import org.w3c.dom.*;
import com.nuecho.rivr.core.util.*;
import com.nuecho.rivr.voicexml.dialogue.*;
import com.nuecho.rivr.voicexml.rendering.voicexml.*;
import com.nuecho.rivr.voicexml.turn.output.audio.*;
import com.nuecho.rivr.voicexml.util.json.*;
/**
* A {@link Message} is a {@link VoiceXmlOutputTurn} that plays a sequence of
* {@link AudioItem}.
*
* @author Nu Echo Inc.
* @see AudioItem
* @see http://www.w3.org/TR/voicexml20/#dml4.1.8
*/
public class Message extends VoiceXmlOutputTurn {
private static final String MESSAGE_TURN_TYPE = "message";
private static final String BARGE_IN_PROPERTY = "bargeIn";
private static final String LANGUAGE_PROPERTY = "language";
private static final String AUDIO_ITEMS_PROPERTY = "audioItems";
private final List mAudioItems;
private String mLanguage;
private Boolean mBargeIn;
/**
* @param name The name of this turn. Not empty.
* @param audioItems The sequence of {@link AudioItem} to play. Not empty.
*/
public Message(String name, List audioItems) {
super(name);
Assert.notEmpty(audioItems, "audioItems");
mAudioItems = new ArrayList(audioItems);
}
/**
* @param name The name of this turn. Not empty.
* @param audioItems The sequence of {@link AudioItem} to play. Not empty.
*/
public Message(String name, AudioItem... audioItems) {
this(name, asList(audioItems));
}
/**
* @param language The language identifier (e.g. "en-US") for the message.
* null
to use the VoiceXML platform default
*/
public final void setLanguage(String language) {
mLanguage = language;
}
/**
* @param bargeIn
* - {@link Boolean#TRUE} to enable barge-in
* -
* {@link Boolean#FALSE} to disable barge-in
* null
to use the VoiceXML platform default
*
*/
public final void setBargeIn(Boolean bargeIn) {
mBargeIn = bargeIn;
}
public final List getAudioItems() {
return Collections.unmodifiableList(mAudioItems);
}
public final String getLanguage() {
return mLanguage;
}
public final Boolean getBargeIn() {
return mBargeIn;
}
@Override
protected final String getOuputTurnType() {
return MESSAGE_TURN_TYPE;
}
@Override
protected void addTurnProperties(JsonObjectBuilder builder) {
JsonUtils.add(builder, AUDIO_ITEMS_PROPERTY, JsonUtils.toJson(mAudioItems));
JsonUtils.add(builder, LANGUAGE_PROPERTY, mLanguage);
if (mBargeIn == null) {
builder.addNull(BARGE_IN_PROPERTY);
} else {
builder.add(BARGE_IN_PROPERTY, mBargeIn.booleanValue());
}
}
@Override
protected void fillVoiceXmlDocument(Document document, Element formElement, VoiceXmlDialogueContext dialogueContext)
throws VoiceXmlDocumentRenderingException {
Element blockElement = addBlockElement(formElement);
createPrompt(mLanguage, blockElement, dialogueContext, mBargeIn, mAudioItems);
createGotoSubmit(blockElement);
}
/**
* Builder used to ease the creation of instances of {@link Message}.
*/
public static class Builder {
private final String mName;
private final List mAudioItems = new ArrayList();
private String mLanguage;
private Boolean mBargeIn;
public Builder(String name) {
mName = name;
}
public Builder addAudio(AudioItem audioItem) {
Assert.notNull(audioItem, "audioItem");
mAudioItems.add(audioItem);
return this;
}
public Builder setLanguage(String language) {
mLanguage = language;
return this;
}
public Builder setBargein(Boolean bargeIn) {
mBargeIn = bargeIn;
return this;
}
public Message build() {
Message message = new Message(mName, mAudioItems);
message.setBargeIn(mBargeIn);
message.setLanguage(mLanguage);
return message;
}
}
}