/******************************************************************************* * Copyright (c) 2007-2009 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.seam.vpe.template; /** * @author yzhishko */ import static org.jboss.tools.vpe.xulrunner.util.XPCOM.queryInterface; import org.jboss.tools.vpe.editor.context.VpePageContext; import org.jboss.tools.vpe.editor.template.VpeCreationData; import org.jboss.tools.vpe.editor.util.HTML; import org.mozilla.interfaces.nsIDOMDocument; import org.mozilla.interfaces.nsIDOMElement; import org.mozilla.interfaces.nsIDOMNode; import org.mozilla.interfaces.nsIDOMNodeList; import org.w3c.dom.Element; import org.w3c.dom.Node; public abstract class SeamPdfAbstractChapterTemplate extends SeamPdfAbstractTemplate { @Override public void validate(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument, VpeCreationData data) { setTitle(pageContext, (Element) sourceNode, data); } private void setTitle(VpePageContext pageContext, Element sourceElement, VpeCreationData data) { nsIDOMNode visualTitleNode = getTitleForVisualNode(data.getNode()); if (visualTitleNode != null) { nsIDOMElement headElement = getHeadElement(data); nsIDOMNode parentNode = visualTitleNode.getParentNode(); if (parentNode != null) { parentNode.removeChild(visualTitleNode); headElement.appendChild(visualTitleNode); } } } private nsIDOMNode getTitleForVisualNode(nsIDOMNode visualNode) { if (visualNode == null) { return null; } nsIDOMNodeList children = visualNode.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { nsIDOMNode child = children.item(i); if (HTML.TAG_SPAN.equalsIgnoreCase(child.getNodeName())) { nsIDOMElement childElement = queryInterface(child, nsIDOMElement.class); String attrType = childElement .getAttribute(SeamUtil.SEAM_ATTR_TYPE_ID); if (attrType != null && SeamUtil.SEAM_ATTR_TYPE_ID_VALUE_PDF_TITLE .equalsIgnoreCase(attrType)) { return child; } } } return null; } protected abstract nsIDOMElement getHeadElement(VpeCreationData data); }