blob: d8fd13c9db0b8294ea4890106a2e11bd26ea2413 [file] [log] [blame]
using BaSys40.Models.Core.AssetAdministrationShell.Generics;
using BaSys40.Models.Core.Extensions.References;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace BaSys40.Models.Core.AssetAdministrationShell.Implementations
{
[DataContract, JsonConverter(typeof(DataElementValueConverter))]
public class DataElement : SubmodelElement, IDataElement
{
public virtual object Value { get; set; }
public virtual DataType ValueType { get; set; }
public override ModelType ModelType => ModelType.DataElement;
public DataElement(IConceptDescription conceptDescription, params IEmbeddedDataSpecification[] embeddedDataSpecifications)
: base(conceptDescription, embeddedDataSpecifications)
{ }
public T ToObject<T>()
{
if (DataType.GetDataTypeFromSystemTypes(typeof(T)) == ValueType)
return (T)Value;
else
throw new InvalidCastException("Cannot convert " + DataType.GetDataTypeFromSystemTypes(typeof(T)).DataObjectType + " to " + ValueType.DataObjectType);
}
}
[DataContract]
public class DataElement<TValue> : DataElement, IDataElement<TValue>
{
[DataMember(EmitDefaultValue = false, IsRequired = false, Name = "value")]
public virtual new TValue Value
{
get
{
if (base.Value != null)
return (TValue)base.Value;
else
return default(TValue);
}
set => base.Value = value;
}
public DataElement() : this(null) { }
[JsonConstructor]
public DataElement(IConceptDescription conceptDescription, params IEmbeddedDataSpecification[] embeddedDataSpecifications)
: base(conceptDescription, embeddedDataSpecifications)
{ }
}
}