public void SavePackageConfiguration(PluginPackageConfigurationEntity packageConfiguration)
        {
            if (!PackageConfigurationRepository.Entities
                .Any(x => x.PackageId == packageConfiguration.PackageId))
            {
                PackageConfigurationRepository.Insert(new PackageConfiguration
                {
                    PackageId = packageConfiguration.PackageId
                });
            }

            var configuration = PackageConfigurationRepository
                .GetSatisfiedBy(x => x.PackageId == packageConfiguration.PackageId);

            PackageConfigurationRepository.Update(configuration);

            if (packageConfiguration.Repositories.IsNullOrEmpty())
                return;

            var repositories = Repository
                .GetAllSatisfiedBy(x => x.PackageConfigurationId == configuration.PackageConfigurationId)
                .ToArray();

            UpdateCollectionHelper.UpdateCollection(repositories, packageConfiguration.Repositories,
                Repository, Mapper,
                (d, b) => d.ExternalId == b.ExternalId,
                d => d.PackageConfigurationId = configuration.PackageConfigurationId);
        }
        public void SavePackageConfiguration(PluginPackageConfigurationEntity packageConfiguration)
        {
            if (!PackageConfigurationRepository.Entities
                .Any(x => x.PackageId == packageConfiguration.PackageId))
            {
                PackageConfigurationRepository.Insert(new PackageConfiguration
                {
                    PackageId = packageConfiguration.PackageId
                });
            }

            var configuration = PackageConfigurationRepository
                .GetSatisfiedBy(x => x.PackageId == packageConfiguration.PackageId);
            PackageConfigurationRepository.Update(configuration);
        }
        public void SavePackageConfiguration(PluginPackageConfigurationEntity packageConfiguration)
        {
            if (!PackageConfigurationRepository.Entities
                .Any(x => x.PackageId == packageConfiguration.PackageId))
            {
                PackageConfigurationRepository.Insert(new PackageConfiguration
                {
                    PackageId = packageConfiguration.PackageId
                });
            }

            var configuration = PackageConfigurationRepository
                .GetSatisfiedBy(x => x.PackageId == packageConfiguration.PackageId);
            configuration.Label = packageConfiguration.Label;
            configuration.UpdateTicketMode = packageConfiguration.UpdateTicketMode;
            PackageConfigurationRepository.Update(configuration);

            var filters = PackageJqlFilterRepository
                    .GetAllSatisfiedBy(x => x.PackageConfigurationId == configuration.PackageConfigurationId)
                    .ToArray();
            var defectFilters = PackageDefectJqlFilterRepository
                    .GetAllSatisfiedBy(x => x.PackageConfigurationId == configuration.PackageConfigurationId)
                    .ToArray();

            var toUpdateFilters = filters.
                Where(x => packageConfiguration.JqlFilter.Any(f => x.Name == f.Name)).ToList();
            var toRemoveFilters = filters.
                Where(x => packageConfiguration.JqlFilter.All(f => x.Name != f.Name)).ToList();
            var toInsertFilters = packageConfiguration.JqlFilter.
                Where(x => filters.All(f => x.Name != f.Name)).ToList();

            toUpdateFilters.Each(x =>
            {
                x.Value = packageConfiguration.JqlFilter.First(f => f.Name == x.Name).Value;
                PackageJqlFilterRepository.Update(x);
            });
            toRemoveFilters.Each(PackageJqlFilterRepository.Delete);
            toInsertFilters.Each(x =>
            {
                var filter = Mapper.Map<NameValuePair, PackageJqlFilter>(
                        packageConfiguration.JqlFilter.First(f => f.Name == x.Name));
                filter.PackageConfigurationId = configuration.PackageConfigurationId;
                PackageJqlFilterRepository.Insert(filter);
            });

            var toUpdateDefectFilters = defectFilters.
                Where(x => packageConfiguration.DefectFilter.Any(f => x.Name == f.Name)).ToList();
            var toRemoveDefectFilters = defectFilters.
                Where(x => packageConfiguration.DefectFilter.All(f => x.Name != f.Name)).ToList();
            var toInsertDefectFilters = packageConfiguration.DefectFilter.
                Where(x => defectFilters.All(f => x.Name != f.Name)).ToList();

            toUpdateDefectFilters.Each(x =>
            {
                x.Value = packageConfiguration.DefectFilter.First(f => f.Name == x.Name).Value;
                PackageDefectJqlFilterRepository.Update(x);
            });
            toRemoveDefectFilters.Each(PackageDefectJqlFilterRepository.Delete);
            toInsertDefectFilters.Each(x =>
            {
                var filter = Mapper.Map<NameValuePair, PackageDefectJqlFilter>(
                    packageConfiguration.DefectFilter.First(f => f.Name == x.Name));
                filter.PackageConfigurationId = configuration.PackageConfigurationId;
                PackageDefectJqlFilterRepository.Insert(filter);
            });
        }
        public void SavePackageConfiguration(PluginPackageConfigurationEntity packageConfiguration)
        {
            if (!packageConfiguration.GoPipelines.IsNullOrEmpty())
            {
                var duplicatedId = packageConfiguration.GoPipelines
                    .GroupBy(x => x.ExternalId)
                    .FirstOrDefault(x => x.Count() > 1);
                if (duplicatedId != null)
                    throw new GoPipelineDuplicatedException(duplicatedId.Key);
                var duplicatedName = packageConfiguration.GoPipelines
                    .GroupBy(x => x.Name)
                    .FirstOrDefault(x => x.Count() > 1);
                if (duplicatedName != null)
                    throw new GoPipelineDuplicatedException(duplicatedName.Key);
            }
            if (!PackageConfigurationRepository.Entities
                .Any(x => x.PackageId == packageConfiguration.PackageId))
            {
                PackageConfigurationRepository.Insert(new PackageConfiguration
                {
                    PackageId = packageConfiguration.PackageId
                });
            }

            var configuration = PackageConfigurationRepository
                .GetSatisfiedBy(x => x.PackageId == packageConfiguration.PackageId);
            configuration.AllowGettingDeployTime
                = packageConfiguration.AllowGettingDeployTime == GettingDeployTimeMode.Allow;

            if (!string.IsNullOrEmpty(packageConfiguration.GoServer))
            {
                var goServer = GoServerConfigurationRepository
                    .GetSatisfiedBy(x => x.Name == packageConfiguration.GoServer);
                if (goServer == null)
                    throw new GoServerNotFoundException(packageConfiguration.GoServer);
                configuration.GoServerConfigurationId = goServer.GoServerConfigurationId;
            }
            else
                configuration.GoServerConfigurationId = null;

            PackageConfigurationRepository.Update(configuration);

            var pipelines = PackageGoPipelineConfigurationRepository
                    .GetAllSatisfiedBy(x => x.PackageConfigurationId == configuration.PackageConfigurationId)
                    .ToArray();

            UpdateCollectionHelper.UpdateCollection(pipelines, packageConfiguration.GoPipelines,
                PackageGoPipelineConfigurationRepository, Mapper,
                (d, b) => d.ExternalId == b.ExternalId,
                d => d.PackageConfigurationId = configuration.PackageConfigurationId);
        }