/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. 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: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.pagedesigner.jsf.ui.converter.jsfhtml; import java.util.List; import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants; import org.eclipse.jst.pagedesigner.IHTMLConstants; import org.eclipse.jst.pagedesigner.converter.ConverterUtil; import org.w3c.dom.Element; import org.w3c.dom.Text; /** * @author mengbo * @version 1.5 * @deprecated Use DTTagConverter meta-data instead */ public class TableBasedSelectTagConverter extends SelectTagConverter { private String _inputType; /** * @param host * @param inputType */ public TableBasedSelectTagConverter(Element host, String inputType) { super(host); this._inputType = inputType; } /* (non-Javadoc) * @see org.eclipse.jst.pagedesigner.converter.AbstractTagConverter#doConvertRefresh() */ protected Element doConvertRefresh() { Element hostEle = getHostElement(); // Render a "table" element. Element tableEle = createElement(IHTMLConstants.TAG_TABLE); // If the "styleClass" is specified, render the value of the "styleClass" // attribute as the value of the "class" attribute on the "table" element. ConverterUtil.copyAttribute(hostEle, IJSFConstants.ATTR_STYLECLASS, tableEle, IHTMLConstants.ATTR_CLASS); // If the "style", "border" attributes are specified, pass them thru. ConverterUtil.copyAttribute(hostEle, IJSFConstants.ATTR_STYLE, tableEle, IHTMLConstants.ATTR_STYLE); ConverterUtil.copyAttribute(hostEle, IJSFConstants.ATTR_BORDER, tableEle, IHTMLConstants.ATTR_BORDER); // If the "layout" attribute is specified, and its value is "pageDirection", // render the children elements vertically, otherwise horizontally, in the table. boolean horizontal = true; if ("pageDirection".equalsIgnoreCase(hostEle.getAttribute(IJSFConstants.ATTR_LAYOUT))) //$NON-NLS-1$ { horizontal = false; } Element itemContainer; if (horizontal) { itemContainer = createElement(IHTMLConstants.TAG_TR); tableEle.appendChild(itemContainer); } else { itemContainer = tableEle; } // XXX: If any of the children are an instance of SelectItemGroup, render them as a // nested table. // but at design time, we don't know anything about SelectItemGroup. so will not // rendering nested table. List selectitems = this.getSelectItems(hostEle); // for designer, if there is no item, we still want to render one if (this.isDesignerMode() && selectitems.isEmpty()) { SelectItemModel item = getDefault(hostEle); selectitems.add(item); } boolean isDisabled = Boolean.TRUE.toString() .equalsIgnoreCase(hostEle.getAttribute(IJSFConstants.ATTR_DISABLED)); boolean isReadonly = Boolean.TRUE.toString() .equalsIgnoreCase(hostEle.getAttribute(IJSFConstants.ATTR_READONLY)); for (int i = 0, size = selectitems.size(); i < size; i++) { SelectItemModel item = (SelectItemModel) selectitems.get(i); // Each of the children are ultimately rendererd as follows. // Render a "label" element. Inside of the "label", render an "input" element // of "type" "checkbox" for each child component. Element labelEle = createElement(IHTMLConstants.TAG_LABEL); Element inputEle = createElement(IHTMLConstants.TAG_INPUT); inputEle.setAttribute(IHTMLConstants.ATTR_TYPE, getInputType()); if (isDisabled || item.isDisabled()) { inputEle.setAttribute(IHTMLConstants.ATTR_DISABLED, "disabled"); //$NON-NLS-1$ } if (isReadonly) { inputEle.setAttribute(IHTMLConstants.ATTR_READONLY, "readonly"); //$NON-NLS-1$ } // As an exception to the general // rules about how to handle the "id" attribute, render it as an attribute on // the outer "table" element, the value of which is the clientId of the component // per the rules at the beginning of this specification.The "id" attribute must // not be output on each "input" element. if (item.getId() != null) { labelEle.setAttribute(IHTMLConstants.ATTR_ID, item.getId()); } // The value of the current SelectItem // is rendered as the value of the "value" attribute. If the value of the enclosing // UISelectMany matches the current value, render "checked" as the value of the // "checked" attribute. If the current SelectItem.isDisabled() returns true, // render "disabled" as the value of the "disabled" attribute. if (item.getValue() != null) { inputEle.setAttribute(IHTMLConstants.ATTR_VALUE, item.getValue()); } // XXX: checked and disabled is not handled. // Close out the "input" element and render the return value from // SelectItem.getLabel(). Close out the "label" element and any other nested elements. Text label = createText(item.getDisplayString()); labelEle.appendChild(inputEle); labelEle.appendChild(label); if (horizontal) { Element td = createElement(IHTMLConstants.TAG_TD); td.appendChild(labelEle); itemContainer.appendChild(td); } else { Element tr = createElement(IHTMLConstants.TAG_TR); Element td = createElement(IHTMLConstants.TAG_TD); tr.appendChild(td); td.appendChild(labelEle); itemContainer.appendChild(tr); } } return (tableEle); } /** * @return the input type */ protected String getInputType() { return _inputType; } /* (non-Javadoc) * @see org.eclipse.jst.pagedesigner.converter.AbstractTagConverter#needBorderDecorator() */ public boolean needBorderDecorator() { return true; } }