protected override IConfigurable PrepareDataObject()
 {
     TaskLogger.LogEnter();
     this.DataObject = (TDataObject)((object)base.PrepareDataObject());
     if (!base.HasErrors)
     {
         ADObjectId    descendantId = base.CurrentOrgContainerId.GetDescendantId(ADProvisioningPolicy.RdnContainer);
         TDataObject[] array        = this.ConfigurationSession.Find <TDataObject>(descendantId, QueryScope.SubTree, null, null, 2);
         if (array != null && array.Length != 0)
         {
             if (1 == array.Length)
             {
                 Exception     exception  = new InvalidOperationException(Strings.ErrorOnlyOneProvisioningPolicyAllowed(array[0].Identity.ToString()));
                 ErrorCategory category   = ErrorCategory.InvalidOperation;
                 TDataObject   dataObject = this.DataObject;
                 base.WriteError(exception, category, dataObject.Name);
             }
             else
             {
                 Exception     exception2  = new InvalidOperationException(Strings.ErrorMultipleProvisioningPolicyExist);
                 ErrorCategory category2   = ErrorCategory.InvalidOperation;
                 TDataObject   dataObject2 = this.DataObject;
                 base.WriteError(exception2, category2, dataObject2.Name);
             }
         }
         TDataObject dataObject3   = this.DataObject;
         ADObjectId  descendantId2 = base.CurrentOrgContainerId.GetDescendantId(this.ContainerRdn);
         TDataObject dataObject4   = this.DataObject;
         dataObject3.SetId(descendantId2.GetChildId(dataObject4.Name));
         TDataObject dataObject5 = this.DataObject;
         if (dataObject5.Scopes.Count != 0)
         {
             TDataObject dataObject6 = this.DataObject;
             dataObject6.Scopes.Clear();
         }
         TDataObject dataObject7 = this.DataObject;
         dataObject7.Scopes.Add(base.CurrentOrgContainerId);
         TDataObject dataObject8 = this.DataObject;
         if (dataObject8.TargetObjects.Count != 0)
         {
             TDataObject dataObject9 = this.DataObject;
             dataObject9.TargetObjects.Clear();
         }
         TDataObject dataObject10 = this.DataObject;
         foreach (Type poType in dataObject10.SupportedPresentationObjectTypes)
         {
             TDataObject dataObject11 = this.DataObject;
             dataObject11.TargetObjects.Add(ProvisioningHelper.GetProvisioningObjectTag(poType));
         }
     }
     TaskLogger.LogExit();
     return(this.DataObject);
 }