Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.sapia.util.cursor.impl;
  
  import java.util.List;
  

Author(s):
Yanick Duchesne
Copyright:
Copyright &.169; 2002-2004 Sapia Open Source Software. All Rights Reserved.
License:
Read the license.txt file of the jar or visit the license page at the Sapia OSS web site
 
 public class CursorImpl implements Cursor{
   
   private int _batchSize;
   private List _batches = new ArrayList(20);
   private int _pos = -1;;
   private int _totalCount;
   private boolean _finished;
   private CursorFeed _feed;
   private Batch _currentBatch;
   private CursorListener _listener;
  
  

Parameters:
feed a CursorFeed.
listener a CursorListener, or null if no listener is provided.
batchSize the size of the Batch instances that will be created by this instance.
 
   public CursorImpl(CursorFeed feedCursorListener listenerint batchSize){
      = batchSize;
      = feed;
      = listener;
   }
  
  
 
   public int getBatchCount() {
     return .size();
   }
  
  
 
   public int getItemCount() {
     return ;
   }
  
  
 
   public int getPos() {
     return ;
   }
  
  
 
   public void reset() {
      = -1;
      = null;
   }
  
  

See also:
org.sapia.util.cursor.Cursor.setPos(int)
 
   /*public void setPos(int pos) {
     if(pos < 0 || pos >= _batches.size()){
       throw new IndexOutOfBoundsException(""+pos);
     }
     _pos = pos;
   }
   */
  
  

Returns:
the current position of the cursor, in terms of the individual items it contains.
 
   public int getAbsolutePos(){
     if( == null){
       return 0;
     }
     return .getAbsolutePos();
   }
  
  

Parameters:
pos the position to which this instance should be set, in terms of the individual items it contains.
 
  public void setAbsolutePos(int pos){
    if( != null){
      if(pos < ){
         = (Batch).get(0);
        .setPos(pos);
         = 0;
      }
      else{
        int batchPos = pos/;
        int offset   = pos%;
        if(batchPos >= .size()){
          throw new IndexOutOfBoundsException(""+pos);
        }
        Batch b = (Batch).get(batchPos);
        if(offset >= b.getCount()){
          throw new IndexOutOfBoundsException(""+pos);
        }
        b.setPos(offset);
         = batchPos;        
         = b;
      }
    }
    else if(pos == 0){
       = pos;
    }else{
      throw new IndexOutOfBoundsException(""+pos);
    }
  }
  
  
  public Object getItemAt(int pos) {
    if( != null){
      if(pos < ){
         = (Batch).get(0);
        return .getItemAt(pos);
      }
      else{
        int batchPos = pos/;
        int offset   = pos%;
        if(batchPos >= .size()){
          throw new IndexOutOfBoundsException(""+pos);
        }
        Batch b = (Batch).get(batchPos);
        if(offset >= b.getCount()){
          throw new IndexOutOfBoundsException(""+pos);
        }
        return b.getItemAt(offset);
      }
    }
    throw new IndexOutOfBoundsException(""+pos);    
  }
  
  
  
  public Object removeItemAt(int pos) {
    if( != null){
      Object toReturn;
      if(pos < ){
         = (Batch).get(0);
        toReturn = .removeItemAt(pos);
      }
      else{
        int batchPos = pos/;
        int offset   = pos%;
        if(batchPos >= .size()){
          throw new IndexOutOfBoundsException(""+pos);
        }
        Batch b = (Batch).get(batchPos);
        if(offset >= b.getCount()){
          throw new IndexOutOfBoundsException(""+pos);
        }
        toReturn = b.removeItemAt(offset);
      }
      --;
      return toReturn;
    }
    throw new IndexOutOfBoundsException(""+pos);      
  }  
  
  
  public boolean isStart(){
    if( == 0){
      Batch b = (Batch).get();
      return b.getPos() == 0;
    }
    return false;
  }

  
  public boolean isEnd(){
    if( == .size() - 1){
      Batch b = (Batch).get();
      return b.getPos() == b.getCount() - 1;
    }
    return false;
  }
  
  
  public int getBatchSize(){
    return ;
  }
  
  
  
  public void setBatchSize(int batchSize){
    if(batchSize <= 0)
      throw new IllegalArgumentException("Batch size must be greater than 0");
    if( == null){
       = batchSize;
    }
    else{
      restructure(batchSize);
    }
  }
  
  
  public boolean hasCurrentBatch() {
    if( == null){
      if(hasNextBatch()){
         = nextBatch();
        return true;
      }
      return false;
    }
    return true;
  }
  
  

See also:
org.sapia.util.cursor.Cursor.currentBatch()()
  public Batch currentBatch(){
    if( == null){
      if(hasCurrentBatch()){
        return ;
      }
      throw new NoSuchElementException();
    }
    return ;
  }
  
  
  public boolean hasNextBatch(){
    if( < .size() - 1){
      return true;
    }
    else if(){
      return false;
    }
    else if( >= .size() - 1){
      Object[] items = newItems();
      int count = 0;
      try{
        count = .read(items);
      }catch(Exception e){
        throw new CursorException("Could not feed"e);
      }
      if(count  == 0){
         = true;
        return false;
      }
      Batch b = new BatchImpl(thisitemscount.size());
      .add(b);
       = +count;
      return true;
    }
    else{
      return true;
    }
  }
  
  
  public boolean hasPreviousBatch(){
    if( != null){
      return .hasPreviousBatch();
    }
    return  > 0;
  }
  
  
  public Batch nextBatch(){
    if( >= .size() - 1){
      if(!hasNextBatch()){
        throw new NoSuchElementException();        
      }      
    }
    return .toFirst();
    
  }
  
  

Returns:
Cursor#previousBatch()
  public Batch previousBatch(){
    if( <= 0){
      throw new NoSuchElementException();
    }  
    /*
    if(_currentBatch != null){
      int pos = _currentBatch.getIndex();
      pos--;
      if(pos < 0){
        throw new NoSuchElementException(); 
      }
      else{
        _pos = pos;
        _currentBatch = (Batch)_batches.get(_pos);
      }
    }
    else{
      if(_pos > _batches.size()){
        _pos--;
      }
      _currentBatch = (Batch)_batches.get(_pos--);      
    }*/
    return .toFirst();
  }
  
  

Returns:
Cursor#toLast()
  public Cursor toLast(){
    if(.size() > 0)
       = .size() - 1;
    return this;
  }
  
  

Returns:
Cursor#toFirst()
  public Cursor toFirst(){
     = 0;
    return this;
  }
  
  
  public int available() {
    try{
      return .available();
    }catch(Exception e){
      throw new CursorException("Could not poll underlying feed"e);
    }
  }
  
  
  public void close() {
    .close();
  }
  
  private void restructure(int batchSize){
    int absolutePos = getAbsolutePos();
    int totalCount = 0;
    List newBatches = new ArrayList(20);
    Batch newBatch = null;
    Object[] newItems = null;
    int count = 0;
    for(int i = 0; i < .size(); i++){
      BatchImpl current = (BatchImpl).get(i);
      Object[] currentItems = current.items();
      if(newItems == null){
        newItems = new Object[batchSize];
      }
      for(int j = 0; j < current.getCount(); j++){
        if(count >= newItems.length){
          newBatches.add(new BatchImpl(thisnewItemscountnewBatches.size()));
          newItems = new Object[batchSize];
          count = 0;
        }
        newItems[count] = currentItems[j];
        totalCount++;
        count++;
      }
    }
    if(newItems != null){
      newBatches.add(new BatchImpl(thisnewItemscountnewBatches.size()));      
    }
     = totalCount;
    if(absolutePos >= ){
      absolutePos =  - 1;
    }
     = newBatches;
     = batchSize;    
    if( > 0){
       = null;
       = -1;
      nextBatch();
      setAbsolutePos(absolutePos);
    }
    else{
       = -1;
       = null;
    }
  }
  
  private Object[] newItems(){
    return new Object[];
  }
New to GrepCode? Check out our FAQ X