content: /*
   * @(#)DOMNavigatorModel.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.swing.table.model.row.navigator;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import org.w3c.dom.Element;
  
  /**
   *  Uses the attributes from the Element to populate the rows
   */
  public class DOMNavigatorModel extends AbstractNavigatorModel
  {
  	protected final Object[] columns;
  	protected final int index;
  
  	protected Map<Object, Object[]>cache = new HashMap<Object, Object[]>(0);
  
  	public DOMNavigatorModel(Object[] columns, int index)
  	{
  		this.columns = columns;
  		this.index = index;
  	}
  
  	public DOMNavigatorModel(Object[] columns)
  	{
  		this (columns, -1);
  	}
  
  	// _________________________________________________________________________
  
  	protected Object getValue(Object o, int col)
  	{
  		Object [] values = cache.get(o);
  		if (values != null && values[col] != null)
  			return values[col];
  
  		return col == index ? o : ((Element) o).getAttribute(columns[col].toString());
  	}
  
  	protected void setValue(Object o, int col, Object value)
  	{
  		// nothing can be done about this
  		if (col == index)
  			return;
  
  		if (value instanceof String)
  		{
  			((Element) o).setAttribute(columns[col].toString(), (String) value);
  			return;
  		}
  
  		Object[] values = cache.get(o);
  		if (values == null)
  		{
  			values = new Object[columns.length];
  			cache.put(o, values);
  		}
  		values[col] =  value;
  	}
  }
  