private void Initialize()
{
List<Device> devices;
var sorted = new List<Device>();
if (RepositoryInstance.ContentQueryIsAllowed)
{
var result = ContentQuery.Query("+InTree:/Root/System/Devices +TypeIs:Device .AUTOFILTERS:OFF");
devices = result.Nodes.Cast<Device>().ToList();
}
else
{
//query devices and sort them by Index
devices = NodeQuery.QueryNodesByTypeAndPath(ActiveSchema.NodeTypes["Device"], false, "/Root/System/Devices", false).Nodes.Cast<Device>().ToList();
}
devices.Sort(new NodeComparer<Node>());
//TODO: Device is renamed to lowercase but only in memory. Mustn't save it.
foreach (var device in devices)
device.Name = device.Name.ToLower();
var removes = new List<Device>();
foreach (var parent in devices)
{
foreach (var child in devices)
{
if (child.ParentId == parent.Id)
{
child.Fallback = parent;
removes.Add(parent);
}
}
}
removes.Sort();
for (int i = removes.Count - 1; i >= 0; i--)
devices.Remove(removes[i]);
foreach (var device in devices)
{
var d = device;
while (d != null)
{
sorted.Add(d);
d = d.Fallback;
}
}
_devices = sorted.ToArray();
}