package com.corej2eepatterns.to.list;

// importy

// Imlementacja interfesju List tylko od odczytu. 
// Obsuguje iteratory i pozycjonowanie bezwzgldne.

public class RowSetWrapperList 
implements List, Serializable {

  // zmienna przechowujca instancj RowSet
  private RowSet rowSet;


  public RowSetWrapperList(RowSet rowSet) {
    this.rowSet = rowSet;
    . . .
  }
 
  // zwrcenie aktualnego wiersza jako obiekt transferowy
  public Object get(int index) {
    try {
      rowSet.absolute(index);
    } catch (SQLException anException) {
      // obsuga wyjtku
    }
    // utworzenie i zwrcenie obiektu transferowego
    return
        TORowMapper.createCustomerTO(this);
  }
  . . .

  // zwraca podlist aktualnej listy
  public List subList(int fromIndex, int toIndex) {
    // tworzy nowy RowSet z wymaganymi polami
    ReadOnlyRowSet roRowSet = new ReadOnlyRowSet();
    roRowSet.populate(this.rowSet, fromIndex, toIndex);

    // tworzy i zwraca now instancj RowSetWrapperList
    return new RowSetWrapperList(roRowSet);
  }

  // Zwraca iterator przechodzcy przez elementy listy w 
  // odpowiedniej kolejnoci. Moliwe jest sdefiniowanie kilku 
  // niezalenych iteratorw dla obiektu RowSetWrapperList.

  public Iterator iterator() {
    try {
      rowSet.beforeFirst();
    } catch (SQLException anException) {
      System.out.println(
          "Bd przesunicia RowSet przed pierwszy wiersz." + 
          anException);
    }

    return this.listIterator();
  }

  // utworzenie iteratora listy przechodzcego przez zbir wierszy
  public ListIterator listIterator() {
    // ListResultIterator jest zaimplementowana jako klasa wewntrzna 
    return new DataRowListIterator();
  }

  // implementacja metod interfejsu List

  . . .

}