/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and 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 * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.jsf.vpe.richfaces.template; import java.util.List; import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil; import org.jboss.tools.vpe.editor.context.VpePageContext; import org.jboss.tools.vpe.editor.mapping.AttributeData; import org.jboss.tools.vpe.editor.mapping.NodeData; import org.jboss.tools.vpe.editor.mapping.VpeElementData; import org.jboss.tools.vpe.editor.template.VpeChildrenInfo; import org.jboss.tools.vpe.editor.template.VpeCreationData; import org.jboss.tools.vpe.editor.util.Constants; import org.jboss.tools.vpe.editor.util.HTML; import org.jboss.tools.vpe.editor.util.VisualDomUtil; import org.mozilla.interfaces.nsIDOMDocument; import org.mozilla.interfaces.nsIDOMElement; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * Template for input number spinner control */ public class RichFacesInputNumberSpinnerTemplate extends /* AbstractRichFacesInputNumberTemplate */AbstractEditableRichFacesTemplate { /** CSS_FILE_NAME */ final static private String CSS_FILE_NAME = "inputNumberSpinner/inputNumberSpinner.css"; //$NON-NLS-1$ /** IMAGE_NAME_UP */ final static private String IMAGE_NAME_UP = "/inputNumberSpinner/up.gif"; //$NON-NLS-1$ /** IMAGE_NAME_DOWN */ final static private String IMAGE_NAME_DOWN = "/inputNumberSpinner/down.gif"; //$NON-NLS-1$ /** DEFAULT_INPUT_SIZE */ final static private String DEFAULT_INPUT_SIZE = "10px"; //$NON-NLS-1$ final static private String DEFAULT_ZERO_SIZE = "0px"; //$NON-NLS-1$ final static private String DEFAULT_WIDTH = "1%"; //$NON-NLS-1$ final static private String DEFAULT_CONTAINER_WRAPPER_WIDTH = "2%"; //$NON-NLS-1$ /* Default and RichFaces styles */ /** DEFAULT_CONTAINER_STYLE */ final static private String DEFAULT_CONTAINER_STYLE = "dr-spnr-c"; //$NON-NLS-1$ /** DEFAULT_INPUT_STYLE */ final static private String DEFAULT_INPUT_STYLE = "dr-spnr-i"; //$NON-NLS-1$ /** DEFAULT_INPUT_CONTAINER_STYLE */ final static private String DEFAULT_INPUT_CONTAINER_STYLE = "dr-spnr-e"; //$NON-NLS-1$ /** DEFAULT_BUTTONS_STYLE */ final static private String DEFAULT_BUTTONS_STYLE = "dr-spnr-b"; //$NON-NLS-1$ /** DEFAULT_BUTTON_STYLE */ final static private String DEFAULT_BUTTON_STYLE = "dr-spnr-bn"; //$NON-NLS-1$ /** DISABLED_INPUT_STYLE applied for INPUT tag element in case of DISABLING */ final static private String DISABLED_INPUT_STYLE = "color:grey"; //$NON-NLS-1$ /* RichFaces styles for component elements */ /** RICH_SPINNER_C_STYLE */ final static private String RICH_SPINNER_C_STYLE = "rich-spinner-c"; //$NON-NLS-1$ /** RICH_SPINNER_INPUT_CONTAINER_STYLE */ final static private String RICH_SPINNER_INPUT_CONTAINER_STYLE = "rich-spinner-input-container"; //$NON-NLS-1$ /** RICH_SPINNER_INPUT_STYLE */ final static private String RICH_SPINNER_INPUT_STYLE = "rich-spinner-input"; //$NON-NLS-1$ /** RICH_SPINNER_BUTTON_STYLE */ final static private String RICH_SPINNER_BUTTON_STYLE = "rich-spinner-button"; //$NON-NLS-1$ /** RICH_SPINNER_BUTTONS_STYLE */ final static private String RICH_SPINNER_BUTTONS_STYLE = "rich-spinner-buttons"; //$NON-NLS-1$ /** * Default constructor. */ public RichFacesInputNumberSpinnerTemplate() { super(); } /** * Creates a node of the visual tree on the node of the source tree. This * visual node should not have the parent node This visual node can have * child nodes. * * @param pageContext * Contains the information on edited page. * @param sourceNode * The current node of the source tree. * @param visualDocument * The document of the visual tree. * @return The information on the created node of the visual tree. */ public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) { // Set a css for this element ComponentUtil.setCSSLink(pageContext, CSS_FILE_NAME, "richFacesInputNumberSpinner"); //$NON-NLS-1$ Element sourceElement = (Element) sourceNode; nsIDOMElement table = visualDocument.createElement(HTML.TAG_TABLE); table.setAttribute(HTML.ATTR_BORDER, DEFAULT_ZERO_SIZE); table.setAttribute(HTML.ATTR_CELLPADDING, DEFAULT_ZERO_SIZE); table.setAttribute(HTML.ATTR_CELLSPACING, DEFAULT_ZERO_SIZE); table.setAttribute(HTML.ATTR_WIDTH, DEFAULT_CONTAINER_WRAPPER_WIDTH); VpeElementData elementData = new VpeElementData(); nsIDOMElement row = visualDocument.createElement(HTML.TAG_TR); // create input element nsIDOMElement cellInput = visualDocument.createElement(HTML.TAG_TD); cellInput.setAttribute(HTML.ATTR_CLASS, DEFAULT_INPUT_CONTAINER_STYLE + Constants.WHITE_SPACE + RICH_SPINNER_INPUT_CONTAINER_STYLE); cellInput.setAttribute(HTML.ATTR_WIDTH, DEFAULT_WIDTH); cellInput.appendChild(createInputElement(visualDocument, sourceElement, elementData)); row.appendChild(cellInput); // create arrows cell nsIDOMElement cellArrows = visualDocument.createElement(HTML.TAG_TD); cellArrows.setAttribute(HTML.ATTR_CLASS, DEFAULT_BUTTONS_STYLE + Constants.WHITE_SPACE + RICH_SPINNER_BUTTONS_STYLE); cellArrows.setAttribute(HTML.ATTR_WIDTH, DEFAULT_WIDTH); cellArrows.appendChild(createArrowsElement(visualDocument, sourceNode)); row.appendChild(cellArrows); table.appendChild(row); String tmp = getAttribute(sourceElement, RichFaces.ATTR_STYLE); if (!tmp.equals(Constants.EMPTY)) { table.setAttribute(HTML.ATTR_STYLE, tmp); } tmp = DEFAULT_CONTAINER_STYLE + Constants.WHITE_SPACE + RICH_SPINNER_C_STYLE + Constants.WHITE_SPACE + getAttribute(sourceElement, RichFaces.ATTR_STYLE_CLASS); table.setAttribute(HTML.ATTR_CLASS, tmp); /* * https://jira.jboss.org/jira/browse/JBIDE-3225 * Component should render its children. */ VpeCreationData creationData = VisualDomUtil.createTemplateWithTextContainer( sourceElement, table, HTML.TAG_DIV, visualDocument); return creationData; } /** * Create a HTML-part containing arrows elements * * @param visualDocument * The current node of the source tree. * @param sourceNode * The document of the visual tree. * @return a HTML-part containing arrows elements */ private nsIDOMElement createArrowsElement(nsIDOMDocument visualDocument, Node sourceNode) { nsIDOMElement table = visualDocument.createElement(HTML.TAG_TABLE); table.setAttribute(HTML.ATTR_BORDER, DEFAULT_ZERO_SIZE); table.setAttribute(HTML.ATTR_CELLPADDING, DEFAULT_ZERO_SIZE); table.setAttribute(HTML.ATTR_CELLSPACING, DEFAULT_ZERO_SIZE); nsIDOMElement rowUp = visualDocument.createElement(HTML.TAG_TR); nsIDOMElement cellUp = visualDocument.createElement(HTML.TAG_TD); nsIDOMElement imageUpElement = visualDocument.createElement(HTML.TAG_INPUT); ComponentUtil.setImg(imageUpElement, IMAGE_NAME_UP); imageUpElement.setAttribute(HTML.ATTR_BORDER, DEFAULT_ZERO_SIZE); imageUpElement.setAttribute(HTML.ATTR_TYPE, HTML.VALUE_TYPE_IMAGE); imageUpElement.setAttribute(HTML.ATTR_CLASS, DEFAULT_BUTTON_STYLE + Constants.WHITE_SPACE + RICH_SPINNER_BUTTON_STYLE); cellUp.appendChild(imageUpElement); rowUp.appendChild(cellUp); table.appendChild(rowUp); nsIDOMElement rowDown = visualDocument.createElement(HTML.TAG_TR); nsIDOMElement cellDown = visualDocument.createElement(HTML.TAG_TD); nsIDOMElement imageDownElement = visualDocument.createElement(HTML.TAG_INPUT); ComponentUtil.setImg(imageDownElement, IMAGE_NAME_DOWN); imageDownElement.setAttribute(HTML.ATTR_BORDER, DEFAULT_ZERO_SIZE); imageDownElement.setAttribute(HTML.ATTR_TYPE, HTML.VALUE_TYPE_IMAGE); imageDownElement.setAttribute(HTML.ATTR_CLASS, DEFAULT_BUTTON_STYLE + Constants.WHITE_SPACE + RICH_SPINNER_BUTTON_STYLE); cellDown.appendChild(imageDownElement); rowDown.appendChild(cellDown); table.appendChild(rowDown); return table; } /** * Create a HTML-part containg input element * * @param visualDocument * The current node of the source tree. * @param sourceNode * The document of the visual tree. * @param elementData * @return a HTML-part containg input element */ private nsIDOMElement createInputElement(nsIDOMDocument visualDocument, Element sourceElement, VpeElementData elementData) { nsIDOMElement inputElement = visualDocument.createElement(HTML.TAG_INPUT); inputElement.setAttribute(HTML.ATTR_CLASS, getInputClass(sourceElement)); String attrStyle = getInputStyle(sourceElement); if (!attrStyle.equals(Constants.EMPTY)) { inputElement.setAttribute(HTML.ATTR_STYLE, attrStyle); } inputElement.setAttribute(HTML.ATTR_TYPE, HTML.VALUE_TYPE_TEXT); inputElement.setAttribute(HTML.ATTR_SIZE, getInputSize(sourceElement)); inputElement.setAttribute(HTML.ATTR_VALUE, getInputValue(sourceElement)); if ((sourceElement).hasAttribute(RichFaces.ATTR_VALUE)) { elementData.addNodeData(new NodeData(sourceElement .getAttributeNode(RichFaces.ATTR_VALUE), inputElement, true)); } else { elementData.addNodeData(new AttributeData(RichFaces.ATTR_VALUE, inputElement, true)); } return inputElement; } /** * Return a input value * * @param sourceNode * a sourceNode * @return a input value */ private String getInputValue(Element sourceElement) { String returnValue = getAttribute(sourceElement, RichFaces.ATTR_VALUE); return returnValue; } /** * Return a input style * * @param sourceNode * a sourceNode * @return a input style */ private String getInputStyle(Element sourceElement) { String returnValue = getAttribute(sourceElement, RichFaces.ATTR_INPUT_STYLE); if ((sourceElement).hasAttribute(RichFaces.ATTR_DISABLED)) { String disabled = getAttribute(sourceElement, RichFaces.ATTR_DISABLED); if (disabled != null && disabled.equals(Constants.TRUE)) { returnValue += Constants.SEMICOLON + DISABLED_INPUT_STYLE; } } return returnValue; } /** * Return a input size * * @param sourceNode * a sourceNode * @return a input size */ protected String getInputSize(Element sourceElement) { String returnValue = DEFAULT_INPUT_SIZE; String tmp = getAttribute(sourceElement, RichFaces.ATTR_INPUT_SIZE); if (tmp.length() != 0) { returnValue = tmp; } return returnValue; } /** * Return a input class * * @param sourceNode * a sourceNode * @return a input class */ public String getInputClass(Element sourceElement) { String returnValue = DEFAULT_INPUT_STYLE; // append default richfaces component style class returnValue += Constants.WHITE_SPACE + RICH_SPINNER_INPUT_STYLE; // append custom input style class String tmp = getAttribute(sourceElement, RichFaces.ATTR_INPUT_CLASS); if (tmp.length() != 0) { returnValue += Constants.WHITE_SPACE +tmp; } return returnValue; } /** * @see org.jboss.tools.vpe.editor.template.VpeAbstractTemplate#recreateAtAttrChange(VpePageContext, Element, * nsIDOMDocument, nsIDOMElement, Object, String, String) */ @Override public boolean recreateAtAttrChange(VpePageContext pageContext, Element sourceElement, nsIDOMDocument visualDocument, nsIDOMElement visualNode, Object data, String name, String value) { return true; } }