blob: 9950da5457702b63cf07f3423a705afb0fc619ba [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2008 IBM Corporation and Others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Masahide WASHIZAWA - initial API and implementation
*******************************************************************************/
package org.eclipse.actf.visualization.engines.voicebrowser.internal;
import org.eclipse.actf.visualization.engines.voicebrowser.Context;
import org.eclipse.actf.visualization.engines.voicebrowser.Packet;
import org.eclipse.actf.visualization.engines.voicebrowser.PacketCollection;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.NamedNodeMap;
public class StaticSELECTRenderer implements IElementRenderer {
/**
* @see org.eclipse.actf.visualization.engines.voicebrowser.internal.IElementRenderer#getPacketCollectionIn(Element, Context)
*/
public PacketCollection getPacketCollectionIn(
Element element,
Context curContext,
String url,
MessageCollection mc) {
// set `context in' flags
setContextIn(element, curContext);
// get number of options
NodeList children = element.getChildNodes();
int num = 0;
for (int i = 0; i < children.getLength(); i++) {
Node node = children.item(i);
String nodeName = node.getNodeName().toLowerCase();
if (nodeName.equals("option")) {
num++;
}
}
// check if multiple attribute is set (select type)
NamedNodeMap attrs = element.getAttributes();
Node multiNode = attrs.getNamedItem("multiple");
String type = "select";
if (multiNode != null)
type = "multi-select";
// build result string
String result;
if (num > 1) {
result =
OutLoud.buildResultString(
mc,
url,
element,
"in",
"plural",
"name=str1",
type,
"name=num1",
Integer.toString(num));
if (result == null && OutLoud.hprDefltMsg)
result = "(Start of " + type + " menu with " + num + " items.)";
} else {
result =
OutLoud.buildResultString(
mc,
url,
element,
"in",
"singular",
"name=str1",
type);
if (result == null && OutLoud.hprDefltMsg)
result = "(Start of " + type + " menu with 1 item.)";
}
if (result != null)
result = result.trim();
return new PacketCollection(
new Packet(element, result, curContext, true));
}
/**
* @see org.eclipse.actf.visualization.engines.voicebrowser.internal.IElementRenderer#getPacketCollectionOut(Element, Context)
*/
public PacketCollection getPacketCollectionOut(
Element element,
Context curContext,
String url,
MessageCollection mc) {
// set `context in' flags
setContextOut(element, curContext);
// build result string
String result =
OutLoud.buildResultString(mc, url, element, "out", null);
if (result == null && OutLoud.hprDefltMsg)
result = "(End of select menu.)";
if (result != null)
result = result.trim();
return new PacketCollection(
new Packet(element, result, curContext, false));
}
/**
* @see org.eclipse.actf.visualization.engines.voicebrowser.internal.IElementRenderer#setContextIn(Context)
*/
public void setContextIn(Element element, Context curContext) {
curContext.setStartSelect(true);
curContext.setGoChild(true);
curContext.setLineDelimiter(true);
curContext.setLinkTag(false);
}
/**
* @see org.eclipse.actf.visualization.engines.voicebrowser.internal.IElementRenderer#setContextOut(Context)
*/
public void setContextOut(Element element, Context curContext) {
curContext.setStartSelect(false);
curContext.setGoChild(true);
curContext.setLineDelimiter(true);
curContext.setLinkTag(false);
}
}