// ToDo:
        public static OM2MAccessControlPolicy ToResource(this OM2MAccessControlPolicyEntity entity,
                                                         OM2MResultContent resultContent)
        {
            var resource = new OM2MAccessControlPolicy();

            CopyAttributesResource(entity, resource);

            if (resultContent.HasAttributes())
            {
            }

            return(resource);
        }
        public override OM2MResponsePrimitive DoUpdate(OM2MRequestPrimitive request)
        {
            using (var db = CreateDbContext())
            {
                var query = db.Resources.OfType <OM2MAccessControlPolicyEntity>()
                            .Where(x => x.ResourceId == request.TargetId)
                            .Include(x => x.Privileges)
                            .Include(x => x.SelfPrivileges);

                if (query.Count() == 0)
                {
                    throw new OM2MNotFoundException("Resource not found.");
                }

                var entity = query.First();

                CheckSelfACP(entity, request.From, OM2MOperation.Update);

                if (request.Content == null)
                {
                    throw new OM2MBadRequestException("A content is required for creation.");
                }

                var resource = request.Content as OM2MAccessControlPolicy;

                if (resource == null)
                {
                    throw new OM2MBadRequestException("Incorrect resource representation in content.");
                }

                var modifiedAttributes = new OM2MAccessControlPolicy();

                if (resource.ExpirationTime != null)
                {
                    entity.ExpirationTime             = resource.ExpirationTime;
                    modifiedAttributes.ExpirationTime = resource.ExpirationTime;
                }

                if (resource.Labels != null)
                {
                    entity.Labels.Clear();
                    entity.Labels.AddRange(resource.Labels);
                    modifiedAttributes.Labels = resource.Labels;
                }

                if (resource.AnnounceTo != null)
                {
                    entity.AnnounceTo.Clear();
                    entity.AnnounceTo.AddRange(resource.AnnounceTo);
                    modifiedAttributes.AnnounceTo = resource.AnnounceTo;
                }

                if (resource.AnnouncedAttribute != null)
                {
                    entity.AnnouncedAttribute.Clear();
                    entity.AnnouncedAttribute.AddRange(resource.AnnouncedAttribute);
                    modifiedAttributes.AnnouncedAttribute = resource.AnnouncedAttribute;
                }

                if (resource.Privileges != null)
                {
                    entity.Privileges.Clear();
                    foreach (var rule in resource.Privileges.AccessControlRule)
                    {
                        entity.Privileges.Add(rule.ToEntity());
                    }
                    modifiedAttributes.Privileges = resource.Privileges;
                }

                if (resource.SelfPrivileges != null)
                {
                    entity.SelfPrivileges.Clear();
                    foreach (var rule in resource.SelfPrivileges.AccessControlRule)
                    {
                        entity.SelfPrivileges.Add(rule.ToEntity());
                    }
                    modifiedAttributes.SelfPrivileges = resource.SelfPrivileges;
                }

                entity.LastModifiedTime             = OM2MTimeStamp.NowTimeStamp;
                modifiedAttributes.LastModifiedTime = entity.LastModifiedTime;

                db.SaveChanges();

                var subs = db.Resources.OfType <OM2MSubscriptionEntity>().Where(x => x.ParentId == entity.ResourceId).ToList();
                CseService.Notify(subs, entity, OM2MResourceStatus.Updated);

                var response = new OM2MResponsePrimitive(CseConfig, request);

                response.Content            = modifiedAttributes;
                response.ResponseStatusCode = OM2MResponseStatusCode.Updated;

                return(response);
            }
        }