Skip to content

Commit

Permalink
Refactored OptionsIn to enable additional keywords
Browse files Browse the repository at this point in the history
  • Loading branch information
lindsve committed Jul 13, 2021
1 parent f6c880a commit c0113a3
Show file tree
Hide file tree
Showing 53 changed files with 270 additions and 239 deletions.
53 changes: 39 additions & 14 deletions Src/Witsml/ServiceReference/OptionsIn.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,56 @@
using System;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;

namespace Witsml.ServiceReference
{
public enum OptionsIn
public record OptionsIn
{
public ReturnElements ReturnElements { get; }

public OptionsIn(ReturnElements returnElements)
{
ReturnElements = returnElements;
}

public override string ToString()
{
var optionsIn = new StringBuilder();
optionsIn.Append($"returnElements={ReturnElements.GetEnumMemberValue()}");
return optionsIn.ToString();
}
}

public enum ReturnElements
{
[EnumMember(Value = "all")]
All,
[EnumMember(Value = "id-only")]
IdOnly,
[EnumMember(Value = "header-only")]
HeaderOnly,
[EnumMember(Value = "data-only")]
DataOnly,
[EnumMember(Value = "station-location-only")]
StationLocationOnly,
[EnumMember(Value = "latest-change-only")]
LatestChangeOnly,
[EnumMember(Value = "requested")]
Requested
}

public static class OptionsInToString
public static class EnumMemberToString
{
public static string GetName(this OptionsIn input)
public static string GetEnumMemberValue<T>(this T value) where T : Enum
{
return input switch
{
OptionsIn.All => "returnElements=all",
OptionsIn.IdOnly => "returnElements=id-only",
OptionsIn.HeaderOnly => "returnElements=header-only",
OptionsIn.DataOnly => "returnElements=data-only",
OptionsIn.StationLocationOnly => "returnElements=station-location-only",
OptionsIn.LatestChangeOnly => "returnElements=latest-change-only",
OptionsIn.Requested => "returnElements=requested",
_ => "returnElements=all"
};
return typeof(T)
.GetTypeInfo()
.DeclaredMembers
.SingleOrDefault(x => x.Name == value.ToString())
?.GetCustomAttribute<EnumMemberAttribute>(false)
?.Value;
}
}
}
2 changes: 1 addition & 1 deletion Src/Witsml/Witsml.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<LangVersion>8</LangVersion>
<LangVersion>default</LangVersion>
<PackageDescription>Witsml 1.4.1.1</PackageDescription>
<RepositoryUrl>https://github.com/equinor/witsml-explorer</RepositoryUrl>
</PropertyGroup>
Expand Down
12 changes: 7 additions & 5 deletions Src/Witsml/WitsmlClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace Witsml
public interface IWitsmlClient
{
Task<T> GetFromStoreAsync<T>(T query, OptionsIn optionsIn) where T : IWitsmlQueryType, new();
Task<QueryResult> AddToStoreAsync<T>(T query, OptionsIn optionsIn = OptionsIn.Requested) where T : IWitsmlQueryType;
Task<QueryResult> AddToStoreAsync<T>(T query) where T : IWitsmlQueryType;
Task<QueryResult> UpdateInStoreAsync<T>(T query) where T : IWitsmlQueryType;
Task<QueryResult> DeleteFromStoreAsync<T>(T query) where T : IWitsmlQueryType;
Task<QueryResult> TestConnectionAsync();
Expand Down Expand Up @@ -78,7 +78,7 @@ private static BasicHttpsBinding CreateBinding()
var request = new WMLS_GetFromStoreRequest
{
WMLtypeIn = query.TypeName,
OptionsIn = optionsIn.GetName(),
OptionsIn = optionsIn.ToString(),
QueryIn = XmlHelper.Serialize(query),
CapabilitiesIn = ""
};
Expand All @@ -101,14 +101,15 @@ private static BasicHttpsBinding CreateBinding()
}
}

