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>())); }
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(); } }
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); }
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(); } }
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)); } }
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); } }