blob: e4cd4f0682f1dc86a40c23b4629ac16c13be6da1 [file] [log] [blame]
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);
}
}
}