AppendRepliesToAndMentionsEdgeXmlNodes
(
GraphMLXmlDocument graphMLXmlDocument,
TwitterStatusTextParser twitterStatusTextParser,
HashSet<String> uniqueScreenNames,
Boolean includeRepliesToEdges,
Boolean includeMentionsEdges,
Boolean includeNonRepliesToNonMentionsEdges,
String screenName,
TwitterStatus twitterStatus,
Boolean includeStatus
)
{
Debug.Assert(graphMLXmlDocument != null);
Debug.Assert(twitterStatusTextParser != null);
Debug.Assert(uniqueScreenNames != null);
Debug.Assert( !String.IsNullOrEmpty(screenName) );
Debug.Assert(twitterStatus != null);
String statusText = twitterStatus.Text;
Boolean isReplyTo = false;
Boolean isMentions = false;
Debug.Assert( !String.IsNullOrEmpty(statusText) );
String repliedToScreenName;
String [] uniqueMentionedScreenNames;
twitterStatusTextParser.GetScreenNames(statusText,
out repliedToScreenName, out uniqueMentionedScreenNames);
if (repliedToScreenName != null)
{
if (
repliedToScreenName != screenName
&&
uniqueScreenNames.Contains(repliedToScreenName)
)
{
isReplyTo = true;
if (includeRepliesToEdges)
{
AppendRepliesToAndMentionsEdgeXmlNode(
graphMLXmlDocument, screenName, repliedToScreenName,
RepliesToRelationship, twitterStatus, includeStatus);
}
}
}
foreach (String mentionedScreenName in uniqueMentionedScreenNames)
{
if (
mentionedScreenName != screenName
&&
uniqueScreenNames.Contains(mentionedScreenName)
)
{
isMentions = true;
if (includeMentionsEdges)
{
AppendRepliesToAndMentionsEdgeXmlNode(
graphMLXmlDocument, screenName, mentionedScreenName,
MentionsRelationship, twitterStatus, includeStatus);
}
}
}
if (includeNonRepliesToNonMentionsEdges && !isReplyTo && !isMentions)
{
// Append a self-loop edge to represent the tweet.
AppendRepliesToAndMentionsEdgeXmlNode(
graphMLXmlDocument, screenName, screenName,
NonRepliesToNonMentionsRelationship, twitterStatus,
includeStatus);
}
}