/*
* This file is part of the HyperGraphDB source distribution. This is copyrighted
* software. For permitted uses, licensing options and redistribution, please see
* the LicensingInformation file at the root level of the distribution.
*
* Copyright (c) 2005-2010 Kobrix Software, Inc. All rights reserved.
*/
package org.hypergraphdb.query.cond2qry;
import org.hypergraphdb.HGHandle;
import org.hypergraphdb.HGQuery;
import org.hypergraphdb.HGSearchResult;
import org.hypergraphdb.HyperGraph;
import org.hypergraphdb.HGQuery.hg;
import org.hypergraphdb.query.HGQueryCondition;
import org.hypergraphdb.query.PositionedIncidentCondition;
import org.hypergraphdb.query.impl.PredicateBasedRAFilter;
public class PositionedIncidentToQuery implements ConditionToQuery
{
public QueryMetaData getMetaData(HyperGraph graph, HGQueryCondition c)
{
QueryMetaData x = QueryMetaData.ORACCESS.clone(c);
x.predicateCost = 1;
PositionedIncidentCondition cond = (PositionedIncidentCondition) c;
x.sizeLB = 0;
x.sizeUB = hg.isVar(cond.getTargetRef()) ? Integer.MAX_VALUE :
graph.getIncidenceSet(cond.getTargetRef().get()).size();
x.sizeExpected = (x.sizeUB - x.sizeLB) / 2;
return x;
}
public HGQuery<?> getQuery(final HyperGraph hg, HGQueryCondition c)
{
final PositionedIncidentCondition pic = (PositionedIncidentCondition) c;
HGQuery<HGHandle> qry = new HGQuery<HGHandle>()
{
public HGSearchResult<HGHandle> execute()
{
return hg.getIncidenceSet(pic.getTargetRef().get()).getSearchResult();
}
};
return new PredicateBasedRAFilter(hg, qry, pic);
}
}