Exemplo n.º 1
0
        public void Create(ResourceObject resource)
        {
            if (resource == null)
            {
                throw new ArgumentNullException(nameof(resource));
            }

            try
            {
                using (Message message = MessageComposer.CreateCreateMessage(resource))
                {
                    using (Message responseMessage = this.Invoke((c) => c.Create(message)))
                    {
                        responseMessage.ThrowOnFault();

                        ResourceCreatedType response = responseMessage.DeserializeMessageWithPayload <ResourceCreatedType>();
                        UniqueIdentifier    id       = new UniqueIdentifier(response.EndpointReference.ReferenceProperties.ResourceReferenceProperty.Text);
                        resource.CompleteCreateOperation(id);
                    }
                }
            }
            catch (FaultException <RepresentationFailures> e)
            {
                throw InvalidRepresentationException.GetException(e.Detail);
            }
        }
Exemplo n.º 2
0
        public void Create(IEnumerable <ResourceObject> resources)
        {
            if (resources == null)
            {
                throw new ArgumentNullException(nameof(resources));
            }

            ResourceObject[] resourceArray = resources.ToArray();

            try
            {
                using (Message message = MessageComposer.CreateCreateMessage(resourceArray))
                {
                    using (Message responseMessage = this.Invoke((c) => c.Create(message)))
                    {
                        responseMessage.ThrowOnFault();

                        foreach (ResourceObject resource in resourceArray)
                        {
                            resource.CompleteCreateOperation(resource.ObjectID);
                        }
                    }
                }
            }
            catch (FaultException <RepresentationFailures> e)
            {
                throw InvalidRepresentationException.GetException(e.Detail);
            }
        }
        internal static Message CreateCreateMessage(ResourceObject[] resources)
        {
            Create op = new Create();

            op.Dialect = Namespaces.RMIdentityAttributeType;

            if (resources == null || resources.Length == 0)
            {
                throw new ArgumentNullException(nameof(resources));
            }
            else if (resources.Length == 1)
            {
                return(MessageComposer.CreateCreateMessage(resources[0]));
            }

            List <FragmentType> fragments = new List <FragmentType>();

            foreach (ResourceObject resource in resources)
            {
                foreach (PutFragmentType fragment in resource.GetPutFragements())
                {
                    fragment.TargetIdentifier = resource.ObjectID.ToString(false);
                    fragments.Add(fragment);
                }

                // Add Object ID
                PutFragmentType fragmentObjectID = new PutFragmentType(
                    AttributeNames.ObjectID,
                    ModeType.Insert,
                    AttributeNames.ObjectID,
                    null,
                    false,
                    resource.ObjectID.ToString(false));

                fragmentObjectID.TargetIdentifier = resource.ObjectID.ToString(false);
                fragments.Add(fragmentObjectID);
            }

            if (fragments.Count == 0)
            {
                return(null);
            }

            op.Fragments = fragments.ToArray();

            Message message = Message.CreateMessage(MessageVersion.Default, Namespaces.Create, new SerializerBodyWriter(op));

            message.AddHeader(Namespaces.IdMDirectoryAccess, HeaderConstants.IdentityManagementOperation, null, true);
            message.AddHeader(Namespaces.ResourceManagement, HeaderConstants.CompositeTypeOperation, null);
            message.AddHeader(HeaderConstants.ResourceReferenceProperty, resources.Select(t => t.ObjectID.ToString(false)).ToCommaSeparatedString());

            return(message);
        }