• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

HicServices / RDMP / 9345538130

03 Jun 2024 06:46AM UTC coverage: 56.914%. Remained the same
9345538130

push

github

web-flow
Efficiency enhancements (#1829)

* More efficient checking for duplicates in lists

* GetValueOrDefault instead of manual fallback

* Update CommentStore.cs

Eliminate double-searching of CommentStore

* Eliminate more double-searches

* Update ExtractionConfiguration.cs

Clearer variable type, remove redundant casts

* Update ExecuteCommandAddPipelineComponent.cs

Make callbacks static for simplicity

* Update ColumnInfoANOPlan.cs

Join declaration and initialisation

* More GetValueOrDefault

* Simplify searching logic - Where(x).First() -> First(x) to avoid repeating copying

* Update CatalogueChildProvider.cs

Simplify list generation logic

* Update DleRunner.cs

Remove redundant counting of list size

* Null-coalesce, usings

* Lambdas

* Update YesNoYesToAllDialog.cs

Avoid thread-thrashing if yes or no to all has been clicked

* Method groups, static lambdas

* Avoid multiple lookups when iterating arrays

* Simplify null checks

* String interpolation, another loop deref

* Update CohortIdentificationTaskExecution.cs

Fix duplicate Dispose calls

* Update RemoteAttacher.cs

Make fake conditional value a constant

* Fix multiple enumerations

A

* Type check and cast combination

* Update RemoteAttacherTests.cs

String interpolation, object initialisers

* Turn some private fields to local variables where applicable

* No-op string interpolations

* Remove some redundant syntax

10817 of 20482 branches covered (52.81%)

Branch coverage included in aggregate %.

152 of 231 new or added lines in 53 files covered. (65.8%)

3 existing lines in 2 files now uncovered.

30827 of 52688 relevant lines covered (58.51%)

7412.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/Rdmp.Core/CommandExecution/AtomicCommands/ExecuteCommandSetFilterTreeShortcut.cs
1
// Copyright (c) The University of Dundee 2018-2019
2
// This file is part of the Research Data Management Platform (RDMP).
3
// RDMP is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
4
// RDMP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
5
// You should have received a copy of the GNU General Public License along with RDMP. If not, see <https://www.gnu.org/licenses/>.
6

7
using System.Linq;
8
using Rdmp.Core.Curation.Data;
9
using Rdmp.Core.Curation.Data.Aggregation;
10
using Rdmp.Core.Repositories.Construction;
11

12
namespace Rdmp.Core.CommandExecution.AtomicCommands;
13

14
/// <summary>
15
/// Creates a reference in one <see cref="AggregateConfiguration"/> pointing to another informing it to use the WHERE filter logic of the other.  This allows you to maintain a single master copy of a given configuration and reference it from several places without creating duplicates.
16
/// </summary>
17
internal class ExecuteCommandSetFilterTreeShortcut : BasicCommandExecution
18
{
19
    private AggregateConfiguration _setOn { get; }
×
20

21
    private bool _promptChoice;
22

23
    private AggregateConfiguration _pointTo { get; }
×
24

25
    /// <summary>
26
    /// Constructor for interactive mode (ask what they want to set it to when the command is run)
27
    /// </summary>
28
    /// <param name="activator"></param>
29
    /// <param name="setOn"></param>
30
    public ExecuteCommandSetFilterTreeShortcut(IBasicActivateItems activator, AggregateConfiguration setOn) :
31
        base(activator)
×
32
    {
33
        _setOn = setOn;
×
34
        _promptChoice = true;
×
35

36
        if (_setOn.RootFilterContainer_ID != null)
×
NEW
37
            SetImpossible("Aggregate already has a root filter container");
×
38

39
        if (_setOn.Catalogue.IsApiCall())
×
40
            SetImpossible(ExecuteCommandAddNewFilterContainer.FiltersCannotBeAddedToApiCalls);
×
41
    }
×
42

43
    /// <summary>
44
    /// Constructor for setting a specific shortcut
45
    /// </summary>
46
    /// <param name="activator"></param>
47
    /// <param name="setOn"></param>
48
    /// <param name="pointTo"></param>
49
    [UseWithObjectConstructor]
50
    public ExecuteCommandSetFilterTreeShortcut(IBasicActivateItems activator,
51
        [DemandsInitialization(
52
            "An aggregate for whom you want to set the WHERE logic on (must not have any current filters/containers)")]
53
        AggregateConfiguration setOn,
54
        [DemandsInitialization(
55
            "The destination aggregate which contains a WHERE logic tree (containers and filters) that you want to copy.  Pass Null to clear")]
56
        AggregateConfiguration pointTo) : base(activator)
×
57
    {
58
        _setOn = setOn;
×
59
        _pointTo = pointTo;
×
60

61
        if (_setOn.RootFilterContainer_ID != null)
×
62
            SetImpossible($"{_setOn} already has a root filter container");
×
63

64
        if (_setOn.Catalogue.IsApiCall())
×
65
            SetImpossible(ExecuteCommandAddNewFilterContainer.FiltersCannotBeAddedToApiCalls);
×
66

67
        if (_pointTo is { RootFilterContainer_ID: null })
×
68
            SetImpossible($"{_pointTo} does not have a filter container tree to link to");
×
69

70
        if (_pointTo == null && setOn.OverrideFiltersByUsingParentAggregateConfigurationInstead_ID == null)
×
71
            SetImpossible($"{_pointTo} does not have a shortcut to clear");
×
72
    }
×
73

74
    public override void Execute()
75
    {
76
        base.Execute();
×
77

78
        var pointTo = _pointTo;
×
79

80
        if (_promptChoice && pointTo == null)
×
81
        {
82
            var available = _setOn.Repository.GetAllObjects<AggregateConfiguration>().Where(a =>
×
83
                    //which are not themselves already shortcuts!
×
84
                    a.OverrideFiltersByUsingParentAggregateConfigurationInstead_ID == null
×
85
                    &&
×
86
                    //and which have a filter set!
×
87
                    a.RootFilterContainer_ID != null)
×
88
                //and are not ourself!
×
89
                .Except(new[] { _setOn }).ToArray();
×
90

91

92
            if (!available.Any())
×
93
            {
94
                BasicActivator.Show("There are no other AggregateConfigurations with filter trees you could reference");
×
95
                return;
×
96
            }
97

98
            pointTo = (AggregateConfiguration)BasicActivator.SelectOne("Target", available, null, false);
×
99

100
            // Looks like they didn't make a choice
101
            if (pointTo == null)
×
102
                return;
×
103
        }
104

105
        _setOn.OverrideFiltersByUsingParentAggregateConfigurationInstead_ID = pointTo?.ID;
×
106
        _setOn.SaveToDatabase();
×
107
        Publish(_setOn);
×
108
    }
×
109
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc