/******************************************************************************* * Copyright (c) 2007-2011 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 java.util.List; import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil; import org.jboss.tools.vpe.editor.VpeVisualDomBuilder; import org.jboss.tools.vpe.editor.context.VpePageContext; import org.jboss.tools.vpe.editor.mapping.VpeElementMapping; import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate; import org.jboss.tools.vpe.editor.template.VpeCreationData; import org.jboss.tools.vpe.editor.template.VpeTemplateSafeWrapper; import org.jboss.tools.vpe.editor.template.VpeToggableTemplate; 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; public class RichFacesCollapsibleSubTableTogglerTemplate extends VpeAbstractTemplate implements VpeToggableTemplate { final private static String CSS_TOP_SPAN="rf-csttg"; //$NON-NLS-1$ final private static String CSS_SPAN_COLLAPSED="rf-csttg-colps"; //$NON-NLS-1$ final private static String CSS_SPAN_EXPANDED="rf-csttg-exp"; //$NON-NLS-1$ @Override public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) { nsIDOMElement topSpan = visualDocument.createElement(HTML.TAG_SPAN); topSpan.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_ID, "1"); //$NON-NLS-1$ topSpan.setAttribute(HTML.ATTR_CLASS, CSS_TOP_SPAN); nsIDOMElement imgSpan = visualDocument.createElement(HTML.TAG_SPAN); imgSpan.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_LOOKUP_PARENT, "true"); //$NON-NLS-1$ imgSpan.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_ID, "2"); //$NON-NLS-1$ nsIDOMElement img = visualDocument.createElement(HTML.TAG_IMG); img.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_LOOKUP_PARENT, "true"); //$NON-NLS-1$ img.setAttribute(VpeVisualDomBuilder.VPE_USER_TOGGLE_ID, "3"); //$NON-NLS-1$ if (RichFaces.readCollapsedStateFromSourceNode(sourceNode)) { imgSpan.setAttribute(HTML.ATTR_CLASS, CSS_SPAN_COLLAPSED); ComponentUtil.setImg(img, "/collapsibleSubTableToggler/upIcon.gif"); //$NON-NLS-1$ } else { imgSpan.setAttribute(HTML.ATTR_CLASS, CSS_SPAN_EXPANDED); ComponentUtil.setImg(img, "/collapsibleSubTableToggler/downIcon.gif"); //$NON-NLS-1$ } imgSpan.appendChild(img); topSpan.appendChild(imgSpan); VpeCreationData creationData = new VpeCreationData(topSpan); return creationData; } @Override public void toggle(VpeVisualDomBuilder builder, Node sourceNode, String toggleId) { Element csttgElement = (Element) sourceNode; String forTable = ""; //$NON-NLS-1$ if (csttgElement.hasAttribute(HTML.ATTR_FOR)) { forTable = csttgElement.getAttribute(HTML.ATTR_FOR); } if (!"".equalsIgnoreCase(forTable)) { //$NON-NLS-1$ List<Element> sourceElements = RichFaces.findElementsById( (Element) csttgElement.getOwnerDocument() .getDocumentElement(), forTable, ":collapsibleSubTable"); //$NON-NLS-1$ for (Element el : sourceElements) { if (builder != null) { VpeElementMapping elementMapping = (VpeElementMapping)builder.getDomMapping().getNodeMapping(el); if (elementMapping != null) { RichFacesCollapsibleSubTableTemplate cstTemplate = (RichFacesCollapsibleSubTableTemplate) ((VpeTemplateSafeWrapper) elementMapping.getTemplate()).getAdapter(RichFacesCollapsibleSubTableTemplate.class); if (cstTemplate != null) { cstTemplate.toggle(el, toggleId); if (RichFaces.readCollapsedStateFromSourceNode(sourceNode)) { sourceNode.setUserData(RichFaces.COLLAPSED_STATE, "false", null); //$NON-NLS-1$ } else { sourceNode.setUserData(RichFaces.COLLAPSED_STATE, "true", null); //$NON-NLS-1$ } builder.updateNode(el); } } } } } /* * Update toggler state itself */ builder.updateNode(sourceNode); } @Override public void stopToggling(Node sourceNode) { /* * Do nothing */ } }