/******************************************************************************* * 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.richfaces.template; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil; 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.jboss.tools.vpe.editor.util.VpeStyleUtil; import org.mozilla.interfaces.nsIDOMDocument; import org.mozilla.interfaces.nsIDOMElement; import org.mozilla.interfaces.nsIDOMText; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * Template for <rich:pickList/>. * * @author Eugene Stherbin */ public class RichFacesPickListTemplate extends VpeAbstractTemplate { /** attribute name of height of source list. */ private static final String ATTR_LISTS_HEIGHT = "listsHeight"; //$NON-NLS-1$ /** Customizes vertically a position of move/copy controls relatively to lists. */ private static final String ATTR_MOVE_CONTROLS_VERTICAL_ALIGN = "moveControlsVerticalAlign"; //$NON-NLS-1$ /** The Constant ATTR_SHOW_BUTTON_LABELS. */ private static final String ATTR_SHOW_BUTTON_LABELS = "showButtonsLabel"; //$NON-NLS-1$ /** attribute name of width of source list. */ private static final String ATTR_SOURCE_LIST_WIDTH = "sourceListWidth"; //$NON-NLS-1$ /** attribute name of width of target list. */ private static final String ATTR_TARGET_LIST_WIDTH = "targetListWidth"; //$NON-NLS-1$ /** path to img. */ private static final String BUTTON_IMG_PATH = "pickList/button.gif"; //$NON-NLS-1$ /** The Constant CLASS_SUFFIX. */ private static final String CLASS_SUFFIX = "Class"; //$NON-NLS-1$ /** The Constant CONTROL_MAP_KEY. */ private static final String CONTROL_MAP_KEY = "control"; //$NON-NLS-1$ /** The Constant CSS_EXTENSION. */ private static final String CSS_EXTENSION = "pickList"; //$NON-NLS-1$ /** default button align. */ private static final String DEFAULT_BUTTON_ALIGN = HTML.VALUE_ALIGN_MIDDLE; /** default value of height of box(list). */ private static final String DEFAULT_LIST_HEIGHT = "140px"; //$NON-NLS-1$ /** default value of width of box(list). */ private static final String DEFAULT_LIST_WIDTH = "140px"; //$NON-NLS-1$ /** The Constant LABEL_SUFFIX. */ private static final String LABEL_SUFFIX = "Label"; //$NON-NLS-1$ /** The Constant LIST_MAP_KEY. */ private static final String LIST_MAP_KEY = "list"; //$NON-NLS-1$ /** The Constant RICH_LIST_PICKLIST_BUTTON_CONTENT_CSS_CLASS. */ private static final String RICH_LIST_PICKLIST_BUTTON_CONTENT_CSS_CLASS = "rich-list-picklist-button-content"; //$NON-NLS-1$ /** The Constant RICH_LIST_PICKLIST_BUTTON_CSS_CLASS. */ private static final String RICH_LIST_PICKLIST_BUTTON_CSS_CLASS = "rich-list-picklist-button"; //$NON-NLS-1$ /** The Constant RICH_PICKLIST_CONTROL_BUTTON_CSS_CLASS. */ private static final String RICH_PICKLIST_CONTROL_BUTTON_CSS_CLASS = "rich-picklist-control-button-class"; //$NON-NLS-1$ /** The Constant RICH_PICKLIST_INTERNAL_TAB_CSS_CLASS. */ private static final String RICH_PICKLIST_INTERNAL_TAB_CSS_CLASS = "rich-picklist-internal-tab"; //$NON-NLS-1$ /** The Constant RICH_PICKLIST_LIST_CONTENT_CSS_CLASS. */ private static final String RICH_PICKLIST_LIST_CONTENT_CSS_CLASS = "rich-picklist-list-content"; //$NON-NLS-1$ /** The Constant RICH_PICKLIST_LIST_CSS_CLASS. */ private static final String RICH_PICKLIST_LIST_CSS_CLASS = "rich-picklist-list"; //$NON-NLS-1$ /** The Constant RICH_PICKLIST_SOURCE_CELL_CSS_CLASS. */ private static final String RICH_PICKLIST_SOURCE_CELL_CSS_CLASS = "rich-picklist-source-cell"; //$NON-NLS-1$ /** The Constant SELECT_ITEM. */ private static final String SELECT_ITEM = "selectItem"; //$NON-NLS-1$ /** The Constant SOURCE_LIST. */ private static final String SOURCE_LIST = "source"; //$NON-NLS-1$ /** The Constant SPACER_GIF. */ private static final String SPACER_GIF = "/spacer.gif"; //$NON-NLS-1$ /** path to css. */ private static final String STYLE_PATH = CSS_EXTENSION + "/pickList.css"; //$NON-NLS-1$ /** The Constant styleClasses. */ private static final Map<String, String> styleClasses = new HashMap<String, String>(); /** The Constant TARGET_LIST. */ private static final String TARGET_LIST = "target"; //$NON-NLS-1$ /** The Constant TD_STYLE_1. */ private static final String TD_STYLE_1 = "border: 0px none ; padding: 0px;"; //$NON-NLS-1$ /** The Constant WIDTH_15. */ private static final String WIDTH_15 = "15"; //$NON-NLS-1$ /** * Gets the children. * * @param sourceNode the source node * * @return the children */ public static List<Node> getChildren(Node sourceNode) { final ArrayList<Node> children = new ArrayList<Node>(); final NodeList nodeList = sourceNode.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { final Node child = nodeList.item(i); children.add(child); } return children; } /** button images. */ private final Map<LabelKey, String> buttonImages = new HashMap<LabelKey, String>(); /** default labels. */ private final Map<LabelKey, String> defaultLabels = new HashMap<LabelKey, String>(); /** style classes. */ private final Map<String, String> defaultStyleClasses = new HashMap<String, String>(); /** facetLabels. */ private final Map<String, Node> facetLabels = new HashMap<String, Node>(); /** The is show button labels. */ private boolean isShowButtonLabels; /** labels for controls. */ private final Map<String, String> labels = new HashMap<String, String>(); /** value of height attribute of lists (source/target). */ private String listsHeight; /** value of vertical-align attribute for source (copy/remove) buttons. */ private String moveControlsAlign; /** source buttons. */ private final List<String> sourceButtons = new ArrayList<String>(); /** value of width attribute of source list. */ private String sourceListsWidth; /** target buttons. */ private final List<String> targetButtons = new ArrayList<String>(); /** value of width attribute of target list. */ private String targetListsWidth; private static final String REMOVE_ALL_CONTROL = "\u21D0"; //$NON-NLS-1$ private static final String REMOVE_CONTROL = "\u2190"; //$NON-NLS-1$ private static final String COPY_CONTROL = "\u2192"; //$NON-NLS-1$ private static final String COPY_ALL_CONTROL = "\u21D2"; //$NON-NLS-1$ private enum LabelKey { COPY_ALL_CONTROL("copyAllControl"), //$NON-NLS-1$ COPY_CONTROL("copyControl"), //$NON-NLS-1$ REMOVE_CONTROL("removeControl"), //$NON-NLS-1$ REMOVE_ALL_CONTROL("removeAllControl"); //$NON-NLS-1$ private String value; LabelKey(String val) { this.value = val; } public String getValue() { return this.value; } } /** * The Constructor. */ public RichFacesPickListTemplate() { super(); init(); } /** * Adds the childrens. * * @param td the td * @param visualDocument the visual document * @param creationData the creation data * @param children the children */ private void addChildrens(nsIDOMDocument visualDocument, List<Node> children, nsIDOMElement td, VpeCreationData creationData) { List<Element> selectItems = new ArrayList<Element>(); for (Node child : children) { if ((child instanceof Element) && (child.getNodeName().indexOf(SELECT_ITEM)) > 1) { // createItemDiv(visualDocument,(Element)child,td); selectItems.add((Element) child); } } if (selectItems.size() > 0) { final nsIDOMElement topItemDiv = visualDocument.createElement(HTML.TAG_DIV); topItemDiv.setAttribute(HTML.ATTR_CLASS, RICH_PICKLIST_LIST_CSS_CLASS); final nsIDOMElement pickListContentItemDiv = visualDocument.createElement(HTML.TAG_DIV); pickListContentItemDiv.setAttribute(HTML.ATTR_CLASS, RICH_PICKLIST_LIST_CONTENT_CSS_CLASS); pickListContentItemDiv.setAttribute(HTML.ATTR_STYLE, VpeStyleUtil.PARAMETER_WIDTH + VpeStyleUtil.COLON_STRING + sourceListsWidth + VpeStyleUtil.SEMICOLON_STRING + VpeStyleUtil.PARAMETER_HEIGHT + VpeStyleUtil.COLON_STRING + listsHeight); final nsIDOMElement itemsTable = visualDocument.createElement(HTML.TAG_TABLE); final nsIDOMElement itemsTableTBody = visualDocument.createElement(HTML.TAG_TBODY); itemsTable.setAttribute(HTML.ATTR_CLASS, RICH_PICKLIST_INTERNAL_TAB_CSS_CLASS); itemsTable.setAttribute(HTML.ATTR_CELLPADDING, "0"); //$NON-NLS-1$ itemsTable.setAttribute(HTML.ATTR_CELLPADDING, "0"); //$NON-NLS-1$ final VpeChildrenInfo childrensInfo = new VpeChildrenInfo(itemsTableTBody); creationData.addChildrenInfo(childrensInfo); for (Element selectItem : selectItems) { // itemsTableTBody.appendChild(createItemTr(visualDocument, // selectItem)); childrensInfo.addSourceChild(selectItem); } td.appendChild(topItemDiv); topItemDiv.appendChild(pickListContentItemDiv); pickListContentItemDiv.appendChild(itemsTable); itemsTable.appendChild(itemsTableTBody); } } /** * Clear data. */ private void clearData() { labels.clear(); styleClasses.clear(); sourceButtons.clear(); targetButtons.clear(); facetLabels.clear(); } /** * Create. * * @param visualDocument the visual document * @param sourceNode the source node * @param pageContext the page context * * @return the vpe creation data */ @SuppressWarnings("unchecked") public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) { // cast to Element Element sourceElement = (Element) sourceNode; // prepare data prepareData(sourceElement); ComponentUtil.setCSSLink(pageContext, STYLE_PATH, CSS_EXTENSION); // create table element final nsIDOMElement rootTable = visualDocument.createElement(HTML.TAG_TABLE); final nsIDOMElement rootTBody = visualDocument.createElement(HTML.TAG_TBODY); final nsIDOMElement rootTr = visualDocument.createElement(HTML.TAG_TR); final VpeCreationData creationData = new VpeCreationData(rootTable); creationData.addChildrenInfo(new VpeChildrenInfo(null)); rootTable.setAttribute(HTML.ATTR_CLASS, styleClasses.get(RichFaces.ATTR_STYLE)); String attrStyleVal = sourceElement.hasAttribute(RichFaces.ATTR_STYLE) ? sourceElement.getAttribute(RichFaces.ATTR_STYLE) : null; rootTable.setAttribute(HTML.ATTR_STYLE, attrStyleVal); // create source box final nsIDOMElement sourceBoxTd = visualDocument.createElement(HTML.TAG_TD); final nsIDOMElement sourceBox = createBox(visualDocument, creationData, getChildren(sourceNode), SOURCE_LIST); sourceBox.setAttribute(HTML.ATTR_STYLE, VpeStyleUtil.PARAMETER_WIDTH + VpeStyleUtil.COLON_STRING + sourceListsWidth + VpeStyleUtil.SEMICOLON_STRING + VpeStyleUtil.PARAMETER_HEIGHT + VpeStyleUtil.COLON_STRING + listsHeight + VpeStyleUtil.SEMICOLON_STRING); sourceBoxTd.appendChild(sourceBox); // create source buttons nsIDOMElement controlsButtonsTd = visualDocument.createElement(HTML.TAG_TD); nsIDOMElement sourceButtonsBlock = createButtonsBlock(visualDocument, creationData); controlsButtonsTd.appendChild(sourceButtonsBlock); // set vertical-align attribute for source buttons controlsButtonsTd.setAttribute(HTML.ATTR_STYLE, VpeStyleUtil.PARAMETR_VERTICAL_ALIGN + VpeStyleUtil.COLON_STRING + moveControlsAlign); // create target box final nsIDOMElement targetBoxTd = visualDocument.createElement(HTML.TAG_TD); final nsIDOMElement targetBox = createBox(visualDocument, creationData, getChildren(sourceNode), TARGET_LIST); targetBox.setAttribute(HTML.ATTR_STYLE, VpeStyleUtil.PARAMETER_WIDTH + VpeStyleUtil.COLON_STRING + targetListsWidth + VpeStyleUtil.SEMICOLON_STRING + VpeStyleUtil.PARAMETER_HEIGHT + VpeStyleUtil.COLON_STRING + listsHeight + VpeStyleUtil.SEMICOLON_STRING); targetBoxTd.appendChild(targetBox); // add all blocks to "tr" rootTr.appendChild(sourceBoxTd); rootTr.appendChild(controlsButtonsTd); rootTr.appendChild(targetBoxTd); rootTBody.appendChild(rootTr); // add "tr" to table rootTable.appendChild(rootTBody); // DOMTreeDumper dumpber = new DOMTreeDumper(); // dumpber.dumpToStream(System.err, rootTable); clearData(); return creationData; } /** * create box (list). * * @param visualDocument the visual document * @param creationData the creation data * @param boxId the box id * @param children the children * * @return the ns IDOM element */ private nsIDOMElement createBox(nsIDOMDocument visualDocument, VpeCreationData creationData, List<Node> children, String boxId) { nsIDOMElement div = visualDocument.createElement(HTML.TAG_DIV); div.setAttribute(HTML.ATTR_CLASS, MessageFormat.format(styleClasses.get(LIST_MAP_KEY), boxId)); // create table element nsIDOMElement box = visualDocument.createElement(HTML.TAG_TABLE); box.setAttribute(HTML.ATTR_CELLSPACING, "0"); //$NON-NLS-1$ box.setAttribute(HTML.ATTR_CELLPADDING, "0"); //$NON-NLS-1$ box.setAttribute(HTML.ATTR_WIDTH, "100%"); //$NON-NLS-1$ box.setAttribute(HTML.ATTR_CLASS, "rich-picklist-body"); //$NON-NLS-1$ final nsIDOMElement td = visualDocument.createElement(HTML.TAG_TD); final nsIDOMElement tr = visualDocument.createElement(HTML.TAG_TR); td.setAttribute(HTML.ATTR_STYLE, TD_STYLE_1); if (SOURCE_LIST.equalsIgnoreCase(boxId)) { addChildrens(visualDocument, children, td, creationData); } box.appendChild(tr); tr.appendChild(td); div.appendChild(box); return div; } /** * create button. * * @param buttonId the button id * @param visualDocument the visual document * @param creationData the creation data * @param buttonImage * * param buttonValue * * * @return the ns IDOM element */ private nsIDOMElement createButton(nsIDOMDocument visualDocument, VpeCreationData creationData, LabelKey buttonId) { nsIDOMElement buttonSpace = visualDocument.createElement(HTML.TAG_DIV); buttonSpace.setAttribute(HTML.ATTR_CLASS, RICH_PICKLIST_CONTROL_BUTTON_CSS_CLASS); // button represent "div" element nsIDOMElement metaButton = visualDocument.createElement(HTML.TAG_DIV); metaButton.setAttribute(HTML.ATTR_STYLE, ComponentUtil.getBackgoundImgStyle(BUTTON_IMG_PATH)); metaButton.setAttribute(HTML.ATTR_CLASS, RICH_LIST_PICKLIST_BUTTON_CSS_CLASS); nsIDOMElement buttonContent = visualDocument.createElement(HTML.TAG_DIV); buttonContent.setAttribute(HTML.ATTR_CLASS, RICH_LIST_PICKLIST_BUTTON_CONTENT_CSS_CLASS); // nsIDOMElement buttonImage = visualDocument.createElement(HTML.TAG_IMG); // buttonImage.setAttribute(HTML.ATTR_WIDTH, WIDTH_15); // buttonImage.setAttribute(HTML.ATTR_HEIGHT, WIDTH_15); // ComponentUtil.setImg(buttonImage, buttonImages.get(buttonId)); // buttonContent.appendChild(buttonImage); if (isShowButtonLabels) { buttonContent.appendChild(visualDocument.createTextNode( buttonImages.get(buttonId) + " " + labels.get(buttonId.getValue()))); //$NON-NLS-1$ } else { buttonContent.appendChild(visualDocument.createTextNode( buttonImages.get(buttonId))); } buttonSpace.appendChild(metaButton); metaButton.appendChild(buttonContent); return buttonSpace; } /** * create buttons block. * * @param visualDocument the visual document * @param creationData the creation data * @param buttonNames the button names * * @return the ns IDOM element */ private nsIDOMElement createButtonsBlock(nsIDOMDocument visualDocument, VpeCreationData creationData) { // create "div" nsIDOMElement buttonsBlock = visualDocument.createElement(HTML.TAG_DIV); buttonsBlock.setAttribute(HTML.ATTR_CLASS, styleClasses.get(CONTROL_MAP_KEY)); for (LabelKey buttonId : LabelKey.values()) { buttonsBlock.appendChild(createButton(visualDocument, creationData, buttonId)); } return buttonsBlock; } /** * Creates the item tr. * * @param td * * param child the child * @param child the child * @param visualDocument the visual document * * @return the ns IDOM element */ private nsIDOMElement createItemTr(nsIDOMDocument visualDocument, Element child) { final nsIDOMElement tr = visualDocument.createElement(HTML.TAG_TR); final nsIDOMElement td = visualDocument.createElement(HTML.TAG_TD); // tr.setAttribute(HTML.ATTR_CLASS, "rich-picklist-source-row"); td.setAttribute(HTML.ATTR_CLASS, RICH_PICKLIST_SOURCE_CELL_CSS_CLASS); nsIDOMElement itemImage = visualDocument.createElement(HTML.TAG_IMG); itemImage.setAttribute(HTML.ATTR_WIDTH, "1px"); //$NON-NLS-1$ itemImage.setAttribute(HTML.ATTR_HEIGHT, "1px"); //$NON-NLS-1$ ComponentUtil.setImg(itemImage, getCssExtension() + SPACER_GIF); tr.appendChild(td); td.appendChild(itemImage); td.appendChild(visualDocument.createTextNode(getTextForSelectItem(child))); return tr; } /** * Gets the css extension. * * @return the css extension */ protected String getCssExtension() { return CSS_EXTENSION; } /** * Gets the text for select item. * * @param child the child * * @return the text for select item */ private String getTextForSelectItem(Element child) { String result = ""; //$NON-NLS-1$ String attrName = RichFaces.ATTR_SELECT_ITEM_LABEL; String defaultValue = "<h:selectItem/>"; //$NON-NLS-1$ if (child.getNodeName().endsWith("selectItems")) { //$NON-NLS-1$ attrName = RichFaces.ATTR_VALUE; defaultValue = "<h:selectItems/>"; //$NON-NLS-1$ } result = ComponentUtil.getAttribute(child, attrName); if (result.trim().length() == 0) { result = defaultValue; } return result; } /** * Init. */ private void init() { initButtonImagesMap(); initDefaultLabelsMap(); initDefaultStyleClasses(); } /** * Inits the button images map. */ private void initButtonImagesMap() { // images of the first set of buttons // buttonImages.put(LabelKey.COPY_ALL_CONTROL, getCssExtension() + "/arrow_copy_all.gif"); //$NON-NLS-1$ // buttonImages.put(LabelKey.COPY_CONTROL, getCssExtension() + "/arrow_copy.gif"); //$NON-NLS-1$ // buttonImages.put(LabelKey.REMOVE_CONTROL, getCssExtension() + "/arrow_remove.gif"); //$NON-NLS-1$ // buttonImages.put(LabelKey.REMOVE_ALL_CONTROL, getCssExtension() + "/arrow_remove_all.gif"); //$NON-NLS-1$ buttonImages.put(LabelKey.COPY_ALL_CONTROL, COPY_ALL_CONTROL); buttonImages.put(LabelKey.COPY_CONTROL, COPY_CONTROL); buttonImages.put(LabelKey.REMOVE_CONTROL, REMOVE_CONTROL); buttonImages.put(LabelKey.REMOVE_ALL_CONTROL, REMOVE_ALL_CONTROL); } /** * Inits the default labels map. */ private void initDefaultLabelsMap() { // values of the first set of buttons defaultLabels.put(LabelKey.COPY_ALL_CONTROL, "Copy all"); //$NON-NLS-1$ defaultLabels.put(LabelKey.COPY_CONTROL, "Copy"); //$NON-NLS-1$ defaultLabels.put(LabelKey.REMOVE_CONTROL, "Remove"); //$NON-NLS-1$ defaultLabels.put(LabelKey.REMOVE_ALL_CONTROL, "Remove All"); //$NON-NLS-1$ } /** * Inits the default style classes. */ private void initDefaultStyleClasses() { // general style defaultStyleClasses.put("style", "rich-list-picklist"); //$NON-NLS-1$ //$NON-NLS-2$ defaultStyleClasses.put(LIST_MAP_KEY, "rich-picklist-{0}-items"); //$NON-NLS-1$ // styles of button's block defaultStyleClasses.put(CONTROL_MAP_KEY, "rich-picklist-controls"); //$NON-NLS-1$ } /** * Checks if is recreate at attr change. * * @param sourceElement the source element * @param value the value * @param visualDocument the visual document * @param visualNode the visual node * @param data the data * @param pageContext the page context * @param name the name * * @return true, if is recreate at attr change */ @Override public boolean recreateAtAttrChange(VpePageContext pageContext, Element sourceElement, nsIDOMDocument visualDocument, nsIDOMElement visualNode, Object data, String name, String value) { // TODO Auto-generated method stub return true; } /** * prepare data. * * @param sourceElement the source element */ private void prepareData(Element sourceElement) { prepareLabels(sourceElement); prepareStyleClasses(sourceElement); prepareOtherParameters(sourceElement); } /** * Prepare labels. * * @param sourceElement the source element */ private void prepareLabels(Element sourceElement) { // prepare labels for (LabelKey key : LabelKey.values()) { if (sourceElement.hasAttribute(key.getValue() + LABEL_SUFFIX)) { String label = sourceElement.getAttribute(key.getValue() + LABEL_SUFFIX); labels.put(key.getValue(), label); } else { labels.put(key.getValue(), defaultLabels.get(key)); } } } /** * Prepare other parameters. * * @param sourceElement the source element */ private void prepareOtherParameters(Element sourceElement) { isShowButtonLabels = !Boolean.FALSE.toString().equalsIgnoreCase(sourceElement .getAttribute(ATTR_SHOW_BUTTON_LABELS)); // prepare buttons attributes moveControlsAlign = sourceElement.hasAttribute(ATTR_MOVE_CONTROLS_VERTICAL_ALIGN) ? sourceElement .getAttribute(ATTR_MOVE_CONTROLS_VERTICAL_ALIGN) : DEFAULT_BUTTON_ALIGN; // prepare lists attributes String listsHeightString = sourceElement.getAttribute(ATTR_LISTS_HEIGHT); try { listsHeight = String.valueOf(ComponentUtil.parseWidthHeightValue(listsHeightString)); } catch (NumberFormatException e) { listsHeight = DEFAULT_LIST_HEIGHT; } String sourceListWithString = sourceElement.getAttribute(ATTR_SOURCE_LIST_WIDTH); try { sourceListsWidth = String.valueOf(ComponentUtil.parseWidthHeightValue(sourceListWithString)); } catch (NumberFormatException e) { sourceListsWidth = DEFAULT_LIST_WIDTH; } String targetListWithString = sourceElement.getAttribute(ATTR_TARGET_LIST_WIDTH); try { targetListsWidth = String.valueOf(ComponentUtil.parseWidthHeightValue(targetListWithString)); } catch (NumberFormatException e) { targetListsWidth = DEFAULT_LIST_WIDTH; } } /** * Prepare style classes. * * @param sourceElement the source element */ private void prepareStyleClasses(Element sourceElement) { // prepare style classes Set<String> styleClassesKeys = defaultStyleClasses.keySet(); for (String key : styleClassesKeys) { if (sourceElement.hasAttribute(key + CLASS_SUFFIX)) { String styleClass = sourceElement.getAttribute(key + CLASS_SUFFIX); styleClasses.put(key, defaultStyleClasses.get(key) + " " //$NON-NLS-1$ + styleClass); } else { styleClasses.put(key, defaultStyleClasses.get(key)); } } } }