Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2010, Red Hat, Inc. and individual contributors
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.richfaces.renderkit;
 
 
 import  javax.faces.FacesException;
 import  javax.faces.context.FacesContext;
 import  javax.faces.context.ResponseWriter;
 
 import  org.ajax4jsf.javascript.JSFunction;
 import  org.richfaces.context.ExtendedPartialViewContext;
 import  org.richfaces.model.TreeDataModelTuple;
 import  org.richfaces.model.TreeDataVisitor;
 
 abstract class TreeEncoderBase implements TreeDataVisitor {
     private static final class QueuedData {
         private enum State {
             initial,
             visited,
             encoded
         }
 
         private State state = .;
         private TreeDataModelTuple tuple;
 
         public QueuedData(TreeDataModelTuple tuple) {
             super();
             this. = tuple;
         }
 
         public boolean isEncoded() {
             return  == .;
         }
 
         public void makeEncoded() {
             this. = .;
         }
 
         public void makeVisited() {
             this. = .;
         }
 
         public boolean isVisited() {
             return  == .;
         }
 
         public TreeDataModelTuple getTuple() {
             return ;
         }
     }
 
     static final String TREE_NODE_STATE_ATTRIBUTE = "__treeNodeState";
     protected final FacesContext context;
     protected final ResponseWriter responseWriter;
     protected final AbstractTree tree;
     private LinkedList<QueuedDataqueuedDataList = new LinkedList<QueuedData>();
 
     public TreeEncoderBase(FacesContext contextAbstractTree tree) {
         super();
         this. = context;
         this. = context.getResponseWriter();
         this. = tree;
     }
 
     protected void encodeTree() throws IOException {
         .walkModel(this);
     }
 
     protected void flushParentNode() throws IOException {
         if (.isEmpty()) {
             return;
         }
 
         QueuedData data = .getLast();
         if (!data.isEncoded()) {
            data.makeEncoded();
            .restoreFromSnapshot(data.getTuple());
            TreeNodeState nodeState = getNodeState(.isLeaf(), false);
            writeTreeNodeStartElement(nodeState);
            .findTreeNodeComponent().encodeAll();
        }
    }
    private TreeNodeState getNodeState(boolean leafboolean visited) {
        TreeNodeState nodeState;
        if (leaf) {
            nodeState = .;
        } else if (visited) {
            nodeState = .;
        } else if (.isExpanded()) {
            nodeState = .;
        } else {
            nodeState = .;
        }
        return nodeState;
    }
    public void beforeChildrenVisit() {
        if (!.isEmpty()) {
            .getLast().makeVisited();
        }
    }
    public void afterChildrenVisit() {
    }
    public void enterNode() {
        TreeDataModelTuple tuple = .createSnapshot();
        QueuedData queuedData = new QueuedData(tuple);
        try {
            flushParentNode();
        } catch (IOException e) {
            throw new FacesException(e.getMessage(), e);
        }
        .restoreFromSnapshot(tuple);
        .add(queuedData);
    }
    public void exitNode() {
        QueuedData data = .removeLast();
        .restoreFromSnapshot(data.getTuple());
        try {
            if (!data.isEncoded()) {
                writeTreeNodeStartElement(getNodeState(.isLeaf(), data.isVisited()));
                .findTreeNodeComponent().encodeAll();
            }
            writeTreeNodeEndElement();
        } catch (IOException e) {
            throw new FacesException(e.getMessage(), e);
        }
    }
    protected void writeTreeNodeStartElement(TreeNodeState nodeStatethrows IOException {
        AbstractTreeNode treeNodeComponent = .findTreeNodeComponent();
        .getAttributes().put(nodeState);
        .startElement(HtmlConstants.DIV_ELEM, );
        .writeAttribute(HtmlConstants.CLASS_ATTRIBUTE,
            HtmlUtil.concatClasses("rf-tr-nd"nodeState.getNodeClass()), null);
        .writeAttribute(HtmlConstants.ID_ATTRIBUTE, treeNodeComponent.getClientId(), null);
        emitClientToggleEvent(treeNodeComponentnodeState);
    }
    protected void writeTreeNodeEndElement() throws IOException {
        .endElement(HtmlConstants.DIV_ELEM);
    }
    public abstract void encode() throws IOException;
    private void emitClientToggleEvent(AbstractTreeNode treeNodeTreeNodeState nodeState) {
        if (treeNode.getClientId().equals(.getAttributes().get(.))) {
            TreeNodeState initialState = (TreeNodeState.getAttributes().get(
            if (initialState.isDifferentThan(nodeState)) {
                ExtendedPartialViewContext partialContext = ExtendedPartialViewContext.getInstance();
                partialContext.appendOncomplete(new JSFunction("RichFaces.ui.TreeNode.emitToggleEvent"treeNode
                    .getClientId()));
            }
        }
    }
New to GrepCode? Check out our FAQ X