X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Ffunction%2FAll.java;h=4e775e08a22e12597044218f138aef3cfcaf6637;hp=604faa69ed63d99f944bfabac8686eea2437750f;hb=89b915a237d980f62d9ffe2caeb8a69170e0ce56;hpb=1251d640abb698a4018ef1ea212f8cdf78befaaf 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..4e775e08a 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; @@ -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); } } @@ -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); } @@ -1305,14 +1310,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); } 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 +1333,14 @@ 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); } 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 +1504,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);