package org.simantics.spreadsheet.graph; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.Binding; import org.simantics.databoard.binding.error.BindingConstructionException; import org.simantics.databoard.binding.mutable.Variant; import org.simantics.db.ReadGraph; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.VariableRead; import org.simantics.db.layer0.variable.Variable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CellValue extends VariableRead { private static final Logger LOGGER = LoggerFactory.getLogger(CellValue.class); public CellValue(Variable variable) { super(variable); } @Override public Object perform(ReadGraph graph) throws DatabaseException { Object value = variable.getValue(graph); String propertyName = variable.getName(graph); if("content".equals(propertyName)) { if(value == null) { return Variant.ofInstance("Null content: " + variable.getURI(graph)); } if(value instanceof Variable) { Variable var = (Variable)value; Object value2 = var.getValue(graph); if(value2 instanceof Variant) { return value; } else { if(value2 == null) return Variant.ofInstance("Null value from " + var.getURI(graph)); try { Binding binding = Bindings.getBinding( value2.getClass() ); return new Variant(binding, value2); } catch (BindingConstructionException e) { String msg = "Unsupported content " + value2 + " from " + var.getURI(graph); LOGGER.error(msg, e); return Variant.ofInstance(msg); } } } if(!(value instanceof Variant)) { try { Binding binding = Bindings.getBinding( value.getClass() ); return new Variant(binding, value); } catch (BindingConstructionException e) { String msg = "Unsupported content " + value + " at " + variable.getURI(graph); LOGGER.error(msg, e); return Variant.ofInstance(msg); } } } return value; } }