/*
 * Copyright Red Hat, Inc. and/or its affiliates
 * and other contributors as indicated by the @author tags and
 * the COPYRIGHT.txt file distributed with this work.
 *
 * 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.
 * Modified by
 * @author  Data Virtuality GmbH
 * @date    $Date$
 *
 */

package org.teiid.query.xquery.saxon;

import java.util.Arrays;
import java.util.Iterator;

import net.sf.saxon.om.Item;
import net.sf.saxon.om.SequenceIterator;
import net.sf.saxon.trans.XPathException;

/**
 * A SequenceIterator that can have items added back
 */
public final class PushBackSequenceIterator implements SequenceIterator {
    private final SequenceIterator iter;
    private Iterator<Item> first;
    private Item current;

    public PushBackSequenceIterator(SequenceIterator iter, Item... items) {
        this.iter = iter;
        this.first = Arrays.asList(items).iterator();
    }

    @Override
    public void close() {
        iter.close();
    }

    @Override
    public int getProperties() {
        return iter.getProperties();
    }

    @Override
    public Item next() throws XPathException {
        if (first.hasNext()) {
            current = first.next();
            return current;
        }
        current = iter.next();
        return current;
    }
}