亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? streamingiterator.java

?? 采用 Java 編寫的數(shù)據(jù)庫系統(tǒng)單元測試程序。
?? JAVA
字號:
/*
 *
 * The DbUnit Database Testing Framework
 * Copyright (C)2002-2004, DbUnit.org
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */
package org.dbunit.dataset.stream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.dbunit.DatabaseUnitRuntimeException;
import org.dbunit.dataset.*;
import org.dbunit.util.concurrent.BoundedBuffer;
import org.dbunit.util.concurrent.Channel;
import org.dbunit.util.concurrent.Puttable;
import org.dbunit.util.concurrent.Takable;

/**
 * @author Manuel Laflamme
 * @since Apr 17, 2003
 * @version $Revision: 629 $
 */
public class StreamingIterator implements ITableIterator
{

    /**
     * Logger for this class
     */
    private static final Logger logger = LoggerFactory.getLogger(StreamingIterator.class);

    private static final Object EOD = new Object(); // end of dataset marker

    private final Takable _channel;
    private StreamingTable _activeTable;
    private Object _taken = null;
    private boolean _eod = false;

    public StreamingIterator(IDataSetProducer source) throws DataSetException
    {
        Channel channel = new BoundedBuffer(30);
        _channel = channel;

        AsynchronousConsumer consumer = new AsynchronousConsumer(source, channel);
        Thread thread = new Thread(consumer);
        thread.setDaemon(true);
        thread.start();

        // Take first element from asyncronous handler
        try
        {
            _taken = _channel.take();
        }
        catch (InterruptedException e)
        {
            throw new DataSetException(e);
        }
    }

    ////////////////////////////////////////////////////////////////////////////
    // ITableIterator interface

    public boolean next() throws DataSetException
    {
        logger.debug("next() - start");

        // End of dataset has previously been reach
        if (_eod)
        {
            return false;
        }

        // Iterate to the end of current table.
        while (_activeTable != null && _activeTable.next())
            ;

        // End of dataset is reach
        if (_taken == EOD)
        {
            _eod = true;
            _activeTable = null;

//            System.out.println("End of iterator! - " + System.currentTimeMillis());
            return false;
        }

        // New table
        if (_taken instanceof ITableMetaData)
        {
            _activeTable = new StreamingTable((ITableMetaData)_taken);
            return true;
        }

        throw new IllegalStateException(
                "Unexpected object taken from asyncronous handler: " + _taken);
    }

    public ITableMetaData getTableMetaData() throws DataSetException
    {
        logger.debug("getTableMetaData() - start");

        return _activeTable.getTableMetaData();
    }

    public ITable getTable() throws DataSetException
    {
        logger.debug("getTable() - start");

        return _activeTable;
    }

    ////////////////////////////////////////////////////////////////////////////
    // StreamingTable class

    private class StreamingTable extends AbstractTable
    {

        /**
         * Logger for this class
         */
        private final Logger logger = LoggerFactory.getLogger(StreamingTable.class);

        private ITableMetaData _metaData;
        private int _lastRow = -1;
        private boolean _eot = false;
        private Object[] _rowValues;

        public StreamingTable(ITableMetaData metaData)
        {
            _metaData = metaData;
        }

        boolean next() throws DataSetException
        {
            logger.debug("next() - start");

            // End of table has previously been reach
            if (_eot)
            {
                return false;
            }

            try
            {
                _taken = _channel.take();
                if (!(_taken instanceof Object[]))
                {
                    _eot = true;
                    return false;
                }

                _lastRow++;
                _rowValues = (Object[])_taken;
                return true;
            }
            catch (InterruptedException e)
            {

                throw new DataSetException();
            }
        }

        ////////////////////////////////////////////////////////////////////////
        // ITable interface

        public ITableMetaData getTableMetaData()
        {
            logger.debug("getTableMetaData() - start");

            return _metaData;
        }

        public int getRowCount()
        {
            logger.debug("getRowCount() - start");

            throw new UnsupportedOperationException();
        }

        public Object getValue(int row, String column) throws DataSetException
        {
            logger.debug("getValue(row=" + row + ", column=" + column + ") - start");

            // Iterate up to specified row
            while (!_eot && row > _lastRow)
            {
                next();
            }

            if (row < _lastRow)
            {
                throw new UnsupportedOperationException("Cannot go backward!");
            }

            if (_eot || row > _lastRow)
            {
                throw new RowOutOfBoundsException(row + " > " + _lastRow);
            }

            return _rowValues[getColumnIndex(column)];
        }

    }

