package org.hypergraphdb.query; import org.hypergraphdb.HGHandle; import org.hypergraphdb.HGIndex; import org.hypergraphdb.HGPersistentHandle; import org.hypergraphdb.HGRandomAccessResult; import org.hypergraphdb.HGRandomAccessResult.GotoResult; import org.hypergraphdb.HyperGraph; import org.hypergraphdb.atom.HGSubgraph; public class SubgraphMemberCondition implements HGQueryCondition, HGAtomPredicate { private HGHandle subgraphHandle; public SubgraphMemberCondition() { } public SubgraphMemberCondition(HGHandle subgraphHandle) { this.subgraphHandle = subgraphHandle; } public HGHandle getSubgraphHandle() { return subgraphHandle; } public void setSubgraphHandle(HGHandle subgraphHandle) { this.subgraphHandle = subgraphHandle; } public boolean satisfies(HyperGraph graph, HGHandle handle) { HGIndex<HGPersistentHandle, HGPersistentHandle> idx = HGSubgraph.getIndex(graph); HGRandomAccessResult<HGPersistentHandle> rs = idx.find(subgraphHandle.getPersistent()); try { return rs.goTo(handle.getPersistent(), true) == GotoResult.found; } finally { rs.close(); } } }