/**
* 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.PVDirector;
import org.diirt.datasource.PVWriterDirector;
import org.diirt.datasource.ReadFunction;
import org.diirt.datasource.ReadRecipeBuilder;
import org.diirt.datasource.WriteFunction;
import org.diirt.datasource.WriteRecipeBuilder;
/**
* Implementation class for {@link DesiredRateReadWriteExpression}.
*
* @param <R> type of the read payload
* @param <W> type of the write payload
* @author carcassi
*/
public class DesiredRateReadWriteExpressionImpl<R, W> extends DesiredRateReadWriteExpressionListImpl<R, W> implements DesiredRateReadWriteExpression<R, W> {
private final DesiredRateExpression<R> desiredRateExpression;
private final WriteExpression<W> writeExpression;
{
// Make sure that the list includes this expression
addThis();
}
@Override
public final DesiredRateReadWriteExpressionImpl<R, W> as(String name) {
desiredRateExpression.as(name);
writeExpression.getWriteExpressionImpl().as(name);
return this;
}
/**
* Creates an expression that can be both read at the desired rate and written.
*
* @param desiredRateExpression the read part of the expression
* @param writeExpression the write part of the expression
*/
public DesiredRateReadWriteExpressionImpl(DesiredRateExpression<R> desiredRateExpression, WriteExpression<W> writeExpression) {
this.desiredRateExpression = desiredRateExpression;
this.writeExpression = writeExpression;
}
@Override
public final String getName() {
return desiredRateExpression.getName();
}
@Override
public final ReadFunction<R> getFunction() {
return desiredRateExpression.getFunction();
}
@Override
public final DesiredRateExpressionImpl<R> getDesiredRateExpressionImpl() {
return desiredRateExpression.getDesiredRateExpressionImpl();
}
@Override
public final WriteExpressionImpl<W> getWriteExpressionImpl() {
return writeExpression.getWriteExpressionImpl();
}
@Override
public void fillReadRecipe(PVDirector director, ReadRecipeBuilder builder) {
desiredRateExpression.fillReadRecipe(director, builder);
}
@Override
public final WriteFunction<W> getWriteFunction() {
return writeExpression.getWriteFunction();
}
@Override
public void fillWriteRecipe(PVWriterDirector director, WriteRecipeBuilder builder) {
writeExpression.fillWriteRecipe(director, builder);
}
}