Skip to content

Commit

Permalink
[FIX] Error saving value to ParameterSubscription on ParameterOverride
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander van Delft committed May 24, 2024
1 parent d8ef101 commit 4e44408
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 8 deletions.
2 changes: 1 addition & 1 deletion CDP4Orm/CDP4Orm.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="CDP4JsonSerializer-CE" Version="27.0.0" />
<PackageReference Include="CDP4JsonSerializer-CE" Version="27.0.1-9206969459-678-1-PR-342" />
<PackageReference Include="Npgsql" Version="8.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
</ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions CometServer/CometServer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
<ItemGroup>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Carter" Version="8.1.0" />
<PackageReference Include="CDP4MessagePackSerializer-CE" Version="27.0.0" />
<PackageReference Include="CDP4ServicesMessaging-CE" Version="27.0.0" />
<PackageReference Include="CDP4MessagePackSerializer-CE" Version="27.0.1-9206969459-678-1-PR-342" />
<PackageReference Include="CDP4ServicesMessaging-CE" Version="27.0.1-9206969459-678-1-PR-342" />
<PackageReference Include="FluentValidation" Version="11.9.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="8.0.4" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,16 @@ namespace CometServer.Services.Operations.SideEffects
using CDP4Common;
using CDP4Common.DTO;
using CDP4Common.EngineeringModelData;
using CDP4Common.Exceptions;
using CDP4Common.Validation;

using CometServer.Exceptions;

using Npgsql;

using Parameter = CDP4Common.DTO.Parameter;
using ParameterOrOverrideBase = CDP4Common.DTO.ParameterOrOverrideBase;
using ParameterOverride = CDP4Common.DTO.ParameterOverride;
using ParameterSubscription = CDP4Common.DTO.ParameterSubscription;
using ParameterSubscriptionValueSet = CDP4Common.DTO.ParameterSubscriptionValueSet;

Expand All @@ -54,6 +57,11 @@ public sealed class ParameterSubscriptionValueSetSideEffect : OperationSideEffec
/// </summary>
public IParameterService ParameterService { get; set; }

/// <summary>
/// Gets or sets the injected <see cref="IParameterOverrideService"/> used to retrieve linked <see cref="Thing"/>
/// </summary>
public IParameterOverrideService ParameterOverrideService { get; set; }

/// <summary>
/// Execute additional logic before a create operation.
/// </summary>
Expand Down Expand Up @@ -120,15 +128,50 @@ public override void BeforeUpdate(ParameterSubscriptionValueSet thing, Thing con
throw new ArgumentException("The container of the ParameterSubscriptionValueSet is not a ParameterSubscription", nameof(container));
}

var parameter = this.ParameterService.Get(transaction, partition, null, securityContext)
.OfType<Parameter>()
.Single(x => x.ParameterSubscription.Contains(parameterSubscription.Iid));
var parameters = this.ParameterService.Get(transaction, partition, null, securityContext).ToList();

var parameterOrOverrideBase =
parameters
.OfType<ParameterOrOverrideBase>()
.SingleOrDefault(
x => x.ParameterSubscription.Contains(parameterSubscription.Iid))
??
this.ParameterOverrideService.Get(transaction, partition, null, securityContext)
.OfType<ParameterOrOverrideBase>()
.SingleOrDefault(
x => x.ParameterSubscription.Contains(parameterSubscription.Iid));

var things = new List<Thing>();

things.AddRange(this.ParameterService.QueryReferencedSiteDirectoryThings(parameter, transaction,securityContext));
if (parameterOrOverrideBase == null)
{
throw new ThingNotFoundException("The ParameterSubscription's container Parameter, or ParameterOverride was not found");
}

ValidationResult validationResult = default;
validationResult.Message = "Validation failed";

if (parameterOrOverrideBase is Parameter parameter)
{
things.AddRange(this.ParameterService.QueryReferencedSiteDirectoryThings(parameter, transaction, securityContext));

validationResult = parameter.ValidateAndCleanup(rawUpdateInfo, things, CultureInfo.InvariantCulture);
}

if (parameterOrOverrideBase is ParameterOverride parameterOverride)
{
var parameterOverrideParameter = parameters.SingleOrDefault(x => x.Iid == parameterOverride.Parameter) as Parameter;

if (parameterOrOverrideBase == null)
{
throw new ThingNotFoundException("The ParameterOverride's container Parameter was not found");
}

var validationResult = parameter.ValidateAndCleanup(rawUpdateInfo, things, CultureInfo.InvariantCulture);
things.Add(parameterOverrideParameter);
things.AddRange(this.ParameterService.QueryReferencedSiteDirectoryThings(parameterOverrideParameter, transaction, securityContext));

validationResult = parameterOverride.ValidateAndCleanup(rawUpdateInfo, things, CultureInfo.InvariantCulture);
}

if (validationResult.ResultKind != ValidationResultKind.Valid)
{
Expand Down

0 comments on commit 4e44408

Please sign in to comment.