package org.opengroupware.jope.eocontrol;

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

import org.opengroupware.jope.foundation.NSKeyValueCoding;

/*
 * EODetailDataSource
 * 
 * TODO: implement me
 */
public class EODetailDataSource extends EODataSource {
  
  protected EODataSource masterDataSource;
  protected String       detailKey;
  
  /* construction */
  
  public EODetailDataSource(EODataSource _master, String _key) {
    // TODO: implement me
    this.masterDataSource = _master;
    this.detailKey        = _key;
  }
  
  /* accessors */
  
  public void setDetailKey(String _key) {
    this.detailKey = _key;
  }
  public String detailKey() {
    return this.detailKey;
  }
  
  public EODataSource masterDataSource() {
    return this.masterDataSource;
  }
  
  public Object masterObject() {
    return null; // TODO: implement me
  }
  
  /* qualify */
  
  public EODataSource dataSourceQualifiedByKey(String _key) {
    return new EODetailDataSource(this, _key);
  }
  
  /* operations */

  @Override
  public Iterator iteratorForObjects() {
    List results = this.fetchObjects();
    if (results == null)
      return null;
    
    return results.iterator();
  }
  
  @Override
  public List fetchObjects() {
    Object master = this.masterObject();
    if (master == null) return new ArrayList<Object>(0);
    
    String key = this.detailKey();
    if (key == null) {
      List<Object> list = new ArrayList<Object>(1);
      list.add(master);
      return list;
    }
    
    Object v = NSKeyValueCoding.Utility.valueForKey(master, key);
    if (v == null)
      return null;
    if (v instanceof List)
      return (List)v;
    
    {
      List<Object> list = new ArrayList<Object>(1);
      list.add(v);
      return list;
    }    
  }

}
