Code for Example 2

package tut;
import java.util.Locale;
import com.ibm.telephony.beans.directtalk.ApplicationProperties;
import com.ibm.telephony.beans.media.*;
import com.ibm.telephony.wvr.*;
/**
 *
 * A simple WVR application
 */
public class InApp extends WVRApplication {
	// Define the category for all the voice segments in this application.
	private static final String CATEGORY = "Tutorials";
	// Define the menu items
    	private static final String ITEM1_MSG	= "Message";
	private static final String ITEM2_NUMBER	= "Number";
	private static final String ITEM3_ORDER	= "Order";
	private static final String ITEM4_OPERATOR	= "Operator";
	private static final String ITEM5_HANGUP	= "Hangup";
	// Create an array to store the menu items
	private static final String[] MENU_ITEMS = { ITEM1_MSG, ITEM2_NUMBER, ITEM3_ORDER,
                                                        ITEM4_OPERATOR, ITEM5_HANGUP };
	// Create an array to represent the keys that will be used to select the menu items
	private static final String[] MENU_KEYS = { "1", "2", "3", "4", "5" };
	
	// Create a number of Voice Segment objects that are shared amongst all instances of this
	// application within the JVM.
	
	// Create the Welcome and Difficulties segment objects
	private static final VoiceSegment VS_WELCOME      = new VoiceSegment(CATEGORY, "Welcome");
	private static final VoiceSegment VS_DIFFICULTIES = new VoiceSegment(CATEGORY, "Difficulties");
	// Create the segment objects for the menu choices, and store them in an array
	private static final MediaType[]  MENU_PROMPTS = {
		new VoiceSegment(CATEGORY, "Message"),
		new VoiceSegment(CATEGORY, "Number"),
		new VoiceSegment(CATEGORY, "Order"),
		new VoiceSegment(CATEGORY, "Operator"),
		new VoiceSegment(CATEGORY, "Hangup")
	};
	// Create the segment objects required for the menu properties
	private static final VoiceSegment VS_MENU_INVALID = new VoiceSegment(CATEGORY, "InvalidKey");
	private static final VoiceSegment VS_MENU_ERROR   = new VoiceSegment(CATEGORY, "Error");
	private static final VoiceSegment VS_MENU_ONEMORE = new VoiceSegment(CATEGORY, "OneMore");
	private static final VoiceSegment VS_MENU_HEADER  = new VoiceSegment(CATEGORY, "MenuHeader");
	private static final VoiceSegment VS_MENU_FOOTER  = new VoiceSegment(CATEGORY, "MenuFooter");
	// Create some attribute objects for the 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;
	// Create a flag to control whether we continue to loop around in the voiceMain() method taking calls
	private boolean keepTakingCalls = true;
	// Create a constructor method to set up the attributes
	public InApp() {
		// Set the input attributes of the menu
		menuAtts.setHeaderMessage(VS_MENU_HEADER);
		menuAtts.setFooterMessage(VS_MENU_FOOTER);		
		menuAtts.setInvalidInputMessage(VS_MENU_INVALID);
		menuAtts.setNoMoreRepeatsMessage(VS_MENU_ERROR);
		menuAtts.setOneMoreRepeatMessage(VS_MENU_ONEMORE);
		menuAtts.setTimeout(10);
		menuAtts.setNumberOfRepeats(2);	
		
		// Set the DTMF attributes of the menu
		menuDTMFAtts.setDelimiterKeys("");
		menuDTMFAtts.setMaximumKeys(1);
		
	}//InApp
	
	/**
	 * @see com.ibm.telephony.wvr.WVRApplication#voiceMain()
	 */
	public void voiceMain() throws WVRException {	
		
		// Define the Call object
		Call call = null; 			
		// Set the application properties
		ApplicationProperties applicationProperties = null;
		applicationProperties = this.getApplicationProperties();
			
		// Create the WVR object and set the wait time
		WVR wvr = new WVR(this, applicationProperties);
		wvr.setWaitTime(-1);
		// Create a variable that will be used to give each call a unique number
		int callNumber = 0;
		try {
			while (keepTakingCalls) {
				// Increment callNumber
				callNumber++;
				
				// Wait for a call
				call = wvr.waitForCall("Call: " + callNumber); 
				// Create a flag to indicate whether the call is in progress
				boolean callInProgress = true;
				try {			
					// Play welcome message
					call.play(VS_WELCOME);
					while (callInProgress) {
						// Play the menu and get the caller's response.
						InputResult input = call.playAndGetInput(menuPlayAtts, menuAtts, menuDTMFAtts, menuRecoAtts);
						String choice = input.getValue();	
						
						// Print out the caller's choice.
						System.out.println("Caller chose option" + choice);
					}//while
				}
				catch (WVRHungUpException e) {
					// Caller has hung up - ignore exception, program will go to finally block
				}
				catch (WVRInvalidInputException e) {
					// Caller has entered invalid input - ignore exception, application will go to finally block
				}
				catch (WVRException e) {
					// Check if Call object has been created. If yes, play the Difficulties message.
					if (call.isActive()) call.play(VS_DIFFICULTIES);
					// Print debugging information
					e.printStackTrace();
				}				
				finally {
					// Return the call
					call.returnCall();
				}//try
									
			}//while
		}
		catch (WVRException e) {			
			// Print debugging information
			e.printStackTrace();
		}//try
	}//voiceMain()
	// Tell the application to stop taking calls when the node shuts down	
	public void voiceAppStop() { keepTakingCalls = false; }
}//InApp