    ////////////////////////////////////////////////////////////////////////////
    // AsynchronousConsumer class

    private static class AsynchronousConsumer implements Runnable, IDataSetConsumer
    {

        /**
         * Logger for this class
         */
        private static final Logger logger = LoggerFactory.getLogger(AsynchronousConsumer.class);

        private final IDataSetProducer _producer;
        private final Puttable _channel;

        public AsynchronousConsumer(IDataSetProducer source, Puttable channel)
        {
            _producer = source;
            _channel = channel;
        }

        ////////////////////////////////////////////////////////////////////////
        // Runnable interface

        public void run()
        {
            logger.debug("run() - start");

            try
            {
                _producer.setConsumer(this);
                _producer.produce();
//                System.out.println("End of thread! - " + System.currentTimeMillis());
            }
            catch (DataSetException e)
            {
                throw new DatabaseUnitRuntimeException(e);
            }
        }

        ////////////////////////////////////////////////////////////////////////
        // IDataSetConsumer interface

        public void startDataSet() throws DataSetException
        {
        }

        public void endDataSet() throws DataSetException
        {
            logger.debug("endDataSet() - start");

            try
            {
                _channel.put(EOD);
            }
            catch (InterruptedException e)
            {
                throw new DataSetException();
            }
        }

        public void startTable(ITableMetaData metaData) throws DataSetException
        {
            logger.debug("startTable(metaData=" + metaData + ") - start");

            try
            {
                _channel.put(metaData);
            }
            catch (InterruptedException e)
            {
                throw new DataSetException();
            }
        }

        public void endTable() throws DataSetException
        {
        }

