All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.noga.njexl.testing.dataprovider.collection.XStreamIterator Maven / Gradle / Ivy

Go to download

The Commons Jexl library is an implementation of the JSTL Expression Language with extensions. This was customized by nmondal.

The newest version!
/**
 * Copyright 2015 Nabarun Mondal
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.noga.njexl.testing.dataprovider.collection;

import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;

/**
 * A class that takes a finite list and makes
 * an infinite stream out of it
 * Created by noga on 15/04/15.
 */

public class XStreamIterator implements ListIterator {

    protected boolean stop = true ;

    /**
     * Sets the infinite streaming
     * @param stop if true it stops, if false it never does stop
     */
    public void setMode(boolean stop){
        this.stop = stop;
    }

    protected int index;

    /**
     * gets the index
     * @return the index at which the stream is
     */
    public int index() {
        return index ;
    }

    /**
     * Size of the stream
     * @return stream size
     */
    public int size() {
        return dataSourceTable.size() ;
    }

    @Override
    public boolean hasNext() {
        // ensure that it flows in
        if ( !stop ) return true ;
        // now this is finite set
        return index < size() ;
    }

    @Override
    public boolean hasPrevious() {
        if ( !stop ) return true ;
        return index > 0 ;
    }

    @Override
    public int nextIndex() {
        if ( hasNext() ){
            int x = (index + 1) % size() ;
            return (x == 0)? 0 : x ;
        }
        return -1;
    }

    @Override
    public int  previousIndex() {
        if ( index == 1 ){
            return  size() - 1 ;
        }
        return (index - 1) ;
    }


    /**
     * Reads data, creates APIUNITs RunInputObject and puts into the object
     * array for JUNIT consumption.
     *
     * @return The Next Object, if exists, null if it does not, and the list is
     *         exhausted
     */
    @Override
    public synchronized T next() {

        if (hasNext()) {
            index = nextIndex();
            return dataSourceTable.get(index);
        }
        return null;
    }

    @Override
    public synchronized T previous() {

        if (hasPrevious()) {
            index = previousIndex();
            return dataSourceTable.get(index);
        }
        return null;
    }

    @Override
    public void set(T o) {
       // we do not do it
    }

    @Override
    public synchronized void add(T o) {
        dataSourceTable.add(o);
    }

    @Override
    public void remove() {
        // We don't do it.
    }

    protected List dataSourceTable ;


    public T get(int index){
        if ( index >= 0 && index < dataSourceTable.size() ){
            return dataSourceTable.get(index);
        }
        if ( !stop ){
            if ( index < 0 ) return dataSourceTable.get( dataSourceTable.size() - 1);
            if ( index >  dataSourceTable.size() -1  ) return dataSourceTable.get(0);
        }
        return null;
    }

    /**
     * Creates one
     * @param table a  List using which would be used as data source table
     */
    public XStreamIterator(List table){
        dataSourceTable = table;
        index = -1;
    }

    /**
     * Creates one
     * @param table an array using which would be used as data source table
     */
    public XStreamIterator(T[] table){
        this(Arrays.asList(table));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy