    001/*
    002 * Copyright (c) 2007-2017 Xplenty, Inc. All Rights Reserved.
    003 *
    004 * Project and contact information: http://www.cascading.org/
    005 *
    006 * This file is part of the Cascading project.
    007 *
    008 * Licensed under the Apache License, Version 2.0 (the "License");
    009 * you may not use this file except in compliance with the License.
    010 * You may obtain a copy of the License at
    011 *
    012 *     http://www.apache.org/licenses/LICENSE-2.0
    013 *
    014 * Unless required by applicable law or agreed to in writing, software
    015 * distributed under the License is distributed on an "AS IS" BASIS,
    016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    017 * See the License for the specific language governing permissions and
    018 * limitations under the License.
    019 */
    020
    021package cascading.flow.hadoop.util;
    022
    023import java.util.Collection;
    024import java.util.Collections;
    025import java.util.Iterator;
    026
    027import cascading.tuple.Tuple;
    028
    029/**
    030 *
    031 */
    032public class FalseCollection implements Collection<Tuple>, ResettableCollection<Iterator<Tuple>>
    033  {
    034  boolean returnedIterator = false;
    035  Iterator<Tuple> iterator;
    036
    037  @Override
    038  public void reset( Iterator<Tuple> iterator )
    039    {
    040    this.returnedIterator = false;
    041    this.iterator = iterator;
    042    }
    043
    044  @Override
    045  public int size()
    046    {
    047    return 0;
    048    }
    049
    050  @Override
    051  public boolean isEmpty()
    052    {
    053    return iterator == null || !iterator.hasNext();
    054    }
    055
    056  @Override
    057  public boolean contains( Object o )
    058    {
    059    return false;
    060    }
    061
    062  @Override
    063  public Iterator<Tuple> iterator()
    064    {
    065    if( returnedIterator )
    066      throw new IllegalStateException( "may not iterate this tuple stream more than once" );
    067
    068    try
    069      {
    070      if( iterator == null )
    071        return Collections.emptyIterator();
    072
    073      return iterator;
    074      }
    075    finally
    076      {
    077      returnedIterator = true;
    078      }
    079    }
    080
    081  @Override
    082  public Object[] toArray()
    083    {
    084    return new Object[ 0 ];
    085    }
    086
    087  @Override
    088  public <T> T[] toArray( T[] a )
    089    {
    090    return null;
    091    }
    092
    093  @Override
    094  public boolean add( Tuple tuple )
    095    {
    096    return false;
    097    }
    098
    099  @Override
    100  public boolean remove( Object o )
    101    {
    102    return false;
    103    }
    104
    105  @Override
    106  public boolean containsAll( Collection<?> c )
    107    {
    108    return false;
    109    }
    110
    111  @Override
    112  public boolean addAll( Collection<? extends Tuple> c )
    113    {
    114    return false;
    115    }
    116
    117  @Override
    118  public boolean removeAll( Collection<?> c )
    119    {
    120    return false;
    121    }
    122
    123  @Override
    124  public boolean retainAll( Collection<?> c )
    125    {
    126    return false;
    127    }
    128
    129  @Override
    130  public void clear()
    131    {
    132    iterator = null;
    133    }
    134  }