예제 #1
0
        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;
        }
예제 #2
0
        private static void PurgeEmptyFolders(String[] emptyFolders, Folder folder)
        {
            List <Folder> toRemove = new List <Folder>();

            foreach (IXenObject ixmo in folder.XenObjects)
            {
                Folder subFolder = ixmo as Folder;
                if (subFolder == null)
                {
                    continue;
                }

                PurgeEmptyFolders(emptyFolders, subFolder);

                if (subFolder.XenObjectsCount <= 0 &&
                    Array.BinarySearch <String>(emptyFolders, subFolder.opaque_ref) < 0)
                {
                    toRemove.Add(subFolder);
                    continue;
                }
            }

            foreach (Folder subFolder in toRemove)
            {
                folder.RemoveObject(subFolder);
                folder.Connection.Cache.RemoveFolder(new XenRef <Folder>(subFolder.opaque_ref));
            }
        }
예제 #3
0
        private static void RemoveObject(IXenObject ixmo)
        {
            InvokeHelper.AssertOnEventThread();

            XenRef <Folder> path   = new XenRef <Folder>(ixmo.Path);
            Folder          folder = ixmo.Connection.Resolve(path);

            if (folder != null)
            {
                folder.RemoveObject(ixmo);
                PotentiallyRemoveFolder(folder);
            }
        }