package org.molgenis.data.support;
import com.google.gson.Gson;
import org.molgenis.data.DataConverter;
import org.molgenis.data.Entity;
import org.molgenis.data.meta.model.Attribute;
import org.molgenis.data.meta.model.EntityType;
public class StringExpressionEvaluator implements ExpressionEvaluator
{
private Attribute targetAttribute;
private Attribute sourceAttribute;
/**
* Constructs a new expression evaluator for an attribute whose expression is a simple string.
*
* @param attribute attribute meta data
* @param entityType entity meta data
*/
public StringExpressionEvaluator(Attribute attribute, EntityType entityType)
{
targetAttribute = attribute;
String expression = attribute.getExpression();
if (expression == null)
{
throw new NullPointerException("Attribute has no expression.");
}
Gson gson = new Gson();
String attributeName = gson.fromJson(expression, String.class);
sourceAttribute = entityType.getAttribute(attributeName);
if (sourceAttribute == null)
{
throw new IllegalArgumentException(
"Expression for attribute '" + attribute.getName() + "' references non-existant attribute '"
+ attributeName + "'.");
}
}
@Override
public Object evaluate(Entity entity)
{
Object o = entity.get(sourceAttribute.getName());
return DataConverter.convert(o, targetAttribute);
}
}