package neo4j.dbProviders;
import java.util.LinkedList;
import java.util.List;
import misc.Pair;
import neo4j.readWriteDB.Neo4JDBInterface;
import neo4j.traversals.readWriteDB.Traversals;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import databaseNodes.EdgeTypes;
import databaseNodes.NodeKeys;
public class ReadWriteDBProvider extends DBProvider
{
@Override
public String getNodeType(Long nodeId)
{
return Traversals.getNodeType(nodeId);
}
@Override
public String getCalleeFromCall(Long nodeId)
{
return Traversals.getCalleeFromCall(nodeId);
}
@Override
public List<Pair<Long, Integer>> getASTChildren(Long nodeId)
{
List<Pair<Long, Integer>> retval = new LinkedList<Pair<Long, Integer>>();
Node node = Neo4JDBInterface.getNodeById(nodeId);
Iterable<Relationship> rels = node.getRelationships();
for (Relationship rel : rels)
{
Node endNode = rel.getEndNode();
int childNumber;
if (endNode.getId() == node.getId())
continue;
if (!rel.getType().name().equals(EdgeTypes.IS_AST_PARENT))
continue;
long childId = endNode.getId();
String childNum = null;
try
{
childNum = (String) endNode.getProperty(NodeKeys.CHILD_NUMBER);
}
catch (RuntimeException ex)
{
}
if (childNum == null)
childNumber = 0;
else
childNumber = Integer.parseInt(childNum);
retval.add(new Pair<Long, Integer>(childId, childNumber));
}
return retval;
}
@Override
public String getNodeCode(long nodeId)
{
return Traversals.getNodeCode(nodeId);
}
@Override
public String getOperatorCode(long nodeId)
{
return Traversals.getOperatorCode(nodeId);
}
@Override
public int getChildNumber(long nodeId)
{
return Traversals.getNodeChildNum(nodeId);
}
}