package tut;
import com.ibm.telephony.beans.media.*;
import com.ibm.telephony.wvr.*;
/**
* Subcomponent that allows the caller to order an item from a catalog
*/
class Catalog {
//Define the category for all the voice segments in this class.
private static final String CATEGORY = "Tutorials";
// Define the menu items
private static final String ITEM1_YES = "Yes";
private static final String ITEM2_NO = "No";
// Create an array to store the menu items
private static final String[] MENU_ITEMS = { ITEM1_YES, ITEM2_NO };
// Define the keys used to make the menu selections, and store them in an array
private static final String[] MENU_KEYS = { "1", "2" };
// Create a number of Voice Segment objects
// Create the segment objects for the menu items, and store them in an array
private static final MediaType[] MENU_PROMPTS = {
new VoiceSegment(CATEGORY, "ForYesPress1"),
new VoiceSegment(CATEGORY, "ForNoPress2")
};
// Create the segment objects for taking the order
private static final VoiceSegment VS_PRODUCT_NUMBER = new VoiceSegment(CATEGORY, "ProductNumber");
private static final VoiceSegment VS_QUANTITY = new VoiceSegment(CATEGORY, "Quantity");
private static final VoiceSegment VS_YOU_ORDERED = new VoiceSegment(CATEGORY, "YouOrdered");
private static final VoiceSegment VS_ITEMS = new VoiceSegment(CATEGORY, "Items");
// Create the segment objects for the verifying the order menu
private static final VoiceSegment VS_IS_THIS_OK = new VoiceSegment(CATEGORY, "IsThisOK");
// Create the segment objects for the result
private static final VoiceSegment VS_MAIL_ORDER = new VoiceSegment(CATEGORY, "MailOrder");
private static final VoiceSegment VS_SORRY = new VoiceSegment(CATEGORY, "Sorry");
// Create AudioNumber objects to play the caller's order back to them
private AudioNumber prodNumValue = new AudioNumber();
private AudioNumber quantityValue = new AudioNumber();
// Create a media sequence of the caller's order
private MediaType[] order = { VS_YOU_ORDERED, quantityValue, VS_ITEMS, prodNumValue };
// Create some attribute objects for getting the product number from the caller
private PlayAttributes prodNumPlayAtts = new PlayAttributes();
private InputAttributes prodNumInputAtts = new InputAttributes();
private DTMFAttributes prodNumDTMFAtts = new DTMFAttributes();
private RecoAttributes prodNumRecoAtts = null;
// Create some attribute objects for getting the quantity from the caller
private PlayAttributes quantityPlayAtts = new PlayAttributes();
private InputAttributes quantityInputAtts = new InputAttributes();
private DTMFAttributes quantityDTMFAtts = new DTMFAttributes();
private RecoAttributes quantityRecoAtts = null;
// Create some attribute objects for the verify order menu private PlayAttributes menuPlayAtts = new PlayAttributes(); private MenuAttributes menuAtts = new MenuAttributes(MENU_PROMPTS, MENU_ITEMS, MENU_KEYS, null); private DTMFAttributes menuDTMFAtts = new DTMFAttributes(); private RecoAttributes menuRecoAtts = null;
private CardChecker cardChecker = new CardChecker();
// Create a constructor method to set up various attributes
public Catalog() {
// Set the style of the product number AudioNumber object to digits
prodNumValue.setStyle("Digits");
// Set the attributes for getting the product number
prodNumInputAtts.setMessage(VS_PRODUCT_NUMBER);
prodNumInputAtts.setTimeout(10);
prodNumDTMFAtts.setMaximumKeys(4);
prodNumDTMFAtts.setDelimiterKeys("");
// Set the attributes for getting the quantity
quantityInputAtts.setMessage(VS_QUANTITY);
quantityInputAtts.setTimeout(10);
// Set the attributes for the verify order menu
menuAtts.setHeaderMessage(VS_IS_THIS_OK);
menuAtts.setTimeout(10);
menuDTMFAtts.setMaximumKeys(1);
menuDTMFAtts.setDelimiterKeys("");
}//Catalog()
public void takeOrder(Call call) throws WVRException {
// Create variables to store the product number and quantity of the order.
double prodNum = 0;
double quantity = 0;
while (true) {
// Get the product number from the caller
InputResult prodNumResult = call.playAndGetInput(prodNumPlayAtts, prodNumInputAtts,
prodNumDTMFAtts, prodNumRecoAtts);
prodNum = Double.parseDouble(prodNumResult.getValue());
prodNumValue.setValue(prodNum);
// Get the quantity from the caller
InputResult quantityResult = call.playAndGetInput(quantityPlayAtts, quantityInputAtts,
quantityDTMFAtts, quantityRecoAtts);
quantity = Double.parseDouble(quantityResult.getValue());
quantityValue.setValue(quantity);
// Play the order back to the caller
call.play(order);
// Verifies with the caller that the choice is correct, if yes, breaks out of loop
InputResult input = call.playAndGetInput(menuPlayAtts, menuAtts, menuDTMFAtts, menuRecoAtts);
String answer = input.getValue();
if (answer.equals(ITEM1_YES)) break;
}//while
if (cardChecker.takeCardDetails(call)) {
// Confirm to the caller that their order has gone through
call.play(VS_MAIL_ORDER);
}
else {
call.play(VS_SORRY); } //if }//takeOrder() }