private List<AeBrowseElement> Browse(Session session, AeBrowseElement start, string pattern, bool isArea)
{
// check cache.
List<AeBrowseElement> targets = (isArea)?start.Areas:start.Sources;
if (targets == null)
{
// fetch from server.
targets = Browse(session, start, isArea);
// update cache.
if (isArea)
{
start.Areas = targets;
}
else
{
start.Sources = targets;
}
}
// check if all matched.
if (String.IsNullOrEmpty(pattern) || pattern == "*")
{
return targets;
}
// apply filter.
List<AeBrowseElement> hits = new List<AeBrowseElement>();
for (int ii = 0; ii < targets.Count; ii++)
{
if (ComUtils.Match(targets[ii].BrowseText, pattern, false))
{
hits.Add(targets[ii]);
}
}
return hits;
}