public async Task<QueryResult> AddToStoreAsync<T>(T query, OptionsIn optionsIn = OptionsIn.Requested) where T : IWitsmlQueryType
public async Task<QueryResult> AddToStoreAsync<T>(T query) where T : IWitsmlQueryType
{
try
{
var optionsIn = new OptionsIn(ReturnElements.Requested);
var request = new WMLS_AddToStoreRequest
{
WMLtypeIn = query.TypeName,
OptionsIn = optionsIn.GetName(),
OptionsIn = optionsIn.ToString(),
XMLin = XmlHelper.Serialize(query)
};

Expand Down Expand Up @@ -185,9 +186,10 @@ public async Task<QueryResult> DeleteFromStoreAsync<T>(T query) where T : IWitsm

public async Task<QueryResult> TestConnectionAsync()
{
var optionsIn = new OptionsIn(ReturnElements.HeaderOnly);
var request = new WMLS_GetCapRequest
{
OptionsIn = OptionsIn.HeaderOnly.GetName()
OptionsIn = optionsIn.ToString()
};

var response = await client.WMLS_GetCapAsync(request);
Expand Down
8 changes: 4 additions & 4 deletions Src/WitsmlExplorer.Api/Services/LogObjectService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public LogObjectService(IWitsmlClientProvider witsmlClientProvider) : base(witsm
public async Task<IEnumerable<LogObject>> GetLogs(string wellUid, string wellboreUid)
{
var witsmlLog = LogQueries.GetWitsmlLogsByWellbore(wellUid, wellboreUid);
var result = await WitsmlClient.GetFromStoreAsync(witsmlLog, OptionsIn.HeaderOnly);
var result = await WitsmlClient.GetFromStoreAsync(witsmlLog, new OptionsIn(ReturnElements.HeaderOnly));

return result.Logs.Select(log =>
new LogObject
Expand All @@ -51,7 +51,7 @@ public async Task<IEnumerable<LogObject>> GetLogs(string wellUid, string wellbor

public async Task<LogObject> GetLog(string wellUid, string wellboreUid, string logUid)
{
return await GetLog(wellUid, wellboreUid, logUid, OptionsIn.All);
return await GetLog(wellUid, wellboreUid, logUid, new OptionsIn(ReturnElements.All));
}

public async Task<LogObject> GetLog(string wellUid, string wellboreUid, string logUid, OptionsIn queryOptions)
Expand Down Expand Up @@ -86,7 +86,7 @@ public async Task<LogObject> GetLog(string wellUid, string wellboreUid, string l
private async Task<WitsmlLog> GetLogHeader(string wellUid, string wellboreUid, string logUid)
{
var query = LogQueries.GetWitsmlLogById(wellUid, wellboreUid, logUid);
var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.HeaderOnly);
var result = await WitsmlClient.GetFromStoreAsync(query, new OptionsIn(ReturnElements.HeaderOnly));
return result.Logs.FirstOrDefault();
}

Expand Down Expand Up @@ -124,7 +124,7 @@ public async Task<LogData> ReadLogData(string wellUid, string wellboreUid, strin
if (!mnemonics.Contains(indexMnemonic)) mnemonics.Insert(0, indexMnemonic);

var query = LogQueries.GetLogContent(wellUid, wellboreUid, logUid, log.IndexType, mnemonics, startIndex, endIndex);
var witsmlLogs = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.All);
var witsmlLogs = await WitsmlClient.GetFromStoreAsync(query, new OptionsIn(ReturnElements.All));
if (!witsmlLogs.Logs.Any() || witsmlLogs.Logs.First().LogData == null) return new LogData();

var witsmlLog = witsmlLogs.Logs.First();
Expand Down
28 changes: 13 additions & 15 deletions Src/WitsmlExplorer.Api/Services/MessageObjectService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
using System.Linq;
using System.Threading.Tasks;
using Serilog;
using Witsml.Data;
using Witsml.Extensions;
using Witsml.ServiceReference;
using WitsmlExplorer.Api.Models;
using WitsmlExplorer.Api.Query;
Expand All @@ -26,7 +24,7 @@ public MessageObjectService(IWitsmlClientProvider witsmlClientProvider) : base(w
public async Task<MessageObject> GetMessageObject(string wellUid, string wellboreUid, string msgUid)
{
var witsmlMessage = MessageQueries.GetMessageById(wellUid, wellboreUid, msgUid);
var result = await WitsmlClient.GetFromStoreAsync(witsmlMessage, OptionsIn.All);
var result = await WitsmlClient.GetFromStoreAsync(witsmlMessage, new OptionsIn(ReturnElements.All));
var messageObject = result.Messages.FirstOrDefault();
if (messageObject == null) return null;

Expand All @@ -48,26 +46,26 @@ public async Task<IEnumerable<MessageObject>> GetMessageObjects(string wellUid,
{
var start = DateTime.Now;
var witsmlMessage = MessageQueries.GetMessageByWellbore(wellUid, wellboreUid);
var result = await WitsmlClient.GetFromStoreAsync(witsmlMessage, OptionsIn.All);
var result = await WitsmlClient.GetFromStoreAsync(witsmlMessage, new OptionsIn(ReturnElements.All));
var messageObject = result.Messages.FirstOrDefault();
if (messageObject == null) return null;

var messageObjects = result.Messages
.Select(messageObject =>
.Select(message =>
new MessageObject
{
Uid = messageObject.Uid,
Name = messageObject.Name,
WellboreUid = messageObject.UidWellbore,
WellboreName = messageObject.NameWellbore,
WellUid = messageObject.UidWell,
WellName = messageObject.NameWell,
MessageText = messageObject.MessageText,
DateTimeLastChange = StringHelpers.ToDateTime(messageObject.CommonData.DTimLastChange)
Uid = message.Uid,
Name = message.Name,
WellboreUid = message.UidWellbore,
WellboreName = message.NameWellbore,
WellUid = message.UidWell,
WellName = message.NameWell,
MessageText = message.MessageText,
DateTimeLastChange = StringHelpers.ToDateTime(message.CommonData.DTimLastChange)
})
.OrderBy(messageObject => messageObject.WellboreName).ToList();
.OrderBy(message => message.WellboreName).ToList();
var elapsed = DateTime.Now.Subtract(start).Milliseconds / 1000.0;
Log.Debug($"Fetched {messageObjects.Count} messageobjects in {elapsed} seconds");
Log.Debug("Fetched {Count} message objects in {Elapsed} seconds", messageObjects.Count, elapsed);
return messageObjects;
}
}
Expand Down
4 changes: 2 additions & 2 deletions Src/WitsmlExplorer.Api/Services/RigService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public RigService(IWitsmlClientProvider witsmlClientProvider) : base(witsmlClien
public async Task<IEnumerable<Rig>> GetRigs(string wellUid, string wellboreUid)
{
var witsmlRigs = RigQueries.GetWitsmlRigByWellbore(wellUid, wellboreUid);
var result = await WitsmlClient.GetFromStoreAsync(witsmlRigs, OptionsIn.IdOnly);
var result = await WitsmlClient.GetFromStoreAsync(witsmlRigs, new OptionsIn(ReturnElements.IdOnly));

return result.Rigs.Select(rig =>
new Rig
Expand All @@ -41,7 +41,7 @@ public async Task<IEnumerable<Rig>> GetRigs(string wellUid, string wellboreUid)
public async Task<Rig> GetRig(string wellUid, string wellboreUid, string rigUid)
{
var query = RigQueries.GetWitsmlRigById(wellUid, wellboreUid, rigUid);
var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.All);
var result = await WitsmlClient.GetFromStoreAsync(query, new OptionsIn(ReturnElements.All));
var witsmlRig = result.Rigs.FirstOrDefault();
if (witsmlRig == null) return null;

Expand Down
6 changes: 2 additions & 4 deletions Src/WitsmlExplorer.Api/Services/RiskService.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using WitsmlExplorer.Api.Query;
using Witsml.ServiceReference;
using WitsmlExplorer.Api.Models;
Expand All @@ -12,7 +10,7 @@ namespace WitsmlExplorer.Api.Services
public interface IRiskService
{
Task<IEnumerable<Risk>> GetRisks(string wellUid, string wellboreUid);

}

// ReSharper disable once UnusedMember.Global
Expand All @@ -23,7 +21,7 @@ public RiskService(IWitsmlClientProvider witsmlClientProvider) : base(witsmlClie
public async Task<IEnumerable<Risk>> GetRisks(string wellUid, string wellboreUid)
{
var query = RiskQueries.GetWitsmlRiskByWellbore(wellUid, wellboreUid);
var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.All);
var result = await WitsmlClient.GetFromStoreAsync(query, new OptionsIn(ReturnElements.All));

return result.Risks.Select(risk =>
new Risk
Expand Down
4 changes: 2 additions & 2 deletions Src/WitsmlExplorer.Api/Services/TrajectoryService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public TrajectoryService(IWitsmlClientProvider witsmlClientProvider) : base(wits
public async Task<IEnumerable<Trajectory>> GetTrajectories(string wellUid, string wellboreUid)
{
var witsmlTrajectory = TrajectoryQueries.GetWitsmlTrajectoryByWellbore(wellUid, wellboreUid);
var result = await WitsmlClient.GetFromStoreAsync(witsmlTrajectory, OptionsIn.Requested);
var result = await WitsmlClient.GetFromStoreAsync(witsmlTrajectory, new OptionsIn(ReturnElements.Requested));

return result.Trajectories.Select(trajectory =>
new Trajectory
Expand All @@ -45,7 +45,7 @@ public async Task<IEnumerable<Trajectory>> GetTrajectories(string wellUid, strin
public async Task<List<TrajectoryStation>> GetTrajectoryStations(string wellUid, string wellboreUid, string trajectoryUid)
{
var trajectoryToQuery = TrajectoryQueries.GetWitsmlTrajectoryById(wellUid, wellboreUid, trajectoryUid);
var result = await WitsmlClient.GetFromStoreAsync(trajectoryToQuery, OptionsIn.All);
var result = await WitsmlClient.GetFromStoreAsync(trajectoryToQuery, new OptionsIn(ReturnElements.All));
var witsmlTrajectory = result.Trajectories.FirstOrDefault();
if (witsmlTrajectory == null) return null;
return witsmlTrajectory.TrajectoryStations.Select(tStation => new TrajectoryStation
Expand Down
4 changes: 2 additions & 2 deletions Src/WitsmlExplorer.Api/Services/WellService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ private async Task<IEnumerable<Well>> GetWellsInformation(string wellUid = null)
{
var start = DateTime.Now;
var witsmlWells = string.IsNullOrEmpty(wellUid) ? WellQueries.GetAllWitsmlWells() : WellQueries.GetWitsmlWellByUid(wellUid);
var result = await WitsmlClient.GetFromStoreAsync(witsmlWells, OptionsIn.Requested);
var result = await WitsmlClient.GetFromStoreAsync(witsmlWells, new OptionsIn(ReturnElements.Requested));
var wells = result.Wells
.Select(well => new Well
{
Expand All @@ -57,7 +57,7 @@ private async Task<IEnumerable<Well>> GetWellsInformation(string wellUid = null)
}
).ToList();
var elapsed = DateTime.Now.Subtract(start).Milliseconds / 1000.0;
Log.Debug($"Fetched {wells.Count} wells in {elapsed} seconds");
Log.Debug("Fetched {Count} wells in {Elapsed} seconds", wells.Count, elapsed);
return wells;
}

Expand Down
6 changes: 3 additions & 3 deletions Src/WitsmlExplorer.Api/Services/WellboreService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public WellboreService(IWitsmlClientProvider witsmlClientProvider) : base(witsml
public async Task<Wellbore> GetWellbore(string wellUid, string wellboreUid)
{
var query = WellboreQueries.GetWitsmlWellboreByUid(wellUid, wellboreUid);
var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.All);
var result = await WitsmlClient.GetFromStoreAsync(query, new OptionsIn(ReturnElements.All));
var witsmlWellbore = result.Wellbores.FirstOrDefault();
if (witsmlWellbore == null) return null;

Expand All @@ -47,7 +47,7 @@ public async Task<IEnumerable<Wellbore>> GetWellbores(string wellUid = null)
var start = DateTime.Now;
var query = string.IsNullOrEmpty(wellUid) ? WellboreQueries.GetAllWitsmlWellbores() : WellboreQueries.GetWitsmlWellboreByWell(wellUid);

var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.Requested);
var result = await WitsmlClient.GetFromStoreAsync(query, new OptionsIn(ReturnElements.Requested));
var wellbores = result.Wellbores
.Select(witsmlWellbore =>
new Wellbore
Expand All @@ -63,7 +63,7 @@ public async Task<IEnumerable<Wellbore>> GetWellbores(string wellUid = null)
})
.OrderBy(wellbore => wellbore.Name).ToList();
var elapsed = DateTime.Now.Subtract(start).Milliseconds / 1000.0;
Log.Debug($"Fetched {wellbores.Count} wellbores in {elapsed} seconds");
Log.Debug("Fetched {Count} wellbores in {Elapsed} seconds", wellbores.Count, elapsed);
return wellbores;
}
}
Expand Down
4 changes: 2 additions & 2 deletions Src/WitsmlExplorer.Api/Workers/CopyLogDataWorker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ private async Task<CopyResult> CopyLogData(WitsmlLog sourceLog, WitsmlLog target
{
var query = LogQueries.GetLogContent(job.LogCurvesReference.LogReference.WellUid, job.LogCurvesReference.LogReference.WellboreUid,
job.LogCurvesReference.LogReference.LogUid, sourceLog.IndexType, mnemonics, startIndex, endIndex);
var sourceData = await witsmlSourceClient.GetFromStoreAsync(query, OptionsIn.DataOnly);
var sourceData = await witsmlSourceClient.GetFromStoreAsync(query, new OptionsIn(ReturnElements.DataOnly));
if (!sourceData.Logs.Any()) break;
var sourceLogWithData = sourceData.Logs.First();
var copyNewCurvesQuery = CreateCopyQuery(targetLog, sourceLog, sourceLogWithData);
Expand Down Expand Up @@ -219,7 +219,7 @@ private static void VerifyIndexCurveIsIncludedInMnemonics(WitsmlLog log, List<st
private async Task<WitsmlLog> GetLog(IWitsmlClient client, LogReference logReference)
{
var logQuery = LogQueries.GetWitsmlLogById(logReference.WellUid, logReference.WellboreUid, logReference.LogUid);
var logs = await client.GetFromStoreAsync(logQuery, OptionsIn.HeaderOnly);
var logs = await client.GetFromStoreAsync(logQuery, new OptionsIn(ReturnElements.HeaderOnly));
return !logs.Logs.Any() ? null : logs.Logs.First();
}

Expand Down
6 changes: 3 additions & 3 deletions Src/WitsmlExplorer.Api/Workers/CopyLogWorker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private static void LogError(CopyLogJob job, string errorMessage)
{
Log.Error("{ErrorMessage} " +
"Source: UidWell: {SourceWellUid}, UidWellbore: {SourceWellboreUid}, Uid: {SourceLogUid}. " +
"Target: UidWell: {TargetWellUid}, UidWellbore: {TargetWellboreUid}.",
"Target: UidWell: {TargetWellUid}, UidWellbore: {TargetWellboreUid}",
errorMessage,
job.Source.WellUid, job.Source.WellboreUid, job.Source.LogUid,
job.Target.WellUid, job.Target.WellboreUid);
Expand Down Expand Up @@ -111,14 +111,14 @@ private async Task<Tuple<WitsmlLog, WitsmlWellbore>> FetchData(CopyLogJob job)
private static async Task<WitsmlLog> GetLog(IWitsmlClient client, LogReference logReference)
{
var logQuery = LogQueries.GetWitsmlLogById(logReference.WellUid, logReference.WellboreUid, logReference.LogUid);
var result = await client.GetFromStoreAsync(logQuery, OptionsIn.All);
var result = await client.GetFromStoreAsync(logQuery, new OptionsIn(ReturnElements.All));
return !result.Logs.Any() ? null : result.Logs.First();
}

private static async Task<WitsmlWellbore> GetWellbore(IWitsmlClient client, WellboreReference wellboreReference)
{
var query = WellboreQueries.GetWitsmlWellboreByUid(wellboreReference.WellUid, wellboreReference.WellboreUid);
var wellbores = await client.GetFromStoreAsync(query, OptionsIn.Requested);
var wellbores = await client.GetFromStoreAsync(query, new OptionsIn(ReturnElements.Requested));
return !wellbores.Wellbores.Any() ? null : wellbores.Wellbores.First();
}
}
Expand Down
Loading

0 comments on commit c0113a3

Please sign in to comment.