/******************************************************************************* * 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 org.jboss.tools.jsf.vpe.richfaces.ComponentUtil; import org.jboss.tools.vpe.editor.context.VpePageContext; 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.mozilla.interfaces.nsIDOMDocument; import org.mozilla.interfaces.nsIDOMElement; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * Template for Rich Faces DataTableFilterSlider */ public class RichFacesDataFilterSliderTemplate extends AbstractRichFacesTemplate { /** path to CSS file */ static final String STYLE_PATH = "/dataFilterSlider/dataFilterSlider.css"; //$NON-NLS-1$ static final String CENTER_SLIDER = "/dataFilterSlider/pos.gif"; //$NON-NLS-1$ private static final int DEFAULT_WIDTH = 200; private static final int ZERO = 0; private static final int TRAILER_LEFT_OFFSET = -38; private static final String DEFAULT_SLIDER_WIDTH = "7px"; //$NON-NLS-1$ private static final String DEFAULT_SLIDER_HEIGHT = "8px"; //$NON-NLS-1$ private static final String DEFAULT_SLIDER_BORDER = "0px"; //$NON-NLS-1$ /* Default and RichFaces styles */ /** DEFAULT_SLIDER_CONTAINER_STYLE */ final static private String DEFAULT_SLIDER_CONTAINER_STYLE = "slider-container"; //$NON-NLS-1$ /** DEFAULT_RANGE_STYLE */ final static private String DEFAULT_RANGE_STYLE = "range"; //$NON-NLS-1$ /** DEFAULT_RANGE_DECOR_STYLE */ final static private String DEFAULT_RANGE_DECOR_STYLE = "range-decor"; //$NON-NLS-1$ /** DEFAULT_TRAILER_STYLE */ final static private String DEFAULT_TRAILER_STYLE = "trailer"; //$NON-NLS-1$ /** DEFAULT_TRACK_STYLE */ final static private String DEFAULT_TRACK_STYLE = "track"; //$NON-NLS-1$ /** DEFAULT_HANDLE_STYLE */ final static private String DEFAULT_HANDLE_STYLE = "handle"; //$NON-NLS-1$ /** DEFAULT_HANDLE_STYLE */ final static private String DEFAULT_SLIDER_INPUT_FIELD_STYLE = "slider-input-field"; //$NON-NLS-1$ /** RICH_DFS_CONTAINER_STYLE */ final static private String RICH_DFS_CONTAINER_STYLE = "rich-dataFilterSlider-container"; //$NON-NLS-1$ /** RICH_DFS_RANGE_STYLE */ final static private String RICH_DFS_RANGE_STYLE = "rich-dataFilterSlider-range"; //$NON-NLS-1$ /** RICH_DFS_RANGE_DECOR_STYLE */ final static private String RICH_DFS_RANGE_DECOR_STYLE = "rich-dataFilterSlider-range-decor"; //$NON-NLS-1$ /** RICH_DFS_TRAILER_STYLE */ final static private String RICH_DFS_TRAILER_STYLE = "rich-dataFilterSlider-trailer"; //$NON-NLS-1$ /** RICH_DFS_TRACK_STYLE */ final static private String RICH_DFS_TRACK_STYLE = "rich-dataFilterSlider-track"; //$NON-NLS-1$ /** RICH_DFS_HANDLE_STYLE */ final static private String RICH_DFS_HANDLE_STYLE = "rich-dataFilterSlider-handle"; //$NON-NLS-1$ /** RICH_DFS_INPUT_FIELD_STYLE */ final static private String RICH_DFS_INPUT_FIELD_STYLE = "rich-dataFilterSlider-input-field"; //$NON-NLS-1$ /** Component style attributes */ final static String RANGE_STYLE_CLASS_ATTR = "rangeStyleClass"; //$NON-NLS-1$ final static String FIELD_STYLE_CLASS_ATTR = "fieldStyleClass"; //$NON-NLS-1$ final static String HANDLE_STYLE_CLASS_ATTR = "handleStyleClass"; //$NON-NLS-1$ final static String TRACK_STYLE_CLASS_ATTR = "trackStyleClass"; //$NON-NLS-1$ final static String TRAILER_STYLE_CLASS_ATTR = "trailerStyleClass"; //$NON-NLS-1$ /** * Default constructor. */ public RichFacesDataFilterSliderTemplate() { 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, STYLE_PATH, "richFacesDataFilterSlider"); //$NON-NLS-1$ Element sourceElement = (Element) sourceNode; // create high level container DIV tag element String style = ComponentUtil.getAttribute(sourceElement, RichFaces.ATTR_STYLE); String styleClass = ComponentUtil.getAttribute(sourceElement, RichFaces.ATTR_STYLE_CLASS); styleClass = DEFAULT_SLIDER_CONTAINER_STYLE + Constants.WHITE_SPACE + RICH_DFS_CONTAINER_STYLE + Constants.WHITE_SPACE + styleClass; nsIDOMElement parentDiv = createDIV(visualDocument, styleClass, style); // create RANGE container DIV tag element String width = ComponentUtil.getAttribute(sourceElement, HTML.STYLE_PARAMETER_WIDTH); if (width == null || width.equals(Constants.EMPTY)) { width = new Integer(DEFAULT_WIDTH).toString(); } style = HTML.STYLE_PARAMETER_WIDTH + Constants.COLON + width + Constants.PIXEL + Constants.SEMICOLON; styleClass = ComponentUtil.getAttribute(sourceElement, RANGE_STYLE_CLASS_ATTR); styleClass = DEFAULT_RANGE_STYLE + Constants.WHITE_SPACE + RICH_DFS_RANGE_STYLE + Constants.WHITE_SPACE + styleClass; nsIDOMElement rangeDiv = createDIV(visualDocument, styleClass, style); // create RANGE-DECOR container DIV tag element styleClass = DEFAULT_RANGE_DECOR_STYLE + Constants.WHITE_SPACE + RICH_DFS_RANGE_DECOR_STYLE; nsIDOMElement rangeDecorDiv = createDIV(visualDocument, styleClass, null); // create TRAILER container DIV tag element style = HTML.STYLE_PARAMETER_LEFT + Constants.COLON + TRAILER_LEFT_OFFSET + Constants.PIXEL + Constants.SEMICOLON; styleClass = ComponentUtil.getAttribute(sourceElement, TRAILER_STYLE_CLASS_ATTR); styleClass = DEFAULT_TRAILER_STYLE + Constants.WHITE_SPACE + RICH_DFS_TRAILER_STYLE + Constants.WHITE_SPACE +styleClass; nsIDOMElement trailerDiv = createDIV(visualDocument, styleClass, style); // create TRACK container DIV tag element style = HTML.STYLE_PARAMETER_WIDTH + Constants.COLON + DEFAULT_WIDTH + Constants.PIXEL + Constants.SEMICOLON; styleClass = DEFAULT_TRACK_STYLE + Constants.WHITE_SPACE + RICH_DFS_TRACK_STYLE + Constants.WHITE_SPACE + ComponentUtil.getAttribute(sourceElement, TRACK_STYLE_CLASS_ATTR); nsIDOMElement trackDiv = createDIV(visualDocument, styleClass, style); // create HANDLE container DIV tag element style = HTML.STYLE_PARAMETER_LEFT + Constants.COLON + ZERO + Constants.PIXEL + Constants.SEMICOLON; styleClass = DEFAULT_HANDLE_STYLE + Constants.WHITE_SPACE + RICH_DFS_HANDLE_STYLE + Constants.WHITE_SPACE + ComponentUtil.getAttribute(sourceElement, HANDLE_STYLE_CLASS_ATTR); nsIDOMElement handleDiv = createDIV(visualDocument, styleClass, style); // create element that represents trailer element nsIDOMElement img = visualDocument.createElement(HTML.TAG_IMG); ComponentUtil.setImg(img, CENTER_SLIDER); img.setAttribute(HTML.ATTR_WIDTH, DEFAULT_SLIDER_WIDTH); img.setAttribute(HTML.ATTR_BORDER, DEFAULT_SLIDER_BORDER); img.setAttribute(HTML.ATTR_HEIGHT, DEFAULT_SLIDER_HEIGHT); // create INPUT tag element nsIDOMElement input = visualDocument.createElement(HTML.TAG_INPUT); input.setAttribute(HTML.ATTR_TYPE, HTML.VALUE_TYPE_TEXT); setAttributesToInputElement(input, sourceElement); // create BR tag element nsIDOMElement br = visualDocument.createElement(HTML.TAG_BR); style = HTML.STYLE_PARAMETER_CLEAR + Constants.COLON + HTML.VALUE_CLEAR_BOTH + Constants.SEMICOLON; br.setAttribute(HTML.ATTR_STYLE, style); // create DOM tree in correspondence order parentDiv.appendChild(rangeDiv); rangeDiv.appendChild(rangeDecorDiv); rangeDecorDiv.appendChild(trailerDiv); trailerDiv.appendChild(trackDiv); trackDiv.appendChild(handleDiv); handleDiv.appendChild(img); parentDiv.appendChild(input); parentDiv.appendChild(br); // Create return variable contains template VpeCreationData creationData = new VpeCreationData(parentDiv); return creationData; } /** * Method for create DIV tag and set attributes * * @param visualDocument nsIDOMDocument value * @param styleClass String value * @param style String value */ private nsIDOMElement createDIV(nsIDOMDocument visualDocument, String styleClass, String style) { nsIDOMElement div = visualDocument.createElement(HTML.TAG_DIV); if (styleClass != null && !styleClass.equals(Constants.EMPTY)) { div.setAttribute(HTML.ATTR_CLASS, styleClass); } if (style != null && !style.equals(Constants.EMPTY)) { div.setAttribute(HTML.ATTR_STYLE, style); } return div; } /** * Set attributes for INPUT element * * @param inputElement nsIDOMElement object * @param sourceElement Element object */ private void setAttributesToInputElement(nsIDOMElement inputElement, Element sourceElement) { String styleClass = ComponentUtil.getAttribute(sourceElement, FIELD_STYLE_CLASS_ATTR); styleClass = DEFAULT_SLIDER_INPUT_FIELD_STYLE + Constants.WHITE_SPACE + RICH_DFS_INPUT_FIELD_STYLE + Constants.WHITE_SPACE + styleClass; String value = getAttribute("handleValue", sourceElement); //$NON-NLS-1$ inputElement.setAttribute(HTML.ATTR_CLASS, styleClass); inputElement.setAttribute(HTML.ATTR_VALUE, value); } /** * @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; } }