CmisSync.Lib.Storage.Database.MetaDataStorage.GetObjectByLocalPath C# (CSharp) Method

GetObjectByLocalPath() public method

Gets the object by passing the local path.
public GetObjectByLocalPath ( IFileSystemInfo path ) : IMappedObject
path IFileSystemInfo /// Local path from the saved object ///
return IMappedObject
        public IMappedObject GetObjectByLocalPath(IFileSystemInfo path) {
            if (path == null) {
                throw new ArgumentNullException("path");
            }

            if (!this.matcher.CanCreateRemotePath(path.FullName)) {
                throw new ArgumentException(string.Format("Given path \"{0}\" is not able to be matched on remote path", path.FullName), "path");
            }

            using (var tran = this.engine.GetTransaction()) {
                string relativePath = this.matcher.GetRelativeLocalPath(path.FullName);
                List<string> pathSegments = new List<string>(relativePath.Split(Path.DirectorySeparatorChar));
                List<MappedObject> objects = new List<MappedObject>();
                foreach (var row in tran.SelectForward<string, DbCustomSerializer<MappedObject>>(MappedObjectsTable)) {
                    var value = row.Value;
                    if (value == null) {
                        continue;
                    }

                    var data = value.Get;
                    if (data == null) {
                        continue;
                    }

                    objects.Add(data);
                }

                MappedObject root = objects.Find(o => o.ParentId == null);
                if (root == null) {
                    return null;
                }

                if (root.Name != "/") {
                    if (root.Name == pathSegments[0]) {
                        pathSegments.RemoveAt(0);
                    } else {
                        return null;
                    }
                }

                MappedObject parent = root;
                foreach (var name in pathSegments) {
                    if (name.Equals(".")) {
                        continue;
                    }

                    MappedObject child = objects.Find(o => o.ParentId == parent.RemoteObjectId && o.Name == name);
                    if (child != null) {
                        parent = child;
                    } else {
                        return null;
                    }
                }

                return new MappedObject(parent);
            }
        }

Usage Example

Exemplo n.º 1
0
        public void FindRootFolder([Values(true, false)]bool withValidation) {
            string id = "id";
            string path = Path.GetTempPath();
            var fsInfo = new DirectoryInfoWrapper(new DirectoryInfo(path));
            var matcher = new PathMatcher(path, "/");
            var storage = new MetaDataStorage(this.engine, matcher, withValidation);
            var rootFolder = new MappedObject("/", id, MappedObjectType.Folder, null, "token");
            storage.SaveMappedObject(rootFolder);

            Assert.That(storage.GetObjectByRemoteId(id), Is.Not.Null, "Not findable by ID");
            Assert.That(storage.GetObjectByLocalPath(fsInfo), Is.Not.Null, "Not findable by path");
        }
All Usage Examples Of CmisSync.Lib.Storage.Database.MetaDataStorage::GetObjectByLocalPath