X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Ffunction%2FAll.java;h=f52148c2a6b2306d9c8d4b6c0ce9e31cb5e89efe;hb=7de104661f3f3c032d330734d3f8c52aed38e329;hp=604faa69ed63d99f944bfabac8686eea2437750f;hpb=1251d640abb698a4018ef1ea212f8cdf78befaaf;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/function/All.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/function/All.java index 604faa69e..f52148c2a 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/function/All.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/function/All.java @@ -38,14 +38,17 @@ import org.simantics.db.common.utils.Functions; import org.simantics.db.common.utils.ListUtils; import org.simantics.db.common.utils.Logger; import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.common.utils.NearestOwnerFinder; import org.simantics.db.common.validation.L0Validations; +import org.simantics.db.exception.AdaptionException; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.DoesNotContainValueException; import org.simantics.db.exception.NoSingleResultException; import org.simantics.db.exception.RuntimeDatabaseException; +import org.simantics.db.layer0.exception.InvalidVariableException; +import org.simantics.db.layer0.exception.MissingVariableException; 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.request.PossibleURI; import org.simantics.db.layer0.request.PropertyInfo; import org.simantics.db.layer0.request.PropertyInfoRequest; @@ -136,7 +139,7 @@ public class All { return graph.getValue2(object, variable); } else { for (Pair assertion : assertions.values()) { - if (assertion.first.predicate.equals(variable.property.predicate)) { + if (assertion.first.predicate.equals(variable.getPossiblePredicateResource(graph))) { return graph.getValue2(assertion.second, variable); } } @@ -167,7 +170,7 @@ public class All { if(value == null) throw new MissingVariableValueException(variable.getPossibleURI(graph)); return value.getValue(binding); } catch (AdaptException e) { - throw new DatabaseException(e); + throw new AdaptionException("Could not get value for " + context.getURI(graph), e); } } @@ -198,7 +201,7 @@ public class All { return graph.getValue2(object, variable, binding); } else { for (Pair assertion : assertions.values()) { - if (assertion.first.predicate.equals(variable.property.predicate)) { + if (assertion.first.predicate.equals(variable.getPossiblePredicateResource(graph))) { return graph.getValue2(assertion.second, variable, binding); } } @@ -267,7 +270,7 @@ public class All { try { modifier.apply(graph, context, value, Bindings.getBinding(value.getClass())); } catch (BindingConstructionException e) { - throw new DatabaseException(e); + throw new org.simantics.db.exception.BindingException("",e); } } @@ -567,9 +570,9 @@ public class All { // Process graph properties for(Resource predicate : predicates) { - PropertyInfo info = graph.isImmutable(predicate) ? - graph.syncRequest(new PropertyInfoRequest(predicate), TransientCacheAsyncListener.instance()) : - graph.syncRequest(new PropertyInfoRequest(predicate)); + PropertyInfo info = //graph.isImmutable(predicate) ? + graph.syncRequest(new PropertyInfoRequest(predicate), TransientCacheAsyncListener.instance());// : + //graph.syncRequest(new PropertyInfoRequest(predicate)); if(!info.isHasProperty) continue; @@ -609,7 +612,7 @@ public class All { Variable parent = context.getParent(graph); Resource container = parent.getPossibleRepresents(graph); if(container == null) - return null; + return null; Map methods = graph.syncRequest(new UnescapedMethodMapOfResource(container)); Resource predicate = methods.get(name); if(predicate != null) { @@ -625,6 +628,8 @@ public class All { public Map getVariables(ReadGraph graph, Variable context, Map map) throws DatabaseException { Variable parent = context.getParent(graph); Resource container = parent.getPossibleRepresents(graph); + if(container == null) + return Collections.emptyMap(); Map methods = graph.syncRequest(new UnescapedMethodMapOfResource(container)); for(Map.Entry entry : methods.entrySet()) { String name = entry.getKey(); @@ -987,7 +992,7 @@ public class All { public static PropertyInfo getPossiblePropertyInfoFromContext(ReadGraph graph, Variable variable, Resource context, String name) throws DatabaseException { if(context == null) return null; - Map predicates = graph.syncRequest(new UnescapedPropertyMapOfResource(context)); + Map predicates = graph.syncRequest(new UnescapedPropertyMapOfResource(context), TransientCacheListener.instance()); return predicates.get(name); } @@ -1159,8 +1164,11 @@ public class All { if(property instanceof StandardGraphPropertyVariable) { StandardGraphPropertyVariable variable = (StandardGraphPropertyVariable)property; if (variable.parentResource != null) { - Statement stm = graph.getPossibleStatement(variable.parentResource, variable.property.predicate); - return stm != null && stm.isAsserted(variable.parentResource); + Resource predicate = variable.getPossiblePredicateResource(graph); + if (predicate != null) { + Statement stm = graph.getPossibleStatement(variable.parentResource, predicate); + return stm != null && stm.isAsserted(variable.parentResource); + } } } return Boolean.FALSE; @@ -1305,14 +1313,14 @@ public class All { } if (variable.parentResource == null) - throw new VariableException("Variable is not represented by any resource (URI=" + variable.getPossibleURI(graph) + ")."); + throw new InvalidVariableException("Variable is not represented by any resource (URI=" + variable.getPossibleURI(graph) + ")."); try { - return graph.getRelatedValue2(variable.parentResource, variable.property.predicate, variable); + return graph.getRelatedValue2(variable.parentResource, variable.getPredicateResource(graph), variable); } catch (NoSingleResultException e) { - throw new MissingVariableValueException(variable.getPossibleURI(graph)); + throw new MissingVariableValueException(variable.getPossibleURI(graph), e); } catch (DoesNotContainValueException e) { - throw new MissingVariableValueException(variable.getPossibleURI(graph)); + throw new MissingVariableValueException(variable.getPossibleURI(graph), e); } } @@ -1328,14 +1336,15 @@ public class All { } if (variable.parentResource == null) - throw new VariableException("Variable is not represented by any resource (URI=" + variable.getPossibleURI(graph) + ")."); + throw new MissingVariableException("Variable is not represented by any resource (URI=" + variable.getPossibleURI(graph) + ").", context.getPossibleRepresents(graph)); + try { - return graph.getRelatedValue2(variable.parentResource, variable.property.predicate, variable); + return graph.getRelatedValue2(variable.parentResource, variable.getPredicateResource(graph), variable); } catch (NoSingleResultException e) { - throw new MissingVariableValueException(variable.getPossibleURI(graph)); + throw new MissingVariableValueException(variable.getPossibleURI(graph), e); } catch (DoesNotContainValueException e) { - throw new MissingVariableValueException(variable.getPossibleURI(graph)); + throw new MissingVariableValueException(variable.getPossibleURI(graph), e); } } @@ -1499,7 +1508,7 @@ public class All { ClusteringSupport cs = graph.getService(ClusteringSupport.class); if(cs.isClusterSet(resource) && !base.equals(resource)) return resource; - Resource nearest = CommonDBUtils.getNearestOwner(graph, Collections.singletonList(resource)); + Resource nearest = NearestOwnerFinder.getNearestOwner(graph, resource); if(nearest == null) return null; return getPossibleNearestClusterSet(graph, base, nearest);