Пример #1
0
        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);
        }
Пример #2
0
        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);
        }