blob: 1029594d05f192d9d74f09dd18484707eea952c1 [file] [log] [blame]
using oneM2MClient.Client;
using oneM2MClient.Protocols;
using oneM2MClient.Utils;
using oneM2MClient.Utils.ResultHandling;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using static oneM2MClient.Resources.AttributeAttribute;
namespace oneM2MClient.Resources
{
public class Container : IResource
{
public const int MaxNumberOfContentInstances = 10000;
#region Mandatory and optional properties
[AttributeProvider(typeof(IResource))]
public string ResourceName { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "accessControlPolicyIDs", ShortName = "acpi")]
public List<string> AccessControlPolicyIDs { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "expirationTime", ShortName = "et")]
public string ExpirationTime { get; set; }
[AttributeProvider(typeof(IResource))]
public List<string> Labels { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "announceTo", ShortName = "at")]
public string AnnounceTo { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "announcedAttribute", ShortName = "aa")]
public string AnnouncedAttribute { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "dynamicAuthorizationConsultationIDs", ShortName = "daci")]
public List<string> DynamicAuthorizationConsultationIDs { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.NotProvided, LongName = "creator", ShortName = "cr")]
public string Creator { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "maxNrOfInstances", ShortName = "mni")]
public int? MaxNrOfInstances { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "maxByteSize", ShortName = "mbs")]
public int? MaxByteSize { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "maxInstanceAge", ShortName = "mia")]
public int? MaxInstanceAge { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "locationID", ShortName = "li")]
public string LocationID { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.Optional, LongName = "ontologyRef", ShortName = "or")]
public string OntologyRef { get; set; }
[Attribute(CreateOptionality = RequestOptionality.Optional, UpdateOptionality = RequestOptionality.NotProvided, LongName = "disableRetrieval", ShortName = "disr")]
public bool? DisableRetrieval { get; set; } = false;
[Attribute(CreateOptionality = RequestOptionality.NotProvided, UpdateOptionality = RequestOptionality.NotProvided, LongName = "currentNrOfInstances", ShortName = "cni")]
public int? CurrentNrOfInstances { get; set; }
[Attribute(CreateOptionality = RequestOptionality.NotProvided, UpdateOptionality = RequestOptionality.NotProvided, LongName = "currentByteSize", ShortName = "cbs")]
public int? CurrentByteSize { get; set; }
#endregion
#region Interface implementation
public List<Type> SupportedChildResourceTypes => new List<Type>() { typeof(Subscription), typeof(ContentInstance), typeof(Container) };
[AttributeProvider(typeof(IResource))]
public oneM2M.ResourceType? ResourceType => oneM2M.ResourceType.Container;
[AttributeProvider(typeof(IResource))]
public string ResourceID { get; set; }
[AttributeProvider(typeof(IResource))]
public string ParentID { get; set; }
[AttributeProvider(typeof(IResource))]
public string CreationTime { get; set; }
[AttributeProvider(typeof(IResource))]
public string LastModifiedTime { get; set; }
#endregion
public Container() { }
public Container(string resourceName) : this(resourceName, null, null)
{ }
public Container(string resourceName, string ontologyRef, List<string> labels) : this(resourceName, ontologyRef, labels, null)
{ }
public Container(string resourceName, string ontologyRef, List<string> labels, int? maxNrOfInstances) : this(resourceName, null, null, labels, null,null, null, null, maxNrOfInstances, null, null, null, ontologyRef, null)
{ }
public Container(cnt baseResource)
{
this.ConvertToConvenientResource(baseResource);
}
public Container(
string resourceName,
List<string> accessControlPolicyIDs,
string expirationTime,
List<string> labels,
string announceTo,
string announcedAttribute,
List<string> dynamicAuthorizationConsultationIDs,
string creator,
int? maxNrOfInstances, int? maxByteSize, int? maxInstanceAge,
string locationID, string ontologyRef, bool? disableRetrieval = false)
{
this.ResourceName = resourceName;
this.AccessControlPolicyIDs = accessControlPolicyIDs;
this.ExpirationTime = expirationTime;
this.Labels = labels;
this.AnnounceTo = announceTo;
this.AnnouncedAttribute = announcedAttribute;
this.DynamicAuthorizationConsultationIDs = dynamicAuthorizationConsultationIDs;
this.Creator = creator;
this.MaxNrOfInstances = maxNrOfInstances ?? MaxNumberOfContentInstances;
this.MaxByteSize = maxByteSize;
this.MaxInstanceAge = maxInstanceAge;
this.LocationID = locationID;
this.OntologyRef = ontologyRef;
this.DisableRetrieval = disableRetrieval;
}
#region Static operations
public static Result<Response> Create(IClient client, Request request, string resourceName)
{ return Create(client, request, resourceName, null, null); }
public static Result<Response> Create(IClient client, Request request, string resourceName, string ontologyRef, List<string> labels)
{ return Create(client, request, resourceName, ontologyRef, labels, null); }
public static Result<Response> Create(IClient client, Request request, string resourceName, string ontologyRef, List<string> labels, int? maxNrOfInstances)
{
Container cnt = new Container(resourceName, ontologyRef, labels, maxNrOfInstances);
return (Process(client, request, oneM2M.Operation.CREATE, cnt));
}
public static Result<Response> Retrieve(IClient client, Request request)
{ return (Process(client, request, oneM2M.Operation.RETRIEVE, null)); }
public static Result<Response> Update(IClient client, Request request, string ontologyRef, List<string> labels, int maxNrOfInstances)
{
Container cnt = new Container(null, ontologyRef, labels, maxNrOfInstances);
return (Process(client, request, oneM2M.Operation.UPDATE, cnt));
}
public static Result<Response> Delete(IClient client, Request request)
{ return (Process(client, request, oneM2M.Operation.DELETE, null)); }
public static Result<Response> Process(IClient client, Request request, oneM2M.Operation operation, Container container)
{
object resource = Helper.ConvertToBaseResource(container);
return CSEBase.CRUD(client, request, operation, oneM2M.ResourceType.Container, resource);
}
#endregion
}
}