public static void CopyAttributesAE(OM2MAEEntity entity,
                                     OM2MAE resource)
 {
     resource.AppName             = entity.AppName;
     resource.AppID               = entity.AppId;
     resource.AEID                = entity.AEId;
     resource.PointOfAccess       = entity.PointOfAccess;
     resource.OntologyRef         = entity.OntologyRef;
     resource.NodeLink            = entity.NodeLink;
     resource.RequestReachability = entity.RequestReachability;
 }
        // ToDo:
        public static OM2MAE ToResource(this OM2MAEEntity entity,
                                        OM2MResultContent resultContent)
        {
            var resource = new OM2MAE();

            MapEntityToResourceCommonProcudure(entity, resource, resultContent);

            if (resultContent.HasAttributes())
            {
                resource.AppName             = entity.AppName;
                resource.AppID               = entity.AppId;
                resource.AEID                = entity.AEId;
                resource.PointOfAccess       = entity.PointOfAccess;
                resource.OntologyRef         = entity.OntologyRef;
                resource.NodeLink            = entity.NodeLink;
                resource.RequestReachability = entity.RequestReachability;
            }

            return(resource);
        }
 static void MapChildResources(OM2MAEEntity entity, OM2MAE resource)
 {
 }
Esempio n. 4
0
        public override OM2MResponsePrimitive DoUpdate(OM2MRequestPrimitive request)
        {
            using (var db = CreateDbContext())
            {
                var entity = db.Resources.Find(request.TargetId) as OM2MAEEntity;

                if (entity == null)
                {
                    throw new OM2MNotFoundException("Resource not found.");
                }

                var acpList = new List <OM2MAccessControlPolicyEntity>();
                foreach (var i in entity.AccessControlPolicyIds)
                {
                    var queryAcp = db.Resources.Where(x => x.ResourceId == i)
                                   .OfType <OM2MAccessControlPolicyEntity>()
                                   .Include(x => x.PrivilegesCore);

                    if (queryAcp.Count() == 0)
                    {
                        // Damaged
                        continue;
                    }
                    acpList.Add(queryAcp.First());
                }

                CheckACP(acpList, request.From, OM2MOperation.Update);

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

                var resource = request.Content as OM2MAE;

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

                if (resource.AppID != null)
                {
                    throw new OM2MBadRequestException("AppID is not permitted.");
                }

                if (resource.AEID != null)
                {
                    throw new OM2MBadRequestException("AE-ID is not permitted.");
                }

                if (resource.NodeLink != null)
                {
                    throw new OM2MBadRequestException("NodeLink is not permitted.");
                }

                var modifiedAttrs = new OM2MAE();

                if (resource.AccessControlPolicyIDs != null &&
                    resource.AccessControlPolicyIDs.Count > 0)
                {
                    foreach (var acp in acpList)
                    {
                        CheckSelfACP(acp, request.From, OM2MOperation.Update);
                    }

                    entity.AccessControlPolicyIds.Clear();
                    entity.AccessControlPolicyIds.AddRange(resource.AccessControlPolicyIDs);
                    modifiedAttrs.AccessControlPolicyIDs = resource.AccessControlPolicyIDs;
                }

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

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

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

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

                if (resource.AppName != null)
                {
                    entity.AppName        = resource.AppName;
                    modifiedAttrs.AppName = resource.AppName;
                }

                if (resource.PointOfAccess != null)
                {
                    entity.PointOfAccess.Clear();
                    entity.PointOfAccess.AddRange(resource.PointOfAccess);
                    modifiedAttrs.PointOfAccess = resource.PointOfAccess;
                }

                if (resource.OntologyRef != null)
                {
                    entity.OntologyRef        = resource.OntologyRef;
                    modifiedAttrs.OntologyRef = resource.OntologyRef;
                }

                if (resource.RequestReachability != null)
                {
                    entity.RequestReachability        = resource.RequestReachability.Value;
                    modifiedAttrs.RequestReachability = resource.RequestReachability;
                }

                entity.LastModifiedTime        = OM2MTimeStamp.NowTimeStamp;
                modifiedAttrs.LastModifiedTime = entity.LastModifiedTime;

                db.SaveChanges();

                db.Entry(entity).Collection(x => x.Resources).Load();
                var subs = entity.Resources.OfType <OM2MSubscriptionEntity>().ToList();
                CseService.Notify(subs, entity, OM2MResourceStatus.Updated);

                var response = new OM2MResponsePrimitive(CseConfig, request);
                response.Content            = modifiedAttrs;
                response.ResponseStatusCode = OM2MResponseStatusCode.Updated;

                return(response);
            }
        }