private HashSet <int> GetModifiedArtifacts(ICollection <int> affectedItems,
                                                   ReuseSensitivityCollector sensitivityCollector)
        {
            var modifiedArtifacts = new HashSet <int>();

            foreach (var affectedItem in affectedItems)
            {
                ReuseSensitivityCollector.ArtifactModification modifications;
                if (
                    !sensitivityCollector.ArtifactModifications.TryGetValue(affectedItem,
                                                                            out modifications))
                {
                    continue;
                }

                if (modifications.ArtifactAspects == ItemTypeReuseTemplateSetting.None &&
                    modifications.ModifiedPropertyTypes.IsEmpty())
                {
                    continue;
                }

                modifiedArtifacts.Add(affectedItem);
            }
            return(modifiedArtifacts);
        }
예제 #2
0
 private void RegisterItemModification(ReuseSensitivityCollector sensitivityCollector, SqlDraftAndLatestItem item)
 {
     if (IsSubArtifactChange(item))
     {
         sensitivityCollector.RegisterArtifactModification(item.ArtifactId,
                                                           ItemTypeReuseTemplateSetting.Subartifacts);
     }
 }
예제 #3
0
 private void RegisterPropertyModification(ReuseSensitivityCollector sensitivityCollector, SqlDraftAndLatestProperty property)
 {
     if (IsSubArtifactChange(property))
     {
         sensitivityCollector.RegisterArtifactModification(property.ArtifactId,
                                                           ItemTypeReuseTemplateSetting.Subartifacts);
     }
     else
     {
         sensitivityCollector.RegisterArtifactPropertyModification(property.ArtifactId,
                                                                   property.PropertyTypeId, property.PropertyTypePredefined);
     }
 }
        private void RegisterAttachmentModification(PublishEnvironment env, DraftAndLatestAttachment attachment)
        {
            ReuseSensitivityCollector sensitivityCollector = env.SensitivityCollector;

            var affectedTemplateSetting = IsSubArtifactChange(attachment)
                        ? ItemTypeReuseTemplateSetting.Subartifacts
                        : (env.GetArtifactBaseType(attachment.ArtifactId) == ItemTypePredefined.Document
                           // for document artifact we have only document content as an attachment
                            ? ItemTypeReuseTemplateSetting.DocumentFile
                            : ItemTypeReuseTemplateSetting.Attachments);

            sensitivityCollector.RegisterArtifactModification(attachment.ArtifactId,
                                                              affectedTemplateSetting);
        }
        public async Task <ISet <int> > FilterInsensitiveItems(ICollection <int> affectedItems,
                                                               ReuseSensitivityCollector sensitivityCollector,
                                                               IReuseRepository reuseRepository)
        {
            var modifiedArtifacts = GetModifiedArtifacts(affectedItems, sensitivityCollector);
            var result            = new HashSet <int>();

            if (modifiedArtifacts.IsEmpty())
            {
                return(result);
            }
            // TODO: we can improve the artifact type Id retrieval as the inforamtion is already loaded into memory
            var artifactId2StandardTypeId =
                await
                reuseRepository.GetStandardTypeIdsForArtifactsIdsAsync(
                    modifiedArtifacts.ToHashSet());

            var reuseTemplatesDic = await reuseRepository.GetReuseItemTypeTemplatesAsyc(
                artifactId2StandardTypeId.Values.Where(v => v?.InstanceTypeId != null).
                Select(v => v.InstanceTypeId.Value).ToHashSet());

            foreach (var itemId in modifiedArtifacts)
            {
                SqlItemTypeInfo standardTypeInfo;
                if (!artifactId2StandardTypeId.TryGetValue(itemId, out standardTypeInfo) || standardTypeInfo == null)
                {
                    continue;
                }

                ItemTypeReuseTemplate settings;
                if (reuseTemplatesDic.TryGetValue(standardTypeInfo.InstanceTypeId.GetValueOrDefault(0), out settings) && settings != null)
                {
                    var modification = sensitivityCollector.ArtifactModifications[itemId];

                    if ((modification.ArtifactAspects & (~settings.SensitivitySettings)) !=
                        ItemTypeReuseTemplateSetting.None
                        ||
                        await HasSensitiveModifiedProperty(modification, settings, standardTypeInfo.ItemTypePredefined, reuseRepository))
                    {
                        result.Add(itemId);
                    }
                }
                else
                {
                    // If no template settings - everything sensitive by default
                    result.Add(itemId);
                }
            }
            return(result);
        }
예제 #6
0
 public void Initialize()
 {
     _sensitivityCollector    = new ReuseSensitivityCollector();
     _reuseRepository         = new Mock <IReuseRepository>();
     _sensitivityCommonHelper = new SensitivityCommonHelper();
 }