public void UpdateProperties(string packageName, IEnumerable <Property> properties)
        {
            var root = metadata.GetRootPackage();

            var package    = metadataPathConfig.GetPackageByPath(root, packageName);
            var repository = MetadataRepositoryFactory.Create(package);

            foreach (var property in properties)
            {
                repository.SaveProperty(property.Name, property.Type, property.Value);
            }
        }
        public void RemoveProperties(string packageName, IEnumerable <string> properties)
        {
            var root = metadata.GetRootPackage();

            var package    = metadataPathConfig.GetPackageByPath(root, packageName);
            var repository = MetadataRepositoryFactory.Create(package);

            foreach (var propertyName in properties)
            {
                repository.RemoveProperty(propertyName);
            }
        }
        public IEnumerable <Package> GetPackages()
        {
            var root     = metadata.GetRootPackage();
            var packages = new List <Package>();

            foreach (var branchProperty in root)
            {
                if (branchProperty.Value != null && branchProperty.Value.Type == MetadataPropertyType.Metadata)
                {
                    var branchPackage = branchProperty.Value.ToClass <MetadataPackage>();

                    foreach (var nestedPackageInfo in metadataPathConfig.GetRegisteredPackages(branchPackage))
                    {
                        var repository  = MetadataRepositoryFactory.Create(nestedPackageInfo.Package);
                        var properties  = new List <Property>();
                        var descriptors = new List <Model.PropertyDescriptor>();

                        foreach (var property in repository.GetProperties().OrderBy(p => p.Name, StringComparer.OrdinalIgnoreCase))
                        {
                            properties.Add(property);
                        }

                        foreach (var descriptor in repository.GetDescriptors().OrderBy(p => p.Name, StringComparer.OrdinalIgnoreCase))
                        {
                            descriptors.Add(descriptor);
                        }

                        if (properties.Count > 0 || descriptors.Any(descriptor => (descriptor.AccessLevel & AccessLevels.Add) != 0))
                        {
                            packages.Add(
                                new Package(metadataPathConfig.CombinePath(branchProperty.Name, nestedPackageInfo.Path),
                                            nestedPackageInfo.Package.GetType().Name,
                                            nestedPackageInfo.Index,
                                            (PackageType)nestedPackageInfo.Package.MetadataType,
                                            properties,
                                            descriptors));
                        }
                    }
                }
            }

            return(packages);
        }