// ToDo: public static OM2MContainer ToResource(this OM2MContainerEntity entity, OM2MResultContent resultContent) { var resource = new OM2MContainer(); CopyAttributesResource(entity, resource); return(resource); }
public override OM2MResponsePrimitive DoUpdate(OM2MRequestPrimitive request) { using (var db = CreateDbContext()) { var entity = db.Resources.Find(request.TargetId) as OM2MContainerEntity; if (entity == null) { throw new OM2MNotFoundException("Resource not found."); } var acpList = new List <OM2MAccessControlPolicyEntity>(); foreach (var i in entity.AccessControlPolicyIds) { var queryAcp = db.Resources.Find(i) as OM2MAccessControlPolicyEntity; if (queryAcp == null) { // Damaged continue; } acpList.Add(queryAcp); } CheckACP(acpList, request.From, OM2MOperation.Update); if (request.Content == null) { throw new OM2MBadRequestException("A content is required for creation."); } var resource = request.Content as OM2MContainer; if (resource == null) { throw new OM2MBadRequestException("Incorrect resource in primitive content."); } if (resource.CurrentNrOfInstances != null) { throw new OM2MBadRequestException("currentNrOfInstances is not permitted."); } if (resource.CurrentByteSize != null) { throw new OM2MBadRequestException("currentByteSize is not permitted."); } var modifiedAttrs = new OM2MContainer(); 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.MaxNrOfInstances != null) { entity.MaxNrOfInstances = resource.MaxNrOfInstances; modifiedAttrs.MaxNrOfInstances = resource.MaxNrOfInstances; } if (resource.MaxByteSize != null) { entity.MaxByteSize = resource.MaxByteSize; modifiedAttrs.MaxByteSize = resource.MaxByteSize; } if (resource.MaxInstanceAge != null) { entity.MaxInstanceAge = resource.MaxInstanceAge; modifiedAttrs.MaxInstanceAge = resource.MaxInstanceAge; } if (resource.LocationID != null) { entity.LocationID = resource.LocationID; modifiedAttrs.LocationID = resource.LocationID; } if (resource.OntologyRef != null) { entity.OntologyRef = resource.OntologyRef; modifiedAttrs.OntologyRef = resource.OntologyRef; } entity.StateTag = entity.StateTag + 1; modifiedAttrs.StateTag = entity.StateTag; entity.LastModifiedTime = OM2MTimeStamp.NowTimeStamp; modifiedAttrs.LastModifiedTime = entity.LastModifiedTime; db.SaveChanges(); 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); } }