/**
* 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;
import org.diirt.datasource.expression.DesiredRateExpression;
/**
*
* @author carcassi
*/
public class ReadExpressionTester {
private DesiredRateExpression<?> expression;
private ReadRecipe readRecipe;
private PVDirector<?> pvReaderDirector = new PVDirector<Object>(null, null, null, null, null, null);
public ReadExpressionTester(DesiredRateExpression<?> expression) {
this.expression = expression;
pvReaderDirector.connectReadExpression(expression);
}
public ReadRecipe getCurrentReadRecipe() {
return pvReaderDirector.getCurrentReadRecipe();
}
public void writeValue(String name, Object value) {
boolean written = false;
for (ChannelReadRecipe channelRecipe : getCurrentReadRecipe().getChannelReadRecipes()) {
if (channelRecipe.getChannelName().equals(name)) {
@SuppressWarnings("unchecked")
ValueCache<Object> cache = (ValueCache<Object>) channelRecipe.getReadSubscription().getValueCache();
cache.writeValue(value);
written = true;
}
}
if (!written) {
throw new IllegalStateException("Can't find recipe for channel '" + name + "'");
}
}
public ChannelReadRecipe recipeFor(String channelName) {
for (ChannelReadRecipe channelRecipe : getCurrentReadRecipe().getChannelReadRecipes()) {
if (channelRecipe.getChannelName().equals(channelName)) {
return channelRecipe;
}
}
return null;
}
public ReadRecipe getReadRecipe() {
return getCurrentReadRecipe();
}
public ReadFunction<?> getFunction() {
return expression.getFunction();
}
public DesiredRateExpression<?> getExpression() {
return expression;
}
public Object getValue() {
return expression.getFunction().readValue();
}
}