/**
* Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT
* All rights reserved. Use is subject to license terms. See LICENSE.TXT
*/
package org.diirt.datasource.expression;
import org.diirt.datasource.PVWriterDirector;
import org.diirt.datasource.ReadFunction;
import org.diirt.datasource.WriteFunction;
import org.diirt.datasource.WriteRecipeBuilder;
/**
* Implementation class for {@link SourceRateReadWriteExpression}.
*
* @param <R> type of the read payload
* @param <W> type of the write payload
* @author carcassi
*/
public class SourceRateReadWriteExpressionImpl<R, W> extends SourceRateReadWriteExpressionListImpl<R, W> implements SourceRateReadWriteExpression<R, W> {
private final SourceRateExpression<R> sourceRateExpression;
private final WriteExpression<W> writeExpression;
{
// Make sure that the list includes this expression
addThis();
}
@Override
public SourceRateReadWriteExpressionImpl<R, W> as(String name) {
sourceRateExpression.as(name);
writeExpression.getWriteExpressionImpl().as(name);
return this;
}
/**
* Creates an expression that can be both read and written.
*
* @param sourceRateExpression the read part of the expression
* @param writeExpression the write part of the expression
*/
public SourceRateReadWriteExpressionImpl(SourceRateExpression<R> sourceRateExpression, WriteExpression<W> writeExpression) {
this.sourceRateExpression = sourceRateExpression;
this.writeExpression = writeExpression;
}
@Override
public final String getName() {
return sourceRateExpression.getName();
}
@Override
public final ReadFunction<R> getFunction() {
return sourceRateExpression.getFunction();
}
@Override
public final SourceRateExpressionImpl<R> getSourceRateExpressionImpl() {
return sourceRateExpression.getSourceRateExpressionImpl();
}
@Override
public final WriteExpressionImpl<W> getWriteExpressionImpl() {
return writeExpression.getWriteExpressionImpl();
}
@Override
public final WriteFunction<W> getWriteFunction() {
return writeExpression.getWriteFunction();
}
@Override
public void fillWriteRecipe(PVWriterDirector director, WriteRecipeBuilder builder) {
writeExpression.fillWriteRecipe(director, builder);
}
}