import org.simantics.databoard.binding.Binding;
import org.simantics.databoard.binding.impl.ObjectVariantBinding;
import org.simantics.databoard.type.Datatype;
+import org.simantics.db.DevelopmentKeys;
import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
import org.simantics.db.WriteGraph;
import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
-import org.simantics.db.common.utils.Logger;
import org.simantics.db.common.validation.L0Validations;
import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.DatatypeNotFoundException;
import org.simantics.db.exception.ValidationException;
+import org.simantics.db.layer0.exception.InvalidVariableException;
import org.simantics.db.layer0.exception.MissingVariableValueException;
import org.simantics.db.layer0.exception.PendingVariableException;
-import org.simantics.db.layer0.exception.VariableException;
import org.simantics.db.layer0.function.All;
import org.simantics.db.layer0.request.PropertyInfo;
import org.simantics.db.layer0.request.PropertyInfoRequest;
+import org.simantics.db.layer0.scl.SCLDatabaseException;
import org.simantics.db.layer0.util.Layer0Utils;
import org.simantics.layer0.Layer0;
import org.simantics.utils.Development;
import org.simantics.utils.datastructures.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class StandardGraphPropertyVariable extends AbstractPropertyVariable {
- protected static final PropertyInfo NO_PROPERTY = new PropertyInfo(null, null,
- false, Collections.<String> emptySet(), null, null, null, null, null, null,
- Collections.<String, Pair<Resource, ChildReference>> emptyMap(),
- null, false);
+ private static final Logger LOGGER = LoggerFactory.getLogger(StandardGraphPropertyVariable.class);
+
+ protected static final PropertyInfo NO_PROPERTY = new PropertyInfo(null, null, true,
+ false, false, Collections.<String> emptySet(), null, null, null, null, null, null,
+ Collections.<String, Pair<Resource, ChildReference>> emptyMap(),
+ null, false);
final public Variable parent;
final public Resource parentResource;
public <T> T getValue(ReadGraph graph) throws DatabaseException {
if(Development.DEVELOPMENT) {
- String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
- if(error != null) {
- Logger.defaultLogError(new ValidationException(error));
- //throw new ValidationException(error);
+ if(Development.<Boolean>getProperty(DevelopmentKeys.L0_VALIDATION, Bindings.BOOLEAN)) {
+ String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
+ if(error != null) {
+ LOGGER.error(error);
+ throw new ValidationException(error);
+ }
}
}
return getValue(graph);
if(Development.DEVELOPMENT) {
- String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
- if(error != null) {
- Logger.defaultLogError(new ValidationException(error));
- throw new ValidationException(error);
+ if(Development.<Boolean>getProperty(DevelopmentKeys.L0_VALIDATION, Bindings.BOOLEAN)) {
+ String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
+ if(error != null) {
+ LOGGER.error(error);
+ throw new ValidationException(error);
+ }
}
}
try {
- return (T)getValueAccessor(graph).getValue(graph, this, binding);
- } catch (PendingVariableException e) {
- throw e;
+ return (T) getValueAccessor(graph).getValue(graph, this, binding);
+ } catch (SCLDatabaseException e) { // these can be thrown when compiling e.g. derived properties
+ throw e;
+ } catch (MissingVariableValueException | PendingVariableException e) {
+ throw e;
} catch (Throwable t) {
throw new MissingVariableValueException(t);
}
@Override
public Resource getRepresents(ReadGraph graph) throws DatabaseException {
if(represents == null)
- throw new VariableException("Variable is not represented by any resource (URI=" + getPossibleURI(graph) + ").");
+ throw new InvalidVariableException("Variable is not represented by any resource (URI=" + getPossibleURI(graph) + ").");
return represents;
-// return graph.getSingleObject(parentResource, property.predicate);
}
@Override
public Resource getPossibleRepresents(ReadGraph graph) throws DatabaseException {
-// if(parentResource == null) return null;
-// return graph.getPossibleObject(parentResource, property.predicate);
return represents;
}
public void setValue(WriteGraph graph, Object value, Binding binding) throws DatabaseException {
if(Development.DEVELOPMENT) {
- String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
- if(error != null) {
- Logger.defaultLogError(new ValidationException(error));
- //throw new ValidationException(error);
+ if(Development.<Boolean>getProperty(DevelopmentKeys.L0_VALIDATION, Bindings.BOOLEAN)) {
+ String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
+ if(error != null) {
+ LOGGER.error(error);
+ throw new ValidationException(error);
+ }
}
}
public void setValue(WriteGraph graph, Object value) throws DatabaseException {
if(Development.DEVELOPMENT) {
- String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
- if(error != null) {
- Logger.defaultLogError(new ValidationException(error));
- throw new ValidationException(error);
+ if(Development.<Boolean>getProperty(DevelopmentKeys.L0_VALIDATION, Bindings.BOOLEAN)) {
+ String error = L0Validations.checkValueType(graph, parentResource, property.predicate);
+ if(error != null) {
+ LOGGER.error(error);
+ throw new ValidationException(error);
+ }
}
}
@Override
public Datatype getDatatype(ReadGraph graph) throws DatabaseException {
-//<<<<<<< .mine
-//
-// Binding binding = getPossibleDefaultBinding(graph);
-// if(binding != null) return binding.type();
-//
-// Variant vt = getVariantValue(graph);
-// binding = vt.getBinding();
-// if(binding == null) throw new DatabaseException("No binding in Variant with value " + vt.getValue());
-// return binding.type();
-//=======
Datatype type;
try {
type = getValueAccessor(graph).getDatatype(graph, this);
if (type == null) {
String uri = this.getPossibleURI(graph);
if (uri != null)
- throw new DatabaseException("No data type for " + uri);
+ throw new DatatypeNotFoundException("No data type for " + uri);
else
- throw new DatabaseException("No data type for " + this.getIdentifier());
+ throw new DatatypeNotFoundException("No data type for " + this.getIdentifier());
}
return type;
-//>>>>>>> .r30794
}
return valueMap.getVariable(graph, this, name);
} catch (DatabaseException e) {
return null;
- } catch (Throwable t) {
- System.err.println("err: " + getURI(graph) + " # " + name);
+ } catch (Exception t) {
+ LOGGER.error("getPossibleDomainProperty is implemented incorrectly, but returns null on Exception for backward compatibility. URI="+getURI(graph)+", name="+name+".", t);
return null;
}
protected VariableMap getPossibleChildVariableMap(ReadGraph graph) throws DatabaseException {
if(represents == null) return All.standardPropertyDomainChildren;
- return graph.getPossibleRelatedValue2(represents, Layer0.getInstance(graph).domainChildren, this);
+ Resource domainChildren = Layer0.getInstance(graph).domainChildren;
+ return graph.getPossibleRelatedValue2(represents, domainChildren,
+ new StandardGraphPropertyVariable(graph, this, domainChildren));
}
protected VariableMap getPossiblePropertyVariableMap(ReadGraph graph) throws DatabaseException {