Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
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;
        }