public Package GetPackage(Metadata metadata, PackageEntry entry) { var package = new Package(); var propertyPairs = GetPropertyPairs(metadata, entry); foreach (var pair in propertyPairs) { Func <Package, string> getProperty; if (!GetProperty.TryGetValue(pair.Key, out getProperty)) { throw new NotSupportedException($"The property element '{pair.Key}' is not supported."); } var existingValue = getProperty(package); if (existingValue != null) { continue; } var setProperty = SetProperty[pair.Key]; setProperty(package, pair.Value); } return(package); }
public List <KeyValuePair <string, string> > GetPropertyPairs(Metadata metadata, PackageEntry entry) { var output = new List <KeyValuePair <string, string> >(); output.AddRange(entry.PropertyPairs); var atomProperties = entry .AtomPairs .ToLookup(x => x.Key, x => x.Value); foreach (var entityProperty in metadata.PackageEntityType.Properties) { if (entityProperty.TargetPath == null) { continue; } string childPath; if (!TargetPathToChildPath.TryGetValue(entityProperty.TargetPath, out childPath)) { throw new NotSupportedException($"The target path '{entityProperty.TargetPath}' is not supported."); } foreach (var value in atomProperties[childPath]) { output.Add(new KeyValuePair <string, string>(entityProperty.Name, value)); } } return(output); }