private static Folder GetOrCreateFolder(IXenConnection connection, String[] path, int i) { if (i < 0) { return(null); } XenRef <Folder> pathToPoint = new XenRef <Folder>(PathToPoint(path, i)); Folder folder = connection.Resolve(pathToPoint); if (folder != null) { return(folder); } Folder parent = GetOrCreateFolder(connection, path, i - 1); String name = i - 1 >= 0 ? path[i - 1] : String.Empty; Folder _folder = new Folder(parent, name); _folder.Path = (parent == null ? "" : parent.opaque_ref); _folder.opaque_ref = pathToPoint.opaque_ref; _folder.Connection = connection; if (parent != null) { parent.AddObject(_folder); } connection.Cache.AddFolder(pathToPoint, _folder); return(_folder); }
private static void UpdateFolder(IXenObject ixmo) { InvokeHelper.AssertOnEventThread(); IXenConnection connection = ixmo.Connection; XenRef <Folder> oldPath = new XenRef <Folder>(ixmo.Path); Folder oldFolder = connection.Resolve(oldPath); String newPath = GetPathFromOtherConfig(ixmo); if (oldPath.opaque_ref.Equals(newPath) && (newPath.Trim().Length == 0 || oldFolder != null)) { return; } Folder newFolder = GetOrCreateFolder(connection, newPath); if (newFolder != null) { newFolder.AddObject(ixmo); } if (oldFolder != null) { oldFolder.RemoveObject(ixmo); PotentiallyRemoveFolder(oldFolder); } ixmo.Path = newPath; }