/*******************************************************************************
* Copyright (c) 2007-2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.vpe.jsf.template;
import java.util.ArrayList;
import java.util.List;
import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate;
import org.jboss.tools.vpe.editor.template.VpeChildrenInfo;
import org.jboss.tools.vpe.editor.template.VpeCreationData;
import org.jboss.tools.vpe.editor.util.HTML;
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* @author dmaliarevich
*
*/
public class JsfSelectManyCheckbox extends VpeAbstractTemplate {
private static final String PAGE_DIRECTION = "pageDirection"; //$NON-NLS-1$
private static final String LINE_DIRECTION = "lineDirection"; //$NON-NLS-1$
/* h:SelectManyCheckbox attributes */
private static final String BORDER = "border"; //$NON-NLS-1$
private String style;
private String styleClass;
private String border;
private String layout;
/**
* list of visible children
*/
private static List<String> CHILDREN_LIST = new ArrayList<String>();
static {
CHILDREN_LIST.add(JSF.TAG_SELECT_ITEM);
CHILDREN_LIST.add(JSF.TAG_SELECT_ITEMS);
}
/**
*
*/
public JsfSelectManyCheckbox() {
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.vpe.editor.template.VpeTemplate#create(org.jboss.tools
* .vpe.editor.context.VpePageContext, org.w3c.dom.Node,
* org.mozilla.interfaces.nsIDOMDocument)
*/
public VpeCreationData create(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument) {
readAttributes(sourceNode);
Element sourceElement = (Element) sourceNode;
nsIDOMElement div = visualDocument.createElement(HTML.TAG_DIV);
nsIDOMElement table = visualDocument.createElement(HTML.TAG_TABLE);
div.appendChild(table);
nsIDOMElement tr = null;
nsIDOMElement td = null;
if (attrPresents(style)) {
table.setAttribute(HTML.ATTR_STYLE, style);
}
if (attrPresents(styleClass)) {
table.setAttribute(HTML.ATTR_CLASS, styleClass);
}
if (attrPresents(border)) {
table.setAttribute(BORDER, border);
}
VpeCreationData creationData = new VpeCreationData(div);
NodeList children = sourceNode.getChildNodes();
if (attrPresents(layout) && PAGE_DIRECTION.equalsIgnoreCase(layout)) {
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
// if children is one of visible items
if (CHILDREN_LIST.contains(child.getLocalName())) {
tr = visualDocument.createElement(HTML.TAG_TR);
td = visualDocument.createElement(HTML.TAG_TD);
tr.appendChild(td);
table.appendChild(tr);
VpeChildrenInfo info = new VpeChildrenInfo(td);
info.addSourceChild(child);
creationData.addChildrenInfo(info);
}
}
} else {
tr = visualDocument.createElement(HTML.TAG_TR);
table.appendChild(tr);
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
// if children is one of visible items
if (CHILDREN_LIST.contains(child.getLocalName())) {
td = visualDocument.createElement(HTML.TAG_TD);
tr.appendChild(td);
VpeChildrenInfo info = new VpeChildrenInfo(td);
info.addSourceChild(child);
creationData.addChildrenInfo(info);
}
}
}
return creationData;
}
/**
* Read attributes from the source element.
*
* @param sourceNode
* the source node
*/
private void readAttributes(Node sourceNode) {
Element source = (Element) sourceNode;
style = source.getAttribute(JSF.ATTR_STYLE);
styleClass = source.getAttribute(JSF.ATTR_STYLE_CLASS);
border = source.getAttribute(BORDER);
layout = source.getAttribute(JSF.ATTR_LAYOUT);
}
/**
* Checks is attribute presents.
*
* @param attr
* the attribute
*
* @return true, if successful
*/
private boolean attrPresents(String attr) {
return ((null != attr) && (attr.length() != 0));
}
}