private ILazyChildren ReturnEmptyChildren(Type parentType, string propertyName)
        {
            var dataAccessor  = _dataAccessorProvider.Get(parentType);
            var childProperty = dataAccessor.ChildProperties.TryGetWithValue(p => p.Name, propertyName);

            return(LazyChildrenHelper.Create(childProperty, (o, r) => Enumerable.Empty <IModelObject>()));
        }
Exemplo n.º 2
0
 void RemoveNode(IMetadataObject left, IList<MetadataTreeEntryChanges> changed, Stack<string> stack)
 {
     var path = stack.ToDataPath();
     changed.Add(new MetadataTreeEntryChanges(path, ChangeKind.Deleted, old: left));
     var dataAccessor = _modelDataProvider.Get(left.GetType());
     foreach (var childProperty in dataAccessor.ChildProperties)
     {
         stack.Push(childProperty.Name);
         foreach (var child in left.Children)
         {
             stack.Push(child.Id.ToString());
             RemoveNode(child, changed, stack);
             stack.Pop();
         }
         stack.Pop();
     }
 }
Exemplo n.º 3
0
        private void ValidateImpl(ValidationContext context, List <ValidationFailure> result)
        {
            var dataProvider = _modelDataAccessorProvider.Get(context.Instance.GetType());

            ValidatePropertyValues(context, dataProvider, result);
            GetCustomValidationResult(context, result);

            ValidateChildren(context, dataProvider, result);
        }
Exemplo n.º 4
0
        private void AddNodeRecursively(IModelObject node, IList <ObjectRepositoryEntryChanges> changed, Stack <string> stack, Func <string, IModelObject, ObjectRepositoryEntryChanges> changeFactory)
        {
            var path = stack.ToDataPath();

            changed.Add(changeFactory(path, node));
            var dataAccessor = _modelDataProvider.Get(node.GetType());

            foreach (var childProperty in dataAccessor.ChildProperties)
            {
                stack.Push(childProperty.Name);
                foreach (var child in node.Children)
                {
                    stack.Push(child.Id.ToString());
                    AddNodeRecursively(child, changed, stack, changeFactory);
                    stack.Pop();
                }
                stack.Pop();
            }
        }
Exemplo n.º 5
0
        IMetadataObject LoadEntry(ObjectId commitId, TreeEntry entry, string path)
        {
            ILazyChildren ResolveChildren(Type type, string propertyName)
            {
                var dataAccessor  = _dataAccessorProvider.Get(type);
                var childProperty = dataAccessor.ChildProperties.FirstOrDefault(
                    p => p.Name.Equals(propertyName, StringComparison.OrdinalIgnoreCase));

                if (childProperty == null)
                {
                    throw new NotSupportedException($"Unable to find property details for '{propertyName}'.");
                }
                return(LoadEntryChildren(commitId, path, childProperty));
            }

            var serializer = GetJsonSerializer(ResolveChildren);
            var blob       = (Blob)entry.Target;
            var jobject    = blob.GetContentStream().ToJson <JObject>(serializer);
            var objectType = Type.GetType(jobject.Value <string>("$type"));

            return((IMetadataObject)jobject.ToObject(objectType, serializer));
        }
        private IModelObject LoadEntry(IObjectRepositoryContainer container, ObjectId commitId, TreeEntry entry, string path, Func <string, string> relativeFileDataResolver)
        {
            var context    = new ModelObjectSerializationContext(container, ResolveChildren);
            var serializer = _repositorySerializerFactory(context);
            var blob       = (Blob)entry.Target;

            return(serializer.Deserialize(blob.GetContentStream(), relativeFileDataResolver));

            ILazyChildren ResolveChildren(Type type, string propertyName)
            {
                var dataAccessor  = _dataAccessorProvider.Get(type);
                var childProperty = dataAccessor.ChildProperties.TryGetWithValue(p => p.Name, propertyName);

                if (childProperty == null)
                {
                    throw new GitObjectDbException($"Unable to find property details for '{propertyName}'.");
                }
                return(LoadEntryChildren(container, commitId, path, childProperty));
            }
        }
Exemplo n.º 7
0
        void AddModifiedChunks(PatchEntryChanges branchChange, JObject mergeBaseObject, JObject newObject, JObject headObject, PatchEntryChanges headChange)
        {
            if (headChange?.Status == ChangeKind.Deleted)
            {
                throw new NotImplementedException($"Conflict as a modified node {branchChange.Path} in merge branch source has been deleted in head.");
            }
            var type       = Type.GetType(mergeBaseObject.Value <string>("$type"));
            var properties = _modelDataProvider.Get(type).ModifiableProperties;

            var changes = from kvp in (IEnumerable <KeyValuePair <string, JToken> >) newObject
                          let p = properties.FirstOrDefault(pr => pr.Name.Equals(kvp.Key, StringComparison.OrdinalIgnoreCase))
                                  where p != null
                                  let mergeBaseValue = mergeBaseObject[kvp.Key]
                                                       where mergeBaseValue == null || !JToken.DeepEquals(kvp.Value, mergeBaseValue)
                                                       let headValue = TryGetToken(headObject, kvp)
                                                                       select new MetadataTreeMergeChunkChange(branchChange.Path, mergeBaseObject, newObject, headObject, p, mergeBaseValue, kvp.Value, headValue);

            foreach (var modifiedProperty in changes)
            {
                ModifiedChunks.Add(modifiedProperty);
            }
        }