Package org.richfaces.model

Source Code of org.richfaces.model.MapDataModel

/**
*
*/
package org.richfaces.model;

import java.io.IOException;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;

import javax.faces.context.FacesContext;

import org.ajax4jsf.model.DataVisitor;
import org.ajax4jsf.model.ExtendedDataModel;
import org.ajax4jsf.model.Range;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

/**
* That is intended for internal use
*
* @author Nick Belaevski mailto:nbelaevski@exadel.com created 30.07.2007
*/
public class MapDataModel extends ExtendedDataModel {

  private Map map;
  private Object rowKey;
  private Object wrappedData;
 
  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.model.ExtendedDataModel#getRowKey()
   */
  public Object getRowKey() {
    return rowKey;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.model.ExtendedDataModel#setRowKey(java.lang.Object)
   */

  public void setRowKey(Object key) {
    this.rowKey = key;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.ajax4jsf.model.ExtendedDataModel#walk(javax.faces.context.FacesContext,
   *      org.ajax4jsf.model.DataVisitor, org.ajax4jsf.model.Range,
   *      java.lang.Object)
   */

  public void walk(FacesContext context, DataVisitor visitor, Range range,
      Object argument) throws IOException {
    if (map != null) {
      for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
        Object key = (Object) iterator.next();
       
        visitor.process(context, key, argument);
      }
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.model.DataModel#getRowCount()
   */

  public int getRowCount() {
    return map != null ? map.size() : 0;
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.model.DataModel#getRowData()
   */

  public Object getRowData() {
    return map != null ? map.get(rowKey) : null;
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.model.DataModel#getRowIndex()
   */

  public int getRowIndex() {
    return 0;
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.model.DataModel#getWrappedData()
   */
  public Object getWrappedData() {
    return wrappedData;
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.model.DataModel#isRowAvailable()
   */
  public boolean isRowAvailable() {
    return map != null && map.containsKey(rowKey);
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.model.DataModel#setRowIndex(int)
   */
  public void setRowIndex(int rowIndex) {
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.faces.model.DataModel#setWrappedData(java.lang.Object)
   */
  public void setWrappedData(Object data) {
    this.wrappedData = data;
    if (data instanceof NamedNodeMap) {
      this.map = new AbstractMap() {

        private Set entrySet = new AbstractSet() {

          public Iterator iterator() {
            return new Iterator() {
              private int index = 0;

              public boolean hasNext() {
                return index < ((NamedNodeMap) getWrappedData()).getLength();
              }

              public Object next() {
                final Node node = ((NamedNodeMap) getWrappedData()).item(index++);
                if (node == null) {
                  throw new NoSuchElementException();
                } else {
                  return new Map.Entry() {

                    public Object getKey() {
                      return node.getNodeName();
                    }

                    public Object getValue() {
                      return node;
                    }

                    public Object setValue(Object arg0) {
                      throw new UnsupportedOperationException();
                    }
                   
                  };
                }
              }

              public void remove() {
                throw new UnsupportedOperationException();
              }
            };
          }

          public int size() {
            return ((NamedNodeMap) getWrappedData()).getLength();
          }
         
        };
       
        public boolean containsKey(Object key) {
          return ((NamedNodeMap) getWrappedData()).getNamedItem((String) key) != null;
        }
       
        public Object get(Object key) {
          return ((NamedNodeMap) getWrappedData()).getNamedItem((String) key);
        }
       
        public Set entrySet() {
          return entrySet;
        }
       
      };
    } else if (data != null) {
      this.map = (Map) data;
    } else {
      this.map = null;
    }
  }

}
TOP

Related Classes of org.richfaces.model.MapDataModel

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.