/******************************************************************************* * 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 org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; 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.VisualDomUtil; import org.jboss.tools.vpe.editor.util.VpeNodesManagingUtil; 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 Sergey Dzmitrovich * */ public class JsfVerbatim extends VpeAbstractTemplate { /* * (non-Javadoc) * * @see org.jboss.tools.vpe.editor.template.VpeTemplate * #create(VpePageContext, Node, nsIDOMDocument) */ public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) { Element element = (Element) sourceNode; // create span nsIDOMElement mainContainer = VisualDomUtil .createBorderlessContainer(visualDocument); // get children NodeList list = element.getChildNodes(); // creation data VpeCreationData creationData = new VpeCreationData(mainContainer); // for each child for (int i = 0; i < list.getLength(); i++) { Node child = list.item(i); // create span for child nsIDOMElement childContainer = VisualDomUtil .createBorderlessContainer(visualDocument); mainContainer.appendChild(childContainer); // if child is text or not html tag if ((child.getNodeType() == Node.ELEMENT_NODE && child.getPrefix() != null) || child.getNodeType() == Node.TEXT_NODE) { // create children info and add to creationData VpeChildrenInfo childSpanInfo = new VpeChildrenInfo(childContainer); childSpanInfo.addSourceChild(child); creationData.addChildrenInfo(childSpanInfo); } else { // get text by positions and add to span String text = VpeNodesManagingUtil.getSourceText(pageContext, ((IDOMNode) child).getStartOffset(), ((IDOMNode) child) .getEndOffset() - 1); mainContainer.appendChild(visualDocument.createTextNode(text)); } } // for case when all children are html tags if ((list.getLength() != 0) && (creationData.getChildrenInfoList() == null)) { // set empty children info list to visualDomBuilder doesn't // search children himself creationData.setChildrenInfoList(new ArrayList<VpeChildrenInfo>()); } return creationData; } /* * (non-Javadoc) * * @see VpeAbstractTemplate#isRecreateAtAttrChange( * VpePageContext, Element, nsIDOMDocument, * nsIDOMElement, Object, String, String) */ public boolean recreateAtAttrChange(VpePageContext pageContext, Element sourceElement, nsIDOMDocument visualDocument, nsIDOMElement visualNode, Object data, String name, String value) { return true; } }