| using BaSys40.API.Platform; |
| using BaSys40.Models.Core.AssetAdministrationShell.Generics; |
| using BaSys40.Utils.Client; |
| using BaSys40.Utils.ResultHandling; |
| using Newtonsoft.Json; |
| using System; |
| using System.Collections.Generic; |
| using System.IO; |
| using System.Net; |
| using System.Net.Http; |
| using System.Reflection; |
| using static BaSys40.Registry.Client.RegistryClientSettings; |
| |
| namespace BaSys40.Registry.Client |
| { |
| public class RegistryClient : SimpleHttpClient, IAssetAdministrationShellRegistry |
| { |
| public static RegistryClientSettings Settings { get; private set; } |
| public static readonly string SettingsPath; |
| |
| private static RegistryClient registryClient; |
| |
| private RegistryConfiguration registryConfig; |
| |
| private const string RegistryPath = "registry"; |
| private const string SubModelPath = "subModels"; |
| private const string PathSeperator = "/"; |
| |
| private const int Timeout = 5000; |
| |
| static RegistryClient() |
| { |
| SettingsPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), RegistryClientSettings.FileName); |
| Settings = RegistryClientSettings.LoadSettings(SettingsPath); |
| |
| if (Settings.ProxyConfig.UseProxy.HasValue && Settings.ProxyConfig.UseProxy.Value && !string.IsNullOrEmpty(Settings.ProxyConfig.ProxyAddress)) |
| { |
| HttpClientHandler.UseProxy = true; |
| if (!string.IsNullOrEmpty(Settings.ProxyConfig.UserName) && !string.IsNullOrEmpty(Settings.ProxyConfig.Password)) |
| { |
| NetworkCredential credential; |
| if (!string.IsNullOrEmpty(Settings.ProxyConfig.Domain)) |
| credential = new NetworkCredential(Settings.ProxyConfig.UserName, Settings.ProxyConfig.Password, Settings.ProxyConfig.Domain); |
| else |
| credential = new NetworkCredential(Settings.ProxyConfig.UserName, Settings.ProxyConfig.Password); |
| |
| HttpClientHandler.Proxy = new WebProxy(Settings.ProxyConfig.ProxyAddress, false, null, credential); |
| } |
| else |
| HttpClientHandler.Proxy = new WebProxy(Settings.ProxyConfig.ProxyAddress); |
| } |
| else |
| HttpClientHandler.UseProxy = false; |
| } |
| |
| public static RegistryClient Instance |
| { |
| get |
| { |
| if (registryClient == null) |
| registryClient = new RegistryClient(); |
| return registryClient; |
| } |
| } |
| |
| public RegistryClient(RegistryConfiguration registryConfig = null) |
| { |
| if (registryConfig != null) |
| this.registryConfig = registryConfig; |
| else |
| this.registryConfig = Settings.RegistryConfig; |
| } |
| |
| public Uri GetUri(params string[] pathElements) |
| { |
| string path = registryConfig.RegistryUrl + registryConfig.BasePath; |
| if (pathElements?.Length > 0) |
| foreach (var pathElement in pathElements) |
| { |
| path += pathElement + PathSeperator; |
| } |
| return new Uri(path); |
| } |
| |
| public IResult<IAssetAdministrationShell> CreateAssetAdministrationShell(IAssetAdministrationShell aas) |
| { |
| var request = base.CreateRequest(GetUri(), HttpMethod.Post, aas); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse<IAssetAdministrationShell>(response.Entity); |
| } |
| |
| public IResult<IAssetAdministrationShell> RetrieveAssetAdministrationShell(string aasId) |
| { |
| var request = base.CreateRequest(GetUri(aasId), HttpMethod.Get); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse<IAssetAdministrationShell>(response.Entity); |
| } |
| |
| public IResult<List<IAssetAdministrationShell>> RetrieveAssetAdministrationShells() |
| { |
| var request = base.CreateRequest(GetUri(), HttpMethod.Get); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse<List<IAssetAdministrationShell>>(response.Entity); |
| } |
| |
| public IResult UpdateAssetAdministrationShell(string aasId, Dictionary<string, string> metaData) |
| { |
| var request = base.CreateRequest(GetUri(aasId), HttpMethod.Put); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse(response.Entity); |
| } |
| |
| public IResult DeleteAssetAdministrationShell(string aasId) |
| { |
| var request = base.CreateRequest(GetUri(aasId), HttpMethod.Delete); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse<List<IAssetAdministrationShell>>(response.Entity); |
| } |
| |
| public IResult<ISubModel> CreateSubModel(string aasId, ISubModel submodel) |
| { |
| var request = base.CreateRequest(GetUri(aasId, SubModelPath), HttpMethod.Post, submodel); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse<ISubModel>(response.Entity); |
| } |
| |
| public IResult<IElementContainer<ISubModel>> RetrieveSubModels(string aasId) |
| { |
| var request = base.CreateRequest(GetUri(aasId, SubModelPath), HttpMethod.Get); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse<IElementContainer<ISubModel>>(response.Entity); |
| } |
| |
| public IResult<ISubModel> RetrieveSubModel(string aasId, string subModelId) |
| { |
| var request = base.CreateRequest(GetUri(aasId, SubModelPath, subModelId), HttpMethod.Get); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse<ISubModel>(response.Entity); |
| } |
| |
| public IResult DeleteSubModel(string aasId, string subModelId) |
| { |
| var request = base.CreateRequest(GetUri(aasId, SubModelPath, subModelId), HttpMethod.Delete); |
| var response = base.SendRequest(request, Timeout); |
| return base.EvaluateResponse(response.Entity); |
| } |
| } |
| } |