コード例 #1
0
        /// <summary>
        /// Constructs a create request based on the provided object.
        /// </summary>
        /// <param name="newResource">The RmResource object for which to construct a create request.</param>
        /// <returns></returns>
        public virtual CreateRequest CreateCreateRequest(RmResource newResource)
        {
            if (newResource == null)
            {
                throw new ArgumentNullException("newResource");
            }
            lock (newResource)
            {
                CreateRequest createRequest = new CreateRequest();

                createRequest.AddRequest = new AddRequest();
                createRequest.AddRequest.AttributeTypeAndValues = new List <DirectoryAccessChange>();
                foreach (KeyValuePair <RmAttributeName, RmAttributeValue> attribute in newResource.Attributes)
                {
                    if (this.ProhibitedAttributes.ContainsKey(attribute.Key.Name))
                    {
                        continue;
                    }

                    foreach (IComparable value in attribute.Value.Values)
                    {
                        DirectoryAccessChange createReqChange = BuildDirectoryAccessChange(attribute.Key, value);
                        // cannot specify the operation on create
                        createReqChange.Operation = null;
                        createRequest.AddRequest.AttributeTypeAndValues.Add(createReqChange);
                    }
                }
                return(createRequest);
            }
        }
コード例 #2
0
        private DirectoryAccessChange BuildDirectoryAccessChange(RmAttributeName name, IComparable value)
        {
            DirectoryAccessChange retReqChange = new DirectoryAccessChange();

            retReqChange.AttributeType = name.Name;
            XmlElement attributeValueElem = base.RmDoc.CreateElement(retReqChange.AttributeType, RmNamespace);

            attributeValueElem.InnerText = value.ToString();
            retReqChange.AttributeValue.Values.Add(attributeValueElem);
            return(retReqChange);
        }
コード例 #3
0
        DirectoryAccessChange BuildDirectoryAccessChange(RmAttributeChange attribute)
        {
            DirectoryAccessChange retReqChange = new DirectoryAccessChange();

            retReqChange.AttributeType = attribute.Name.Name;
            XmlElement attributeValueElem = base.RmDoc.CreateElement(retReqChange.AttributeType, RmNamespace);

            if (attribute.Value != null)
            {
                attributeValueElem.InnerText = attribute.Value.ToString();
            }
            retReqChange.AttributeValue.Values.Add(attributeValueElem);
            return(retReqChange);
        }
コード例 #4
0
        DirectoryAccessChange BuildDirectoryAccessChange(RmAttributeName name, IComparable value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("name", string.Format("Attribute '{0}' is null.", name));
            }
            DirectoryAccessChange retReqChange = new DirectoryAccessChange();

            retReqChange.AttributeType = name.Name;
            XmlElement attributeValueElem = base.RmDoc.CreateElement(retReqChange.AttributeType, RmNamespace);

            attributeValueElem.InnerText = value.ToString();
            retReqChange.AttributeValue.Values.Add(attributeValueElem);
            return(retReqChange);
        }
コード例 #5
0
        public Message CreateCreateRequest(RmGeneric newResource)
        {
            if (newResource == null)
            {
                throw new ArgumentNullException("newResource");
            }

            lock (newResource)
            {
                CreateRequest createRequest = new CreateRequest();

                createRequest.AddRequest = new AddRequest();
                createRequest.AddRequest.AttributeTypeAndValues = new List <DirectoryAccessChange>();
                foreach (KeyValuePair <RmAttributeName, RmAttributeValue> attribute in newResource.Attributes)
                {
                    if (!string.IsNullOrEmpty(ProhibitedAttributes.Find(p => p.Equals(attribute.Key.Name, StringComparison.OrdinalIgnoreCase))))
                    {
                        continue;
                    }

                    foreach (IComparable value in attribute.Value.Values)
                    {
                        DirectoryAccessChange createReqChange = BuildDirectoryAccessChange(attribute.Key, value);
                        // cannot specify the operation on create
                        createReqChange.Operation = null;
                        createRequest.AddRequest.AttributeTypeAndValues.Add(createReqChange);
                    }
                }

                Message msgCreateRequest = null;
                lock (createRequest)
                {
                    msgCreateRequest = Message.CreateMessage(MessageVersion.Default, Constants.WsTransfer.CreateAction, createRequest.AddRequest, new ClientSerializer(typeof(AddRequest)));
                    ClientHelper.AddImdaHeaders(createRequest, msgCreateRequest);

                    return(msgCreateRequest);
                }
            }
        }
コード例 #6
0
        public Message CreatePutRequest(RmResourceChanges transaction)
        {
            if (transaction == null)
            {
                throw new ArgumentException("transaction");
            }
            RmResource rmObject = transaction.RmObject;

            if (rmObject == null)
            {
                throw new InvalidOperationException("transaction does not have rmObject");
            }

            lock (rmObject)
            {
                RequestPut putRequest = new RequestPut();
                putRequest.ResourceReferenceProperty = rmObject.ObjectID.ToString();
                if (String.IsNullOrEmpty(rmObject.Locale) == false)
                {
                    putRequest.ResourceLocaleProperty = CultureInfo.GetCultureInfo(rmObject.Locale).ToString(); //System.Globalization.CultureInfo(rmObject.Locale)
                }

                putRequest.ModifyRequest = new ModifyRequest();

                IList <RmAttributeChange> changes = transaction.GetChanges();

                foreach (RmAttributeChange attributeChange in changes)
                {
                    if (!string.IsNullOrEmpty(ProhibitedAttributes.Find(p => p.Equals(attributeChange.Name.Name, StringComparison.OrdinalIgnoreCase))))
                    {
                        continue;
                    }

                    DirectoryAccessChange putReqChange = BuildDirectoryAccessChange(attributeChange);

                    if (base.IsMultiValued(attributeChange.Name))
                    {
                        putReqChange.Operation = attributeChange.Operation.ToString();
                    }
                    else
                    {
                        if (attributeChange.Operation == RmAttributeChangeOperation.Add)
                        {
                            putReqChange.Operation = RmAttributeChangeOperation.Replace.ToString();
                        }
                        else if (attributeChange.Operation == RmAttributeChangeOperation.Delete)
                        {
                            putReqChange.Operation      = RmAttributeChangeOperation.Replace.ToString();
                            putReqChange.AttributeValue = null;
                        }
                    }
                    putRequest.ModifyRequest.Changes.Add(putReqChange);
                }

                Message msgRequest = null;
                lock (putRequest)
                {
                    msgRequest = Message.CreateMessage(MessageVersion.Default, Constants.WsTransfer.PutAction, putRequest.ModifyRequest, new ClientSerializer(typeof(ModifyRequest)));
                    ClientHelper.AddImdaHeaders(putRequest, msgRequest);
                    ClientHelper.AddRmHeaders(putRequest, msgRequest);
                }

                return(msgRequest);
            }
        }
コード例 #7
0
        /// <summary>
        /// Constructs a put request based on the changes tracked in the transaction.
        /// </summary>
        /// <param name="transaction">The transaction object which tracked the changes made to an object.</param>
        /// <returns></returns>
        public virtual PutRequest CreatePutRequest(RmResourceChanges transaction)
        {
            if (transaction == null)
            {
                throw new ArgumentNullException("transaction");
            }

            RmResource rmObject = transaction.RmObject;

            if (rmObject == null)
            {
                throw new InvalidOperationException("transaction does not have rmObject");
            }
            if (rmObject.ObjectID == null)
            {
                throw new InvalidOperationException("The rmObject does not have an ObjectID.");
            }
            lock (rmObject)
            {
                PutRequest putRequest = new PutRequest();

                putRequest.ResourceReferenceProperty = new ResourceReferenceProperty(rmObject.ObjectID.ToString());
                if (string.IsNullOrEmpty(rmObject.Locale) == false)
                {
                    putRequest.ResourceLocaleProperty = new ResourceLocaleProperty(new System.Globalization.CultureInfo(rmObject.Locale));
                }

                putRequest.ModifyRequest = new ModifyRequest();

                IList <RmAttributeChange> changes = transaction.GetChanges();

                foreach (RmAttributeChange attributeChange in changes)
                {
                    if (this.ProhibitedAttributes.ContainsKey(attributeChange.Name.Name))
                    {
                        continue;
                    }

                    DirectoryAccessChange putReqChange = BuildDirectoryAccessChange(attributeChange);

                    if (base.IsMultiValued(attributeChange.Name))
                    {
                        putReqChange.Operation = attributeChange.Operation.ToString();
                    }
                    else
                    {
                        if (attributeChange.Operation == RmAttributeChangeOperation.Add)
                        {
                            putReqChange.Operation = RmAttributeChangeOperation.Replace.ToString();
                        }
                        else if (attributeChange.Operation == RmAttributeChangeOperation.Delete)
                        {
                            putReqChange.Operation      = RmAttributeChangeOperation.Replace.ToString();
                            putReqChange.AttributeValue = null;
                        }
                        else
                        {
                            putReqChange.Operation = attributeChange.Operation.ToString();
                        }
                    }
                    putRequest.ModifyRequest.Changes.Add(putReqChange);
                }
                return(putRequest);
            }
        }