Package org.richfaces.component

Source Code of org.richfaces.component.UIRecursiveTreeNodesAdaptor

/**
* License Agreement.
*
* Rich Faces - Natural Ajax for Java Server Faces (JSF)
*
* Copyright (C) 2007 Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
*/
package org.richfaces.component;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.collections.iterators.IteratorChain;
import org.richfaces.model.StackingTreeModel;
import org.richfaces.model.StackingTreeModelDataProvider;
import org.richfaces.model.VisualStackingTreeModel;


/**
* JSF component class
*
*/
public abstract class UIRecursiveTreeNodesAdaptor extends UITreeNodesAdaptor {

  protected static final String FIRST = "first";
 
  protected static final String LAST = "last";

  public static final String COMPONENT_TYPE = "org.richfaces.RecursiveTreeNodesAdaptor";

  public static final String COMPONENT_FAMILY = "org.richfaces.RecursiveTreeNodesAdaptor";

  public abstract Object getRoots();
  public abstract void setRoots(Object roots);

  public abstract boolean isIncluded();
  public abstract void setIncluded(boolean active);

  public abstract boolean isIncludedRoot();
  public abstract void setIncludedRoot(boolean active);
 
  public abstract String getRecursionOrder();
  public abstract void setRecursionOrder(String recursionOrder);

  protected boolean includeNode() {
    return isIncluded() && isIncludedRoot();
  }
 
  public Object getData() {
    return getRoots();
   }
 
  public abstract String getVar();
  public abstract void setVar(String var);
 
  protected StackingTreeModel createRecursiveModel() {
    StackingTreeModel recursiveModel = new VisualStackingTreeModel(getId(), getVar(), new StackingTreeModelDataProvider() {

      public Object getData() {
        return UIRecursiveTreeNodesAdaptor.this.getNodes();
      }
     
    }, UIRecursiveTreeNodesAdaptor.this) {

      public StackingTreeModel getModelById(String id) {
        StackingTreeModel model = super.getModelById(id);
        if (model == null) {
          model = this.getParent().getModelById(id);
        }
       
        return model;
      }

      public Iterator<StackingTreeModel> getModelsIterator() {
        IteratorChain chain = new IteratorChain();
        chain.addIterator(super.getModelsIterator());
        chain.addIterator(this.getParent().getModelsIterator());

        return chain;
      }

      protected boolean isActive() {
        return UIRecursiveTreeNodesAdaptor.this.isRendered();
      }
     
      protected boolean isActiveData() {
        return UIRecursiveTreeNodesAdaptor.this.isIncluded() && UIRecursiveTreeNodesAdaptor.this.isIncludedNode();
      }
    };
   
    return recursiveModel;
  }
 
  @Override
  protected void addChildModels(StackingTreeModel model,
      List<StackingTreeModel> childModels) {
   
    String recursionOrder = getRecursionOrder();
    if (recursionOrder == null) {
      recursionOrder = LAST;
    }

    List<StackingTreeModel> newModelsList = new ArrayList<StackingTreeModel>(childModels.size() + 1);
    boolean recursiveModelInserted = false;

    for (StackingTreeModel childModel : childModels) {
      newModelsList.add(childModel);

      if (recursionOrder.equals(childModel.getId())) {
        recursiveModelInserted = true;
        newModelsList.add(createRecursiveModel());
      }
    }
   
    if (!recursiveModelInserted) {
      if (LAST.equals(recursionOrder)) {
        newModelsList.add(createRecursiveModel());
      } else if (FIRST.equals(recursionOrder)) {
        newModelsList.add(0, createRecursiveModel());
      } else {
        throw new IllegalArgumentException("Recursion order: [" + recursionOrder +
          "] cannot be processed by component " + this.getClientId(getFacesContext()) + "!");
      }
    }

    super.addChildModels(model, newModelsList);
  }
 
}
TOP

Related Classes of org.richfaces.component.UIRecursiveTreeNodesAdaptor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.