import org.simantics.datatypes.literal.GUID;
import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
+import org.simantics.db.common.utils.NameUtils;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.layer0.adapter.Instances;
import org.simantics.db.layer0.exception.MissingVariableException;
import org.simantics.layer0.Layer0;
import org.simantics.simulation.ontology.SimulationResource;
import org.simantics.structural.stubs.StructuralResource2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class StructuralRVIResolver extends StandardRVIResolver {
+ private static final Logger LOGGER = LoggerFactory.getLogger(StructuralRVIResolver.class);
protected boolean isRVIBase(ReadGraph graph, Variable variable) throws DatabaseException {
if (Variables.isContext(graph, variable)) return true;
Instances instances = graph.adapt(Layer0.getInstance(graph).Entity, Instances.class);
GUID guid = new GUID(part.mostSignificant, part.leastSignificant);
Collection<Resource> queryResult = instances.find(graph, indexRoot, "GUID:"+guid.indexString());
- if(queryResult.size() != 1) return null;
+ if(queryResult.size() != 1) {
+ if(queryResult.size() > 1) {
+ StringBuilder b = new StringBuilder();
+ boolean first = true;
+ for(Resource r : queryResult) {
+ if(first)
+ first = false;
+ else
+ b.append(", ");
+ b.append(NameUtils.getURIOrSafeNameInternal(graph, r));
+ }
+ LOGGER.error("Found {} resources with the same GUID {}: {}.", queryResult.size(), guid, b);
+ }
+ return null;
+ }
return getRVIPath(graph, variable, queryResult.iterator().next());
}
@Override
protected Variable resolveChild(ReadGraph graph, Variable variable, Resource resource) throws DatabaseException {
Collection<Resource> path = getRVIPath(graph, variable, resource);
- if(path == null) throw new MissingVariableException("Didn't find a variable related to " + resource + ".", resource);
- for(Resource r : path) variable = variable.browse(graph, r);
+ if (path == null)
+ throw new MissingVariableException("Didn't find a variable related to " + resource + ".", resource);
+ for (Resource r : path)
+ variable = variable.browse(graph, r);
return variable;
}
-
+
@Override
protected Variable resolveChild(ReadGraph graph, Variable variable, GuidRVIPart part) throws DatabaseException {
Collection<Resource> path = getRVIPath(graph, variable, part);
- if(path == null) throw new MissingVariableException("Didn't find a variable related to " + part + ".");
- for(Resource r : path) variable = variable.browse(graph, r);
+ if (path == null)
+ throw new MissingVariableException("Didn't find a variable related to " + part + ".", variable.getPossibleRepresents(graph));
+ for (Resource r : path)
+ variable = variable.browse(graph, r);
return variable;
}