/*
* Copyright (c) 2007-2010 Concurrent, Inc. All Rights Reserved.
*
* Project and contact information: http://www.cascading.org/
*
* This file is part of the Cascading project.
*
* Cascading is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Cascading 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Cascading. If not, see <http://www.gnu.org/licenses/>.
*/
package cascading;
import java.util.Iterator;
import cascading.flow.FlowProcess;
import cascading.operation.BaseOperation;
import cascading.operation.Buffer;
import cascading.operation.BufferCall;
import cascading.operation.OperationCall;
import cascading.tuple.Fields;
import cascading.tuple.TupleEntry;
/**
*
*/
public class TestIdentityBuffer extends BaseOperation<Integer> implements Buffer<Integer>
{
private Fields groupFields;
private Integer numGroups;
public TestIdentityBuffer( Fields groupFields, int numGroups )
{
super( Fields.ARGS );
this.groupFields = groupFields;
this.numGroups = numGroups;
}
@Override
public void prepare( FlowProcess flowProcess, OperationCall<Integer> operationCall )
{
operationCall.setContext( 0 );
}
@Override
public void cleanup( FlowProcess flowProcess, OperationCall<Integer> operationCall )
{
if( !operationCall.getContext().equals( numGroups ) )
throw new RuntimeException( "incorrect num groups, found: " + operationCall.getContext() + " expected: " + numGroups );
}
public void operate( FlowProcess flowProcess, BufferCall<Integer> bufferCall )
{
bufferCall.setContext( bufferCall.getContext() + 1 );
TupleEntry group = bufferCall.getGroup();
if( !group.getFields().equals( groupFields ) )
throw new RuntimeException( "group fields do not match" );
if( group.size() != groupFields.size() )
throw new RuntimeException( "group tuple size not fields size" );
if( group.size() == 0 )
throw new RuntimeException( "group tuple size is zero" );
for( Object o : group.getTuple() )
{
if( o == null )
throw new RuntimeException( "group tuple value is null" );
}
Iterator<TupleEntry> iterator = bufferCall.getArgumentsIterator();
while( iterator.hasNext() )
bufferCall.getOutputCollector().add( iterator.next() );
}
}