        public void row(Object[] values) throws DataSetException
        {
            logger.debug("row(values=" + values + ") - start");

            try
            {
                _channel.put(values);
            }
            catch (InterruptedException e)
            {
                throw new DataSetException();
            }
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美韩日一区二区三区四区| 中文字幕一区二区不卡| 亚洲永久精品大片| 精品成人a区在线观看| 97久久人人超碰| 国产乱码精品一区二区三区av| 日韩理论片中文av| 国产亚洲综合色| 久久久三级国产网站| 精品国产一区二区三区忘忧草 | 韩国精品免费视频| 一区二区三区在线视频免费 | 成人国产精品免费观看视频| 国产成a人亚洲| 亚洲日本乱码在线观看| 欧美亚洲一区二区在线观看| 99久久伊人精品| 丰满亚洲少妇av| 国产不卡视频在线观看| 国产91露脸合集magnet| 国产高清在线精品| 成人性生交大片| 欧美日韩1区2区| 成人亚洲一区二区一| 亚洲一区二区五区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美网站一区二区| 欧美亚洲一区二区在线| 91精品久久久久久久久99蜜臂| 91精品国产综合久久香蕉的特点| 久久噜噜亚洲综合| 亚洲视频 欧洲视频| 成人av影院在线| 成人黄页毛片网站| 在线视频国产一区| 精品久久久久久久人人人人传媒| 欧美va日韩va| 国产农村妇女毛片精品久久麻豆| 国产精品视频在线看| 天堂成人国产精品一区| 成人黄色小视频| 午夜久久久久久久久久一区二区| 亚洲国产精品一区二区久久恐怖片| 美腿丝袜一区二区三区| 97久久精品人人爽人人爽蜜臀| 欧美性大战久久| 国产精品视频在线看| 日本亚洲视频在线| 97成人超碰视| 国产精品国产馆在线真实露脸| 91年精品国产| 亚洲激情图片qvod| 亚洲成人综合视频| 9色porny自拍视频一区二区| 日韩三级av在线播放| 亚洲视频在线观看三级| 亚洲成a人片在线不卡一二三区| 91小视频免费观看| 亚洲色大成网站www久久九九| 成人激情免费电影网址| 亚洲人成精品久久久久| 欧美在线免费播放| 美女免费视频一区二区| 国产亚洲精品aa午夜观看| 一区二区三区精品视频| 国产不卡一区视频| 一区二区三区精品| 亚洲精品一区二区三区蜜桃下载| 国产精品911| 亚洲一区二区av电影| 欧美tickling挠脚心丨vk| 99这里只有久久精品视频| 亚洲自拍偷拍图区| 在线不卡a资源高清| 六月婷婷色综合| 久久久精品日韩欧美| 9人人澡人人爽人人精品| 国产午夜精品一区二区三区视频| 免费成人av资源网| 2024国产精品| 极品少妇一区二区| 国产欧美日韩卡一| 99精品国产热久久91蜜凸| 亚洲人成在线播放网站岛国 | 91在线免费视频观看| 激情国产一区二区| 日韩国产精品大片| 亚洲国产综合在线| 欧美日韩国产精品自在自线| 亚洲成人在线免费| 2020国产精品自拍| 色偷偷久久一区二区三区| 一区二区三区免费看视频| 欧美伦理电影网| 国产精品一区二区在线观看网站| 欧美激情一区不卡| 91成人国产精品| 国产综合色精品一区二区三区| 中文字幕一区在线观看视频| 欧美人与性动xxxx| 丁香五精品蜜臀久久久久99网站 | 久久久久高清精品| 一本大道av一区二区在线播放| 午夜一区二区三区视频| 国产精品女人毛片| 久久精品欧美一区二区三区不卡| 欧美精品在线视频| 欧美亚洲国产一区二区三区va | 不卡视频免费播放| 成人自拍视频在线| 国产福利一区二区三区视频在线 | 精品视频在线看| 成人av免费网站| 亚洲一区二区视频| 亚洲精品成人天堂一二三| 欧美精品一区二区久久久| 精品区一区二区| 亚洲精品一线二线三线无人区| 国产校园另类小说区| 欧美激情综合在线| 亚洲黄色在线视频| 久久er99热精品一区二区| 精品在线免费观看| 国产精品高清亚洲| 欧美熟乱第一页| 色视频一区二区| 99久久精品免费观看| 成人av手机在线观看| 色偷偷88欧美精品久久久| 欧美日韩黄色影视| 日韩欧美一区二区视频| 91精品婷婷国产综合久久性色 | 一二三区精品视频| 日本大胆欧美人术艺术动态| 免费美女久久99| 精品一区二区三区免费| 国产成人亚洲精品狼色在线| 欧美视频一区二区三区| 欧美午夜影院一区| 欧美成人女星排名| 国产精品久久久久久久久晋中 | 久久综合色8888| 91精品婷婷国产综合久久| 国产精品女主播av| 国产精品卡一卡二| 99精品欧美一区二区三区小说| 欧美乱妇15p| 麻豆精品国产91久久久久久| 在线观看区一区二| 亚洲视频一区二区在线| 国产成人综合网站| 久久综合狠狠综合久久激情 | 亚洲电影在线播放| 成人av网在线| 国产精品不卡视频| 成人av一区二区三区| 中文字幕在线不卡| 91视频一区二区三区| 亚洲精品国产一区二区精华液| 91福利国产成人精品照片| 亚洲免费观看高清在线观看| 99久久精品国产一区二区三区| 中文字幕制服丝袜一区二区三区| 成人做爰69片免费看网站| 国产精品久久久久久久久动漫| 肉肉av福利一精品导航| 91精品国产品国语在线不卡| 久久66热偷产精品| 久久午夜电影网| 成人午夜激情片| 一区二区欧美在线观看| 欧美日韩在线观看一区二区 | 国产人成一区二区三区影院| 亚洲国产综合在线| 日韩丝袜情趣美女图片| 蜜桃免费网站一区二区三区| 欧美精品自拍偷拍动漫精品| 亚洲国产aⅴ成人精品无吗| 欧美日韩精品专区| 精品在线一区二区| 国产亚洲欧美日韩在线一区| 成人性生交大片免费看在线播放 | 最新不卡av在线| 欧美久久一二三四区| 国产精品亚洲一区二区三区妖精| 久久青草欧美一区二区三区| av影院午夜一区| 日韩av一级电影| 日本一二三四高清不卡| 在线一区二区三区四区五区| 麻豆视频一区二区| 亚洲欧美在线另类| 精品女同一区二区| av成人老司机| 免费观看成人鲁鲁鲁鲁鲁视频| 中国av一区二区三区| 91福利国产成人精品照片| 国产精一品亚洲二区在线视频| 美女精品一区二区| 国产欧美综合在线观看第十页|