/******************************************************************************* * 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 static org.jboss.tools.vpe.xulrunner.util.XPCOM.queryInterface; import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil; import org.jboss.tools.jsf.vpe.richfaces.HtmlComponentUtil; import org.jboss.tools.vpe.editor.context.VpePageContext; import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate; import org.jboss.tools.vpe.editor.template.VpeCreationData; import org.mozilla.interfaces.nsIDOMDocument; import org.mozilla.interfaces.nsIDOMElement; import org.mozilla.interfaces.nsIDOMNode; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; /** * * @author ezheleznyakov@exadel.com * */ public class RichFacesVirtualEarthTemplate extends VpeAbstractTemplate { private static String EARTH_AERIAL = "/virtualEarth/earth_aerial.png"; //$NON-NLS-1$ private static String EARTH_HYBRID = "/virtualEarth/earth_hybrid.png"; //$NON-NLS-1$ private static String EARTH_ROAD = "/virtualEarth/earth_road.png"; //$NON-NLS-1$ private static String MAP_STYLE_ATTRIBUTE_NAME = "mapStyle"; //$NON-NLS-1$ private static String MAP_STYLE_VALUES[] = { "road", "aerial", "hybrid" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ private static String STYLE_CLASS_ATTR_NAME = "styleClass"; //$NON-NLS-1$ public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) { Element sourceElement = (Element) sourceNode; nsIDOMElement img = visualDocument .createElement(HtmlComponentUtil.HTML_TAG_IMG); if (sourceElement.hasAttribute(MAP_STYLE_ATTRIBUTE_NAME)) { String mapStyleValue = sourceElement.getAttribute(MAP_STYLE_ATTRIBUTE_NAME); if (mapStyleValue.equalsIgnoreCase(MAP_STYLE_VALUES[0])) ComponentUtil.setImg(img, EARTH_ROAD); else if (mapStyleValue.equalsIgnoreCase(MAP_STYLE_VALUES[1])) ComponentUtil.setImg(img, EARTH_AERIAL); else if (mapStyleValue.equalsIgnoreCase(MAP_STYLE_VALUES[2])) ComponentUtil.setImg(img, EARTH_HYBRID); } else ComponentUtil.setImg(img, EARTH_ROAD); copyStyleAttribute(img, sourceNode); if (sourceElement.hasAttribute(STYLE_CLASS_ATTR_NAME)) img.setAttribute(HtmlComponentUtil.HTML_CLASS_ATTR, sourceElement.getAttribute(STYLE_CLASS_ATTR_NAME)); return new VpeCreationData(img); } /* * (non-Javadoc) * * @see com.exadel.vpe.editor.template.VpeAbstractTemplate#setAttribute(com.exadel.vpe.editor.context.VpePageContext, * org.w3c.dom.Element, org.w3c.dom.Document, org.w3c.dom.Node, * java.lang.Object, java.lang.String, java.lang.String) */ public void setAttribute(VpePageContext pageContext, Element sourceElement, nsIDOMDocument visualDocument, nsIDOMNode visualNode, Object data, String name, String value) { nsIDOMElement img = queryInterface(visualNode, nsIDOMElement.class); if (name.equalsIgnoreCase(MAP_STYLE_ATTRIBUTE_NAME)) { if (value.trim().equalsIgnoreCase("") //$NON-NLS-1$ || !searchInMapStyleValues(value)) { ComponentUtil.setImg(img, EARTH_ROAD); return; } if (value.equalsIgnoreCase(MAP_STYLE_VALUES[0])) ComponentUtil.setImg(img, EARTH_ROAD); else if (value.equalsIgnoreCase(MAP_STYLE_VALUES[1])) ComponentUtil.setImg(img, EARTH_AERIAL); else if (value.equalsIgnoreCase(MAP_STYLE_VALUES[2])) ComponentUtil.setImg(img, EARTH_HYBRID); return; } if (STYLE_CLASS_ATTR_NAME.equals(name)) img.setAttribute(HtmlComponentUtil.HTML_CLASS_ATTR, value); else img.setAttribute(name, value); } /* * (non-Javadoc) * * @see com.exadel.vpe.editor.template.VpeAbstractTemplate#removeAttribute(com.exadel.vpe.editor.context.VpePageContext, * org.w3c.dom.Element, org.w3c.dom.Document, org.w3c.dom.Node, * java.lang.Object, java.lang.String) */ public void removeAttribute(VpePageContext pageContext, Element sourceElement, nsIDOMDocument visualDocument, nsIDOMNode visualNode, Object data, String name) { nsIDOMElement img = queryInterface(visualNode, nsIDOMElement.class); if (name.equalsIgnoreCase(MAP_STYLE_ATTRIBUTE_NAME)) { ComponentUtil.setImg(img, EARTH_ROAD); return; } if (STYLE_CLASS_ATTR_NAME.equals(name)) img.removeAttribute(HtmlComponentUtil.HTML_CLASS_ATTR); else img.removeAttribute(name); } /** * * @param value * Value of mapStyle attribute * @return True if value of mapStyle attribute correct or false */ private boolean searchInMapStyleValues(String mapStyleValue) { for (int i = 0; i < MAP_STYLE_VALUES.length; i++) if (MAP_STYLE_VALUES[i].equalsIgnoreCase(mapStyleValue.trim())) return true; return false; } /** * * @param img * @param sourceNode * The current node of the source tree. */ private void copyStyleAttribute(nsIDOMElement img, Node sourceNode) { NamedNodeMap namedNodeMap = sourceNode.getAttributes(); for (int i = 0; i < namedNodeMap.getLength(); i++) { Node attribute = namedNodeMap.item(i); if (attribute.getNodeName().equalsIgnoreCase( HtmlComponentUtil.HTML_STYLE_ATTR)) { img.setAttribute(attribute.getNodeName(), attribute .getNodeValue()); return; } } } }