/// <summary> /// Generates concrete items type to collect from object type. /// </summary> public virtual IEnumerable <ItemType> GetItemsToCollect(Definitions.ObjectType objectType, VariablesEvaluated variables) { var itemsToCollect = new List <ItemType>(); var variableEvaluator = new RegKeyEffectiveRightsVariableEvaluator(objectType, variables); var hiveValue = variableEvaluator.AllObjectEntities[HiveEntityValue].Value; var processedKeys = variableEvaluator.TryToProcessObjectEntity(KeyEntityName); if (processedKeys != null) { processedKeys = this.OperationEvaluator.ProcessOperationForKeyEntity(objectType, processedKeys.ToArray()); } if (processedKeys == null) { return new ItemType[] { } } ; var processedTrustees = variableEvaluator.TryToProcessObjectEntity(TrusteeSIDEntityName); var trusteeSidEntity = variableEvaluator.AllObjectEntities[TrusteeSIDEntityName]; if (processedTrustees == null) { return new ItemType[] { } } ; foreach (var regKey in processedKeys) { foreach (var sid in processedTrustees) { if (trusteeSidEntity.operation.Equals(OperationEnumeration.equals)) { var newItemToCollect = this.createRegKeyEffectiveRights(hiveValue, regKey, sid); newItemToCollect.status = StatusEnumeration.notcollected; itemsToCollect.Add(newItemToCollect); } else { var alreadyCollectedItems = ObjectCollector.CollectItemsApplyingOperation(hiveValue, regKey, sid, trusteeSidEntity.operation); itemsToCollect.AddRange(alreadyCollectedItems); } } } return(itemsToCollect); }