/*
* 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.translator.loopback;
import org.teiid.core.util.ApplicationInfo;
import org.teiid.language.Command;
import org.teiid.metadata.MetadataFactory;
import org.teiid.metadata.RuntimeMetadata;
import org.teiid.translator.BaseDelegatingExecutionFactory;
import org.teiid.translator.Execution;
import org.teiid.translator.ExecutionContext;
import org.teiid.translator.Translator;
import org.teiid.translator.TranslatorException;
import org.teiid.translator.TranslatorProperty;
import org.teiid.translator.jdbc.teiid.TeiidExecutionFactory;
/**
* Loopback translator.
*/
@Translator(name="loopback", description="A translator for testing, that returns mock data")
public class LoopbackExecutionFactory extends BaseDelegatingExecutionFactory {
private int waitTime = 0;
private int rowCount = 1;
private boolean throwError = false;
private long pollIntervalInMilli = -1;
private boolean incrementRows = false;
private int charValueSize = 10;
public LoopbackExecutionFactory() {
TeiidExecutionFactory tef = new TeiidExecutionFactory();
tef.setDatabaseVersion(ApplicationInfo.getInstance().getReleaseNumber());
this.setDelegate(tef);
}
@Override
public void start() throws TranslatorException {
if (this.getDelegateName() == null && this.getDelegate() != null) {
this.getDelegate().start();
}
super.start();
}
@TranslatorProperty(display="Size of values for CLOB, VARCHAR, etc.", advanced=true)
public int getCharacterValuesSize() {
return charValueSize;
}
public void setCharacterValuesSize(int charValSize){
this.charValueSize = charValSize;
}
@TranslatorProperty(display="If set to true each value in each column is being incremented with each row", advanced=true)
public boolean getIncrementRows() {
return incrementRows;
}
public void setIncrementRows(boolean incrementRows) {
this.incrementRows = incrementRows;
}
@Override
public Object getConnection(Object factory) throws TranslatorException {
return null;
}
@Override
public Object getConnection(Object factory,
ExecutionContext executionContext) throws TranslatorException {
return null;
}
@TranslatorProperty(display="Max Random Wait Time", advanced=true)
public int getWaitTime() {
return waitTime;
}
public void setWaitTime(int waitTime) {
this.waitTime = waitTime;
}
@TranslatorProperty(display="Rows Per Query", advanced=true)
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}
@TranslatorProperty(display="Always Throw Error")
public boolean isThrowError() {
return this.throwError;
}
public void setThrowError(boolean error) {
this.throwError = error;
}
@TranslatorProperty(display="Poll interval if using a Asynchronous Connector")
public long getPollIntervalInMilli() {
return this.pollIntervalInMilli;
}
public void setPollIntervalInMilli(long intervel) {
this.pollIntervalInMilli = intervel;
}
@Override
public Execution createExecution(Command command, ExecutionContext executionContext, RuntimeMetadata metadata, Object connection)
throws TranslatorException {
return new LoopbackExecution(command, this);
}
@Override
public boolean isSourceRequired() {
return false;
}
@Override
public boolean isSourceRequiredForMetadata() {
return false;
}
@Override
public void getMetadata(MetadataFactory metadataFactory, Object conn)
throws TranslatorException {
}
//override to set as non required
@Override
@TranslatorProperty(display = "Delegate name", required = false)
public String getDelegateName() {
return super.getDelegateName();
}
@Override
public boolean returnsSingleUpdateCount() {
return true;
}
}