public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
HttpSession session = request.getSession();
MusicStoreAppBean msBean = (MusicStoreAppBean)
session.getAttribute(MusicStoreAppBean.SESSION_KEY);
if (msBean == null) {
String subscriptionId = session.getServletContext().
getInitParameter("com.amazon.ecs.subscriptionId");
msBean = new MusicStoreAppBean(subscriptionId);
session.setAttribute(MusicStoreAppBean.SESSION_KEY, msBean);
// Initialize channel information
String userAgent = request.getHeader(USERAGENT);
if (userAgent.indexOf(MOZILLA) >= 0) {
if (request.getParameter("VDEBUG") == null) {
msBean.setChannel(MusicStoreAppBean.GUI_APP);
} else {
// if VDEBUG is set, output voice page instead
msBean.setChannel(MusicStoreAppBean.VOICE_DBG);
}
} else {
msBean.setChannel(MusicStoreAppBean.VOICE_APP);
}
}
if (msBean.getChannel() == MusicStoreAppBean.GUI_APP) {
// GUI Channel
HTMLMenuLinks menuLinks = msBean.getMenuLinks();
if (menuLinks == null) {
String baseURI = "http://" + request.getServerName();
int port = request.getServerPort();
if (80 != port && 0 != port && 443 != port) {
baseURI += ":" + Integer.toString(port, 10);
}
baseURI += request.getContextPath();
menuLinks = new HTMLMenuLinks(baseURI);
msBean.setMenuLinks(menuLinks);
}
String genre = request.getParameter("genre");
if (genre == null) {
if (request.getParameter("browseMusic") == null) {
menuLinks.generateCategoryLinks(
HTMLMenuLinks.DEFAULT_GENRE, true);
} else {
menuLinks.generateGenreLinks();
}
} else {
menuLinks.generateCategoryLinks(genre, false);
}
} else {
// Voice Channel
ProactiveHelp ph = msBean.getProactiveHelp();
if(ph == null) {
ph = new ProactiveHelp();
ResourceBundle rb = ResourceBundle.
getBundle("org.apache.taglibs.rdc.sampleapps.musicstore.resources.MusicHints",
Locale.US);
ph.setHints(rb);
ph.setThreshold(60);
ph.setUsageWeighted(true);
msBean.setProactiveHelp(ph);
}
if (ph.strike()) {
request.setAttribute("proactiveHelp_hint", ph.nextHint());
}