001: /*
002: * Created on Mar 2, 2005
003: */
004: package com.sun.portal.wireless.htmlconversion.processors;
005:
006: import java.util.HashMap;
007:
008: import org.w3c.dom.Element;
009:
010: import com.sun.portal.wireless.htmlconversion.ParserState;
011:
012: /**
013: * Tag processor for AmlOption tag
014: *
015: * @author ashwin.mathew@sun.com
016: */
017: public class AmlOptionTagProcessor extends BaseTagProcessor {
018:
019: public static final String AML_OPTION = "AmlOption";
020:
021: // Attributes for AmlOption
022: public static final String ATTR_VALUE = "value";
023: public static final String ATTR_SELECTED = "selected";
024: public static final String ATTR_TEXT = "text";
025:
026: // Values for the selected attribute
027: public static final String VAL_SELECTED_TRUE = "true";
028: public static final String VAL_SELECTED_FALSE = "false";
029:
030: // Attributes for the HTML option tag
031: public static final String OPTION_ATTR_VALUE = "value";
032: public static final String OPTION_ATTR_SELECTED = "selected";
033: public static final String OPTION_ATTR_DISABLED = "disabled";
034:
035: private static final String[] supportedTags = { "option" };
036:
037: /* (non-Javadoc)
038: * @see com.sun.portal.wireless.htmlconversion.TagProcessor#getAmlTag()
039: */
040: public String getAmlTag() {
041: return AML_OPTION;
042: }
043:
044: /* (non-Javadoc)
045: * @see com.sun.portal.wireless.htmlconversion.TagProcessor#getSupportedTags()
046: */
047: public String[] getSupportedTags() {
048: return supportedTags;
049: }
050:
051: /* (non-Javadoc)
052: * @see com.sun.portal.wireless.htmlconversion.TagProcessor#canHaveChildren(com.sun.portal.wireless.htmlconversion.ParserState)
053: */
054: public boolean canHaveChildren(ParserState state) {
055: return false;
056: }
057:
058: /* (non-Javadoc)
059: * @see com.sun.portal.wireless.htmlconversion.TagProcessor#startTag(java.lang.String, java.util.HashMap, com.sun.portal.wireless.htmlconversion.ParserState)
060: */
061: public Element startTag(String tagName, HashMap attributes,
062: ParserState state) {
063: if (attributes.keySet().contains(OPTION_ATTR_DISABLED)) {
064: // If it's disabled, don't add it to the parent AmlChoice
065: // Unlike the approach adopted for AmlInpuTagProcessor,
066: // no text is being displayed here, as it would be difficult
067: // to decide exactly how it should be displayed.
068: return null;
069: }
070:
071: Element amlOption = state.newElement(AML_OPTION);
072:
073: String value = (String) attributes.get(OPTION_ATTR_VALUE);
074: if (value != null) {
075: amlOption.setAttribute(ATTR_VALUE, value);
076: }
077:
078: if (attributes.keySet().contains(OPTION_ATTR_SELECTED)) {
079: amlOption.setAttribute(ATTR_SELECTED, VAL_SELECTED_TRUE);
080: }
081:
082: return amlOption;
083: }
084:
085: /* (non-Javadoc)
086: * @see com.sun.portal.wireless.htmlconversion.TagProcessor#endTag(java.lang.String, com.sun.portal.wireless.htmlconversion.ParserState)
087: */
088: public Element endTag(String tag, ParserState state) {
089: Element currentTag = state.getCurrentOutputTag();
090:
091: // Note that in the case of badly formed HTML, with
092: // formatting elements inserted inside Option text,
093: // this will fail to function properly
094: if (currentTag.getTagName().equals(AML_OPTION)
095: && state.isTextAvailable()) {
096: currentTag.setAttribute(ATTR_TEXT, state.getText());
097: }
098:
099: state.clearText();
100:
101: return currentTag;
102: }
103:
104: /**
105: * Creates a new AmlOption element.
106: *
107: * @param value
108: * @param isSelected
109: * @param text
110: * @param state
111: * @return
112: */
113: public static Element createAmlOption(String value,
114: boolean isSelected, String text, ParserState state) {
115: Element amlOption = state.newElement(AML_OPTION);
116:
117: if (value != null) {
118: amlOption.setAttribute(ATTR_VALUE, value);
119: }
120:
121: if (isSelected) {
122: amlOption.setAttribute(ATTR_SELECTED, VAL_SELECTED_TRUE);
123: }
124:
125: if (text != null) {
126: amlOption.setAttribute(ATTR_TEXT, text);
127: }
128:
129: return amlOption;
130: }
131: }
|