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); }
private void RegisterItemModification(ReuseSensitivityCollector sensitivityCollector, SqlDraftAndLatestItem item) { if (IsSubArtifactChange(item)) { sensitivityCollector.RegisterArtifactModification(item.ArtifactId, ItemTypeReuseTemplateSetting.Subartifacts); } }
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); }
public void Initialize() { _sensitivityCollector = new ReuseSensitivityCollector(); _reuseRepository = new Mock <IReuseRepository>(); _sensitivityCommonHelper = new SensitivityCommonHelper(); }