public QueryResponse GetPage(int startingObjectIndex)
{
SortedList<Guid, object> sortedObjects = new SortedList<Guid, object>();
QueryResponse pagedQueryResponse = new QueryResponse();
pagedQueryResponse.Nodes = new Dictionary<Guid, Node>();
pagedQueryResponse.Relationships = new Dictionary<Guid, Relationship>();
pagedQueryResponse.Domain = Domain;
pagedQueryResponse.NodeContext = NodeContext;
pagedQueryResponse.StartingObjectIndex = startingObjectIndex;
//pagedQueryResponse.LastObjectIndex = startingObjectIndex + 2000;
pagedQueryResponse.FinalObjectIndex = 0;
foreach (KeyValuePair<Guid, Node> nodePair in Nodes)
{
sortedObjects.Add(nodePair.Key, nodePair.Value);
pagedQueryResponse.FinalObjectIndex++;
/// Adding up all the metadata.
//pagedQueryResponse.FinalObjectIndex += nodePair.Value.Metadata.Count;
}
foreach (KeyValuePair<Guid, Relationship> relationshipPair in Relationships)
{
sortedObjects.Add(relationshipPair.Key, relationshipPair.Value);
pagedQueryResponse.FinalObjectIndex++;
/// Adding up all the descriptors.
//pagedQueryResponse.FinalObjectIndex += relationshipPair.Value.Nodes.Count;
}
int sortedObjectIndex = pagedQueryResponse.StartingObjectIndex - 1;
int totalObjectCount = 0;
while (totalObjectCount < 3000)
{
sortedObjectIndex++;
if (sortedObjectIndex >= sortedObjects.Count)
{
break;
}
object sortedObject = sortedObjects.Values[sortedObjectIndex];
if (sortedObject is Node)
{
Node node = sortedObject as Node;
/// Add one for the node;
totalObjectCount++;
/// Add the number of metadata;
totalObjectCount += node.Metadata.Count;
pagedQueryResponse.Nodes.Add(node.NodeUid, node);
}
else if (sortedObject is Relationship)
{
Relationship relationship = sortedObject as Relationship;
/// Add one for the relationship.
totalObjectCount++;
// Add the number of descriptors.
totalObjectCount += relationship.Nodes.Count;
pagedQueryResponse.Relationships.Add(relationship.RelationshipUid, relationship);
}
}
pagedQueryResponse.LastObjectIndex = sortedObjectIndex;
pagedQueryResponse.FinalObjectIndex = sortedObjects.Count;
return pagedQueryResponse;
}
}