/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.query.processor;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.teiid.common.buffer.BlockedException;
import org.teiid.common.buffer.TupleBatch;
import org.teiid.core.TeiidComponentException;
import org.teiid.query.sql.lang.Command;
/**
*/
public class FakeProcessorPlan extends ProcessorPlan {
private List outputElements;
private List batches;
int batchIndex = 0;
private int nextBatchRow = 1;
private boolean opened = false;
/**
* Constructor for FakeProcessorPlan.
* @param batches List of things to return in response to nextBatch() - typically
* this is TupleBatch, but it can also be BlockedException or a
* MetaMatrixComponentException.
*/
public FakeProcessorPlan(List outputElements, List batches) {
this.outputElements = outputElements;
this.batches = batches;
}
public FakeProcessorPlan(int counts) {
List[] rows = new List[counts];
for (int i = 0; i < counts; i++) {
rows[i] = Arrays.asList(new Object[] {new Integer(1)});
}
TupleBatch batch = new TupleBatch(1, rows);
batch.setTerminationFlag(true);
this.batches = Arrays.asList(batch);
this.outputElements = Command.getUpdateCommandSymbol();
}
public boolean isOpened() {
return opened;
}
/**
* @see java.lang.Object#clone()
*/
public FakeProcessorPlan clone() {
throw new UnsupportedOperationException();
}
/**
* @see org.teiid.query.processor.ProcessorPlan#getOutputElements()
*/
public List getOutputElements() {
return this.outputElements;
}
/**
* @see org.teiid.query.processor.ProcessorPlan#open()
*/
public void open() throws TeiidComponentException {
assertFalse("ProcessorPlan.open() should not be called more than once", opened); //$NON-NLS-1$
opened = true;
}
/**
* @see org.teiid.query.processor.ProcessorPlan#nextBatch()
*/
public TupleBatch nextBatch() throws BlockedException, TeiidComponentException {
if(this.batches == null || this.batches.size() == 0 || batchIndex >= this.batches.size()) {
// Return empty terminator batch
TupleBatch batch = new TupleBatch(nextBatchRow, Collections.EMPTY_LIST);
batch.setTerminationFlag(true);
return batch;
}
Object nextReturn = this.batches.get(batchIndex);
batchIndex++;
if(nextReturn instanceof TupleBatch) {
TupleBatch batch = (TupleBatch) nextReturn;
nextBatchRow = nextBatchRow + batch.getRowCount();
return batch;
}
throw (TeiidComponentException) nextReturn;
}
/**
* @see org.teiid.query.processor.ProcessorPlan#close()
*/
public void close() throws TeiidComponentException {
// nothing
}
/**
* @see org.teiid.query.processor.ProcessorPlan#getSchema()
*/
public List getSchema() {
return this.outputElements;
}
}