blob: 32ebb52795b0bf82073573235d357c18c17236ac [file] [log] [blame]
using BaSys40.API.ServiceProvider;
using BaSys40.Models.Connectivity;
using BaSys40.Models.Core.AssetAdministrationShell;
using BaSys40.Models.Core.AssetAdministrationShell.Generics;
using BaSys40.Models.Core.AssetAdministrationShell.Implementations;
using BaSys40.Utils.ResultHandling;
using System.Collections.Generic;
using System.Linq;
namespace BaSys40.API.Components
{
public abstract class ComponentAssetAdministrationShellServiceProvider : IAssetAdministrationShellServiceProvider
{
public abstract IAssetAdministrationShell AssetAdministrationShell { get; protected set; }
private Dictionary<string, ISubmodelServiceProvider> SubmodelServiceProviders { get; } = new Dictionary<string, ISubmodelServiceProvider>();
public IServiceDescriptor ServiceDescriptor { get; private set; }
public ComponentAssetAdministrationShellServiceProvider(AssetAdministrationShellDescriptor assetAdministrationShellDescriptor) : this()
{
ServiceDescriptor = assetAdministrationShellDescriptor;
}
public ComponentAssetAdministrationShellServiceProvider(IAssetAdministrationShell assetAdministrationShell)
{
BindTo(assetAdministrationShell);
}
public ComponentAssetAdministrationShellServiceProvider()
{
AssetAdministrationShell = GenerateAssetAdministrationShell();
BindTo(AssetAdministrationShell);
}
public virtual void RegisterSubmodelServiceProvider(string submodelId, ISubmodelServiceProvider submodelServiceProvider)
{
SubmodelServiceProviders.Add(submodelId, submodelServiceProvider);
}
public virtual ISubmodelServiceProvider GetSubmodelServiceProvider(string submodelId)
{
if (SubmodelServiceProviders.TryGetValue(submodelId, out ISubmodelServiceProvider submodelServiceProvider))
return submodelServiceProvider;
else
return null;
}
public abstract IAssetAdministrationShell GenerateAssetAdministrationShell();
public virtual void BindTo(IAssetAdministrationShell element)
{
AssetAdministrationShell = element;
}
public virtual IAssetAdministrationShell GetBinding()
{
return AssetAdministrationShell;
}
public virtual IResult<ISubmodel> CreateSubmodel(ISubmodel submodel)
{
return AssetAdministrationShell.Submodels.Create(submodel);
}
public virtual IResult DeleteSubmodel(string submodelId)
{
return AssetAdministrationShell.Submodels.Delete(submodelId);
}
public virtual IResult<ISubmodel> RetrieveSubmodel(string submodelId)
{
return AssetAdministrationShell.Submodels.Retrieve(submodelId);
}
public virtual IResult<ElementContainer<ISubmodel>> RetrieveSubmodels()
{
return AssetAdministrationShell.Submodels.RetrieveAll();
}
public virtual IEnumerable<ISubmodelServiceProvider> GetSubmodelServiceProviders()
{
return SubmodelServiceProviders.Values?.ToList();
}
}
}