protected override void InternalValidate() { TaskLogger.LogEnter(); if (base.OptionalIdentityData != null) { base.OptionalIdentityData.ConfigurationContainerRdn = ClassificationDefinitionConstants.ClassificationDefinitionsRdn; } base.InternalValidate(); string name = ((DataClassificationObjectId)this.implementation.DataClassificationPresentationObject.Identity).Name; ILookup <string, Rule> dataClassificationsInUse = DlpUtils.GetDataClassificationsInUse(base.DataSession, new string[] { name }, ClassificationDefinitionConstants.RuleIdComparer); if (dataClassificationsInUse.Contains(name)) { List <string> list = (from transportRule in dataClassificationsInUse[name] select transportRule.Name).ToList <string>(); if (list.Count > 0) { base.WriteError(new DataClassificationInUseException(this.implementation.DataClassificationPresentationObject.Name, string.Join(Strings.ClassificationRuleCollectionOffendingListSeparator, list)), ErrorCategory.InvalidOperation, null); } } TaskLogger.LogExit(); }
internal static IList <string> GetDeletedRulesInUse(IConfigDataProvider dataSession, TransportRule existingRulePackObject, ISet <string> referencingRules = null, XDocument updatedRulePackXDoc = null) { ExAssert.RetailAssert(dataSession != null && existingRulePackObject != null, "The data session and rule package object to be updated / deleted must be specified in order to check if any deleted rules are in-use by ETR."); HashSet <string> hashSet; try { XDocument ruleCollectionDocumentFromTransportRule = ClassificationDefinitionUtils.GetRuleCollectionDocumentFromTransportRule(existingRulePackObject); hashSet = new HashSet <string>(XmlProcessingUtils.GetAllRuleIds(ruleCollectionDocumentFromTransportRule), ClassificationDefinitionConstants.RuleIdComparer); } catch (ArgumentException) { ((ClassificationDefinitionsDiagnosticsReporter)ClassificationDefinitionsDiagnosticsReporter.Instance).Tracer.TraceWarning <string>(0L, "Deleting classification rule collection '{0}' with null compressed data.", existingRulePackObject.DistinguishedName); return(Enumerable.Empty <string>().ToList <string>()); } catch (AggregateException ex) { ((ClassificationDefinitionsDiagnosticsReporter)ClassificationDefinitionsDiagnosticsReporter.Instance).Tracer.TraceWarning <string, string>(0L, "Deleting classification rule collection '{0}' with invalid compressed data or invalid decompressed data. Details: {1}", existingRulePackObject.DistinguishedName, ex.Flatten().ToString()); return(Enumerable.Empty <string>().ToList <string>()); } catch (XmlException ex2) { ((ClassificationDefinitionsDiagnosticsReporter)ClassificationDefinitionsDiagnosticsReporter.Instance).Tracer.TraceWarning <string, string>(0L, "Deleting classification rule collection '{0}' with invalid XML contents. Details: {1}", existingRulePackObject.DistinguishedName, new AggregateException(new Exception[] { ex2 }).Flatten().ToString()); return(Enumerable.Empty <string>().ToList <string>()); } if (updatedRulePackXDoc != null) { foreach (string item in XmlProcessingUtils.GetAllRuleIds(updatedRulePackXDoc)) { hashSet.Remove(item); } } return(ClassificationRuleCollectionValidationUtils.ProcessClassificationReferences(DlpUtils.GetDataClassificationsInUse(dataSession, hashSet, ClassificationDefinitionConstants.RuleIdComparer), referencingRules)); }