Esempio n. 1
0
        /// <summary>
        /// Executes the <see cref="CreateSubscriptionCommand"/>
        /// </summary>
        private async Task ExecuteCreateSubscriptionCommand()
        {
            if (this.SelectedThing == null)
            {
                return;
            }

            var parameterOrOverrideRow = this.SelectedThing as ParameterOrOverrideBaseRowViewModel;

            if (parameterOrOverrideRow == null)
            {
                return;
            }

            Tuple <DomainOfExpertise, Participant> tuple;

            this.Session.OpenIterations.TryGetValue(this.Thing.GetContainerOfType <Iteration>(), out tuple);

            var subscription = new ParameterSubscription
            {
                Owner = tuple.Item1
            };

            var transactionContext = TransactionContextResolver.ResolveContext(this.Thing);
            var transaction        = new ThingTransaction(transactionContext);

            var clone = parameterOrOverrideRow.Thing.Clone(false);

            transaction.Create(subscription);
            transaction.CreateOrUpdate(clone);
            clone.ParameterSubscription.Add(subscription);

            await this.DalWrite(transaction);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ParameterSubscriptionDialogViewModel" /> class
 /// </summary>
 /// <param name="parameterSubscription">
 /// The parameterSubscription.
 /// </param>
 /// <param name="transaction">
 /// The <see cref="ThingTransaction" /> that contains the log of recorded changes.
 /// </param>
 /// <param name="session">
 /// The <see cref="ISession" /> in which the current <see cref="Thing" /> is to be added or updated
 /// </param>
 /// <param name="isRoot">
 /// Assert if this <see cref="DialogViewModelBase{T}" /> is the root of all <see cref="DialogViewModelBase{T}" />
 /// </param>
 /// <param name="dialogKind">
 /// The kind of operation this <see cref="DialogViewModelBase{T}" /> performs
 /// </param>
 /// <param name="thingDialogNavigationService">
 /// The <see cref="IThingDialogNavigationService" /> that is used to navigate to a dialog of a specific
 /// <see cref="Thing" />.
 /// </param>
 /// <param name="container">
 /// The Container <see cref="Thing" /> of the created <see cref="MultiRelationshipRule" />
 /// </param>
 /// <param name="chainOfContainers">
 /// The optional chain of containers that contains the <paramref name="container" /> argument
 /// </param>
 public ParameterSubscriptionDialogViewModel(ParameterSubscription parameterSubscription, IThingTransaction transaction, ISession session, bool isRoot, ThingDialogKind dialogKind, IThingDialogNavigationService thingDialogNavigationService, Thing container = null, IEnumerable <Thing> chainOfContainers = null)
     : base(parameterSubscription, transaction, session, isRoot, dialogKind, thingDialogNavigationService, container, chainOfContainers)
 {
     this.WhenAnyValue(vm => vm.DisplayedValueSet).Where(x => x != null).Subscribe(_ => this.LoadValueSetGrid());
     this.IsNameVisible = this.Thing.ParameterType is CompoundParameterType || this.Thing.IsOptionDependent || this.Thing.StateDependence != null;
     this.CheckValueValidation();
 }
Esempio n. 3
0
        public void VerifyThatParameterSubscriptionHasRightOwnerValue()
        {
            this.parameter5Subscription = new ParameterSubscription(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                Owner = this.activeDomain
            };
            this.parameter5ForSubscription.ParameterSubscription.Add(this.parameter5Subscription);

            var valueSet = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri);

            this.SetScalarValueSet(valueSet);

            var valueSetSub = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri);

            valueSetSub.SubscribedValueSet = valueSet;

            this.parameter5Subscription.ValueSet.Add(valueSetSub);

            var row = new ParameterSubscriptionRowViewModel(this.parameter5Subscription, this.session.Object, null, false);

            Assert.AreEqual(0, row.ContainedRows.Count);
            Assert.AreEqual("PTName", row.Name);
            Assert.AreEqual("[other]", row.OwnerName);
            Assert.AreEqual("formula", row.Formula);
            Assert.AreEqual("ref", row.Reference);
            Assert.That(row.ScaleName, Is.Null.Or.Empty);
        }
        public void CheckThatMultipleSubscriptionCannotBeCreatedForSameOwner()
        {
            var subOwnerGuid = Guid.NewGuid();
            var existingSub  = new ParameterSubscription(Guid.NewGuid(), 1)
            {
                Owner = subOwnerGuid
            };
            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), 1)
            {
                Owner = subOwnerGuid
            };

            var parameter = new Parameter(Guid.NewGuid(), 1)
            {
                Owner = Guid.NewGuid()
            };

            parameter.ValueSet = new List <Guid> {
                Guid.NewGuid()
            };
            parameter.ParameterSubscription.Add(existingSub.Iid);

            this.parameterService
            .Setup(x => x.GetShallow(this.npgsqlTransaction, "partition", It.Is <IEnumerable <Guid> >(i => i.Single() == parameter.Iid), this.securityContext.Object))
            .Returns(new Thing[] { parameter });

            this.parameterSubscriptionService.Setup(x => x.GetShallow(this.npgsqlTransaction, "partition", It.Is <IEnumerable <Guid> >(y => y.Contains(existingSub.Iid)), this.securityContext.Object)).Returns(new List <Thing> {
                existingSub
            });

            Assert.IsFalse(this.sideEffect.BeforeCreate(parameterSubscription, parameter, this.npgsqlTransaction, "partition", this.securityContext.Object));
        }
        public void VerifySubscriptionsAreCreated()
        {
            var originalThing = this.parameterOverride.DeepClone <Thing>();

            this.parameterOverride.Owner = this.parameter.Owner;
            var subscription1 = new ParameterSubscription(Guid.NewGuid(), 0)
            {
                Owner = Guid.NewGuid()
            };
            var subscription2 = new ParameterSubscription(Guid.NewGuid(), 0)
            {
                Owner = Guid.NewGuid()
            };

            this.parameter.ParameterSubscription.Add(subscription1.Iid);
            this.parameter.ParameterSubscription.Add(subscription2.Iid);

            this.parameterSubscriptionService.Setup(x => x.GetShallow(null, It.IsAny <string>(), null, this.securityContext.Object)).Returns(new[] { subscription2, subscription1 });


            this.sideEffect.AfterCreate(this.parameterOverride, this.elementUsage, originalThing, this.npgsqlTransaction, "partition", this.securityContext.Object);


            this.parameterSubscriptionService.Verify(x => x.CreateConcept(null, It.IsAny <string>(), It.IsAny <ParameterSubscription>(), It.IsAny <ParameterOverride>(), It.IsAny <long>()), Times.Exactly(2));
            this.subscriptionValueSetService.Verify(x => x.CreateConcept(null, It.IsAny <string>(), It.IsAny <ParameterSubscriptionValueSet>(), It.IsAny <ParameterSubscription>(), It.IsAny <long>()), Times.Exactly(2));
        }
        public void VerifyThatWhenAParameterSubscriptionIsPostedValueSetsAreCreated()
        {
            this.parameterValueSetService
            .Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), "partition", It.IsAny <IEnumerable <Guid> >(), It.IsAny <ISecurityContext>()))
            .Returns(new[] { new ParameterValueSet(Guid.NewGuid(), 0)
                             {
                                 Manual = new ValueArray <string>(new[] { "1", "2" })
                             } });

            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), 1)
            {
                Owner = Guid.NewGuid()
            };
            var originalparameterSubscription = new ParameterSubscription(parameterSubscription.Iid, 1);

            var parameter = new Parameter(Guid.NewGuid(), 1)
            {
                Owner = Guid.NewGuid()
            };

            parameter.ValueSet = new List <Guid> {
                Guid.NewGuid()
            };

            this.parameterService
            .Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), "partition", It.Is <IEnumerable <Guid> >(enu => enu.Contains(parameter.Iid)), It.IsAny <ISecurityContext>()))
            .Returns(new[] { parameter });

            this.sideEffect.AfterCreate(parameterSubscription, parameter, originalparameterSubscription, this.npgsqlTransaction, "partition", this.securityContext.Object);

            this.parameterSubscriptionValueSetService.Verify(x => x.CreateConcept(this.npgsqlTransaction, "partition", It.Is <ParameterSubscriptionValueSet>(s => s.Manual.Count == 2), It.IsAny <ParameterSubscription>(), It.IsAny <long>()), Times.Once);
        }
Esempio n. 7
0
        public void VerifyThatInlineEditWorkSimpleNoOptionNoState()
        {
            this.subscription = new ParameterSubscription(Guid.NewGuid(), this.assembler.Cache, this.uri);
            this.parameter.IsOptionDependent = false;
            this.parameter.ParameterSubscription.Add(this.subscription);
            this.parameter.StateDependence = null;

            var set1 = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri);

            this.parameter.ValueSet.Add(set1);

            var subset1 = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                SubscribedValueSet = set1
            };

            this.subscription.ValueSet.Add(subset1);

            var row = new ParameterSubscriptionRowViewModel(this.subscription, this.session.Object, null, false);

            Assert.AreEqual(0, row.ContainedRows.Count);

            row.Switch = ParameterSwitchKind.REFERENCE;
            row.CreateCloneAndWrite(ParameterSwitchKind.REFERENCE, "Switch");

            this.session.Verify(x => x.Write(It.Is <OperationContainer>(op => ((CDP4Common.DTO.ParameterSubscriptionValueSet)op.Operations.Single().ModifiedThing).ValueSwitch == ParameterSwitchKind.REFERENCE)));
        }
Esempio n. 8
0
        public void VerifyThatUpdateValueSetUpdates(IViewModelBase <Thing> container, string scenario)
        {
            var valueset = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri);

            this.parameter.ValueSet.Add(valueset);

            this.subscription = new ParameterSubscription(Guid.NewGuid(), this.assembler.Cache, this.uri);
            this.parameter.ParameterSubscription.Add(subscription);

            var subscriptionValueSet = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                SubscribedValueSet = valueset
            };

            this.subscription.ValueSet.Add(subscriptionValueSet);

            var row = new ParameterSubscriptionRowViewModel(this.subscription, this.session.Object, container, false);

            var revInfo = typeof(Thing).GetProperty("RevisionNumber");

            revInfo.SetValue(subscriptionValueSet, 10);

            Assert.AreEqual("-", row.Manual);
            subscriptionValueSet.Manual = new ValueArray <string>(new List <string> {
                "test"
            });
            CDPMessageBus.Current.SendObjectChangeEvent(subscriptionValueSet, EventKind.Updated);

            Assert.AreEqual("test", row.Manual);
            row.Dispose();
        }
        public void VerifyOwnerChangedSideEffects()
        {
            var domain1 = new DomainOfExpertise(Guid.NewGuid(), 0);
            var domain2 = new DomainOfExpertise(Guid.NewGuid(), 0);

            var subscription = new ParameterSubscription(Guid.NewGuid(), 1)
            {
                Owner = domain2.Iid
            };

            this.parameterOverride.ParameterSubscription.Add(subscription.Iid);
            this.parameterOverride.Owner = domain1.Iid;

            var originalThing = this.parameterOverride.DeepClone <Thing>();

            this.parameterOverride.Owner = domain2.Iid;

            this.parameterSubscriptionService.
            Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.Is <IEnumerable <Guid> >(y => y.Contains(subscription.Iid)), this.securityContext.Object)).
            Returns(new[] { subscription });
            this.parameterSubscriptionService.
            Setup(x => x.DeleteConcept(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <ParameterSubscription>(), It.IsAny <ParameterOverride>())).Returns(true);

            this.sideEffect.AfterUpdate(this.parameterOverride, this.elementUsage, originalThing, this.npgsqlTransaction, "partition", this.securityContext.Object);

            this.parameterSubscriptionService.Verify(x => x.DeleteConcept(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <ParameterSubscription>(), It.IsAny <ParameterOverride>()));
        }
Esempio n. 10
0
        /// <summary>
        /// Add the listener associated to the <see cref="ParameterSubscription" />
        /// </summary>
        /// <param name="parameterSubscription">The <see cref="ParameterSubscription" /></param>
        private void AddParameterSubscriptionListener(ParameterSubscription parameterSubscription)
        {
            if (this.ParameterBaseListener.ContainsKey(parameterSubscription))
            {
                return;
            }

            Func <ObjectChangedEvent, bool> discriminator = objectChange => objectChange.ChangedThing.RevisionNumber > this.RevisionNumber;
            Action <ObjectChangedEvent>     action        = x => this.PopulateParameters();

            if (this.AllowMessageBusSubscriptions)
            {
                var listener = CDPMessageBus.Current.Listen <ObjectChangedEvent>(parameterSubscription)
                               .Where(discriminator)
                               .ObserveOn(RxApp.MainThreadScheduler)
                               .Subscribe(action);

                this.ParameterBaseListener.Add(parameterSubscription, listener);
            }
            else
            {
                var parameterOrOverrideObserver = CDPMessageBus.Current.Listen <ObjectChangedEvent>(typeof(ParameterSubscription));
                this.ParameterBaseListener.Add(parameterSubscription,
                                               this.MessageBusHandler.GetHandler <ObjectChangedEvent>().RegisterEventHandler(parameterOrOverrideObserver, new ObjectChangedMessageBusEventHandlerSubscription(parameterSubscription, discriminator, action)));
            }
        }
        public void VerifyOwnerChangedSideEffects()
        {
            this.parameter.ParameterType = this.boolPt.Iid;
            var domain1       = new DomainOfExpertise(Guid.NewGuid(), 0);
            var domain2       = new DomainOfExpertise(Guid.NewGuid(), 0);
            var originalThing = this.parameter.DeepClone <Thing>();

            this.parameter.Owner = domain1.Iid;

            var updatedParameter = new Parameter(this.parameter.Iid, 0)
            {
                ParameterType = this.boolPt.Iid, Owner = domain2.Iid, AllowDifferentOwnerOfOverride = true
            };
            var parameterOverride1 = new ParameterOverride(Guid.NewGuid(), 0)
            {
                Parameter = updatedParameter.Iid, Owner = domain2.Iid
            };
            var domain2Subscription = new ParameterSubscription(Guid.NewGuid(), 0)
            {
                Owner = domain2.Iid
            };

            updatedParameter.ParameterSubscription.Add(domain2Subscription.Iid);
            parameterOverride1.ParameterSubscription.Add(domain2Subscription.Iid);

            this.parameterSubscriptionService.Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <IEnumerable <Guid> >(), this.securityContext.Object))
            .Returns(new List <Thing> {
                domain2Subscription
            });

            this.parameterSubscriptionService.Setup(x => x.DeleteConcept(It.IsAny <NpgsqlTransaction>(),
                                                                         It.IsAny <string>(), It.IsAny <Thing>(), It.IsAny <Thing>())).Returns(true);

            this.sideEffect.AfterUpdate(updatedParameter, this.elementDefinition, originalThing, this.npgsqlTransaction, "partition", this.securityContext.Object);

            // Check that the subscription owned by domain2 is deleted since domain2 is now the owner of the parameter
            this.parameterSubscriptionService.Verify(x => x.DeleteConcept(this.npgsqlTransaction, "partition", It.IsAny <ParameterSubscription>(), It.IsAny <Parameter>()),
                                                     Times.Once);

            // Since that is the only subscription, no updates are performed on ParameterSubscriptionValueSet
            this.parameterSubscriptionValueSetService.Verify(x => x.CreateConcept(this.npgsqlTransaction, "partition", It.IsAny <ParameterSubscriptionValueSet>(), It.IsAny <ParameterSubscription>(), -1),
                                                             Times.Never);

            // Check that since AllowDifferentOwnerOfOverride is True the owner of the parameterOverrides are not updated
            this.parameterOverrideService.Verify(x => x.UpdateConcept(this.npgsqlTransaction, "partition", It.IsAny <ParameterOverride>(), It.IsAny <ElementUsage>()),
                                                 Times.Never);

            var updatedParameter1 = new Parameter(this.parameter.Iid, 0)
            {
                ParameterType = this.boolPt.Iid, Owner = domain2.Iid, AllowDifferentOwnerOfOverride = false
            };

            updatedParameter1.ParameterSubscription.Add(domain2Subscription.Iid);
            this.sideEffect.AfterUpdate(updatedParameter1, this.elementDefinition, originalThing, this.npgsqlTransaction, "partition", this.securityContext.Object);

            // Check that since AllowDifferentOwnerOfOverride is False the owner of the parameterOverride is updated
            this.parameterOverrideService.Verify(x => x.UpdateConcept(this.npgsqlTransaction, "partition", It.IsAny <ParameterOverride>(), It.IsAny <ElementUsage>()),
                                                 Times.Once);
        }
        public void VerifyThatParameterSubscriptionReturnsValueSets()
        {
            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), 1);

            parameterSubscription.ValueSet.AddRange(this.valuesets);

            CollectionAssert.AreEqual(this.valuesets, parameterSubscription.ValueSets);
        }
        public void VerifyThatNestedParameterExcelRowPropertiesAreSetForParameterSubscription()
        {
            var parameter = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                ParameterType = this.length,
                Scale         = this.meter,
                Owner         = this.systemEngineering
            };

            var parameterValueSet = new ParameterValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "A"
                }),
                Computed = new ValueArray <string>(new List <string> {
                    "B"
                }),
                Formula = new ValueArray <string>(new List <string> {
                    "C"
                }),
                ValueSwitch = ParameterSwitchKind.MANUAL
            };

            parameter.ValueSet.Add(parameterValueSet);
            this.satellite.Parameter.Add(parameter);

            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), this.cache, this.uri)
            {
                Owner = this.powerEngineering
            };

            var parameterSubscriptionValueSet = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.cache, this.uri)
            {
                Manual = new ValueArray <string>(new List <string> {
                    "AA"
                }),
                ValueSwitch        = ParameterSwitchKind.MANUAL,
                SubscribedValueSet = parameterValueSet
            };

            parameterSubscription.ValueSet.Add(parameterSubscriptionValueSet);
            parameter.ParameterSubscription.Add(parameterSubscription);

            var nestedElementTreeGenerator = new NestedElementTreeGenerator();
            var nestedElements             = nestedElementTreeGenerator.Generate(this.option, this.powerEngineering);

            var rootnode        = nestedElements.Single(ne => ne.ShortName == "SAT");
            var nestedparameter = rootnode.NestedParameter.Single();

            var excelRow = new NestedParameterExcelRow(nestedparameter);

            Assert.AreEqual("=SAT.l", excelRow.ActualValue);
            Assert.AreEqual("SAT\\l\\option1\\", excelRow.ModelCode);
            Assert.AreEqual("Length", excelRow.Name);
            Assert.AreEqual("PWR [SYS]", excelRow.Owner);
            Assert.AreEqual("l [m]", excelRow.ParameterTypeShortName);
            Assert.AreEqual("NPS", excelRow.Type);
        }
Esempio n. 14
0
        public void TestException()
        {
            this.parameterSubscription = new ParameterSubscription();

            Assert.Throws <ContainmentException>(() =>
            {
                Console.WriteLine(this.parameterSubscription.ParameterType);
            });
        }
Esempio n. 15
0
        /// <summary>
        /// Remove the listener associated to the <see cref="ParameterSubscription"/>
        /// </summary>
        /// <param name="parameterSubscription">The <see cref="ParameterSubscription"/></param>
        private void RemoveParameterSubscriptionListener(ParameterSubscription parameterSubscription)
        {
            IDisposable disposable;

            if (this.ParameterBaseListener.TryGetValue(parameterSubscription, out disposable))
            {
                disposable.Dispose();
                this.ParameterBaseListener.Remove(parameterSubscription);
            }
        }
        /// <summary>
        /// Create <see cref="ParameterSubscription"/> for this <paramref name="parameterOverride"/> from its <see cref="Parameter"/>
        /// </summary>
        /// <param name="transaction">The current transaction</param>
        /// <param name="partition">The current partition</param>
        /// <param name="parameterOverride">The <see cref="ParameterOverride"/></param>
        /// <param name="securityContext">The <see cref="ISecurityContext"/></param>
        /// <param name="overrideValueset">The <see cref="ParameterOverrideValueSet"/> to subscribe on</param>
        private void CreateSubscriptionFromParameter(NpgsqlTransaction transaction, string partition, ParameterOverride parameterOverride, ISecurityContext securityContext, IReadOnlyList <ParameterOverrideValueSet> overrideValueset)
        {
            var parameters = this.ParameterService.GetShallow(transaction, partition, new[] { parameterOverride.Parameter }, securityContext).OfType <Parameter>().ToArray();

            if (parameters.Length != 1)
            {
                throw new InvalidOperationException("None or more than one parameters were returned");
            }

            var parameter = parameters.Single();

            var existingSubscriptions = this.ParameterSubscriptionService
                                        .GetShallow(transaction, partition, null, securityContext)
                                        .OfType <ParameterSubscription>()
                                        .ToList();

            var parameterSubscriptions = existingSubscriptions.Where(x => parameter.ParameterSubscription.Contains(x.Iid)).ToList();

            this.DefaultValueArrayFactory.Load(transaction, securityContext);
            var defaultArray = this.DefaultValueArrayFactory.CreateDefaultValueArray(parameter.ParameterType);

            var existingOverrideSubscriptions = existingSubscriptions.Where(x => parameterOverride.ParameterSubscription.Contains(x.Iid)).ToList();

            var subscriptionValueSets =
                this.ParameterSubscriptionValueSetService
                .GetShallow(transaction, partition, parameterSubscriptions.SelectMany(x => x.ValueSet), securityContext)
                .OfType <ParameterSubscriptionValueSet>()
                .ToList();

            foreach (var parameterSubscription in parameterSubscriptions)
            {
                if (parameterSubscription.Owner == parameterOverride.Owner || existingOverrideSubscriptions.Any(x => x.Owner == parameterSubscription.Owner))
                {
                    continue;
                }

                var newSubscription = new ParameterSubscription(Guid.NewGuid(), 0)
                {
                    Owner = parameterSubscription.Owner
                };
                this.ParameterSubscriptionService.CreateConcept(transaction, partition, newSubscription, parameterOverride);

                foreach (var parameterOverrideValueSet in overrideValueset)
                {
                    var subscriptionValueset =
                        this.ParameterSubscriptionValueSetFactory.CreateWithOldValues(
                            subscriptionValueSets.FirstOrDefault(x => x.SubscribedValueSet == parameterOverrideValueSet.ParameterValueSet),
                            parameterOverrideValueSet.Iid,
                            defaultArray);

                    this.ParameterSubscriptionValueSetService.CreateConcept(transaction, partition, subscriptionValueset, newSubscription);
                }
            }
        }
        public void VerifyThatAfterUpdateUpdateTheOVerrideAndSubscription()
        {
            var subscription1 = new ParameterSubscription(Guid.NewGuid(), 1);
            var subscription2 = new ParameterSubscription(Guid.NewGuid(), 2);
            var originalThing = this.parameter.DeepClone <Thing>();

            this.parameterOverride.ParameterSubscription.Add(subscription2.Iid);
            this.parameter.ParameterSubscription.Add(subscription1.Iid);

            this.parameterOverrideService.Setup(
                x => x.GetShallow(this.npgsqlTransaction, "partition", null, this.securityContext.Object))
            .Returns(new List <Thing> {
                this.parameterOverride
            });

            this.parameterSubscriptionService.Setup(x =>
                                                    x.GetShallow(this.npgsqlTransaction, "partition",
                                                                 It.Is <IEnumerable <Guid> >(g => g.Contains(subscription1.Iid) && g.Contains(subscription2.Iid)),
                                                                 this.securityContext.Object))
            .Returns(new List <Thing> {
                subscription1, subscription2
            });

            this.valueSetService.Setup(x => x.DeleteConcept(null, "partition", It.IsAny <ParameterValueSet>(), this.parameter))
            .Returns(true);

            this.parameter.ParameterType = this.cptParameterType.Iid;

            this.parameter.StateDependence = null;
            var valueset = new ParameterValueSet(Guid.NewGuid(), 0);

            this.parameter.ValueSet.Add(valueset.Iid);

            var updatedParameter = new Parameter(this.parameter.Iid, 0)
            {
                StateDependence = this.actualList.Iid
            };

            updatedParameter.ValueSet.Add(valueset.Iid);
            updatedParameter.ParameterType = this.cptParameterType.Iid;
            updatedParameter.ParameterSubscription.Add(subscription1.Iid);

            this.sideEffect.AfterUpdate(updatedParameter, this.elementDefinition, originalThing, this.npgsqlTransaction, "partition", this.securityContext.Object);

            this.parameterOverrideValueSetService.Verify(x => x.CreateConcept(this.npgsqlTransaction, "partition", It.IsAny <ParameterOverrideValueSet>(), this.parameterOverride, -1),
                                                         Times.Exactly(2));

            this.parameterSubscriptionValueSetService.Verify(x => x.CreateConcept(this.npgsqlTransaction, "partition", It.IsAny <ParameterSubscriptionValueSet>(), subscription1, -1),
                                                             Times.Exactly(2));

            this.parameterSubscriptionValueSetService.Verify(x => x.CreateConcept(this.npgsqlTransaction, "partition", It.IsAny <ParameterSubscriptionValueSet>(), subscription2, -1),
                                                             Times.Exactly(2));
        }
Esempio n. 18
0
        public void VerifyThatValueSetInlineEditWorksCompoundOptionState()
        {
            this.subscription = new ParameterSubscription(Guid.NewGuid(), this.assembler.Cache, this.uri);
            this.cptParameter.ParameterSubscription.Add(subscription);

            this.subscription.ValueSet.Add(new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                SubscribedValueSet = this.valueset1
            });
            this.subscription.ValueSet.Add(new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                SubscribedValueSet = this.valueset2
            });
            this.subscription.ValueSet.Add(new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                SubscribedValueSet = this.valueset3
            });
            this.subscription.ValueSet.Add(new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                SubscribedValueSet = this.valueset4
            });

            var row        = new ParameterSubscriptionRowViewModel(this.subscription, this.session.Object, null, false);
            var option1Row =
                row.ContainedRows.OfType <ParameterOptionRowViewModel>().Single(x => x.ActualOption == this.option1);

            var option2Row =
                row.ContainedRows.OfType <ParameterOptionRowViewModel>().Single(x => x.ActualOption == this.option2);

            var o1s1Row = option1Row.ContainedRows.OfType <ParameterStateRowViewModel>()
                          .Single(x => x.ActualState == this.actualState1);
            var o1s2Row = option1Row.ContainedRows.OfType <ParameterStateRowViewModel>()
                          .Single(x => x.ActualState == this.actualState2);
            var o2s1Row = option2Row.ContainedRows.OfType <ParameterStateRowViewModel>()
                          .Single(x => x.ActualState == this.actualState1);
            var o2s2Row = option2Row.ContainedRows.OfType <ParameterStateRowViewModel>()
                          .Single(x => x.ActualState == this.actualState2);

            var o1s1c1Row = o1s1Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().First();
            var o1s1c2Row = o1s1Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().Last();
            var o1s2c1Row = o1s2Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().First();
            var o1s2c2Row = o1s2Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().Last();
            var o2s1c1Row = o2s1Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().First();
            var o2s1c2Row = o2s1Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().Last();
            var o2s2c1Row = o2s2Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().First();
            var o2s2c2Row = o2s2Row.ContainedRows.OfType <ParameterComponentValueRowViewModel>().Last();

            o1s1c1Row.Switch = ParameterSwitchKind.REFERENCE;
            o1s1c1Row.CreateCloneAndWrite(ParameterSwitchKind.REFERENCE, "Switch");

            this.session.Verify(x => x.Write(It.Is <OperationContainer>(op => ((CDP4Common.DTO.ParameterSubscriptionValueSet)op.Operations.Single().ModifiedThing).ValueSwitch == ParameterSwitchKind.REFERENCE)));
        }
        /// <summary>
        /// Update the <see cref="ThingTransaction"/> with new <see cref="ParameterSubscription"/>s
        /// </summary>
        /// <param name="transaction">
        ///  The subject <see cref="IThingTransaction"/> that is to be updated
        /// </param>
        /// <param name="owner">
        /// The <see cref="DomainOfExpertise"/> that is be the owner of the created <see cref="ParameterSubscription"/>s and should therefore
        /// not be the owner of the <see cref="Parameter"/>s or <see cref="ParameterOverride"/>s that are subscribed to
        /// </param>
        /// <param name="parameterOrOverrides">
        /// An <see cref="Action{IThingTransaction, ParameterOrOverrideBase, ParameterSubscription}"/> for which new <see cref="ParameterSubscription"/>s will be created.
        /// </param>
        private void UpdateTransactionWithParameterSubscriptions(IThingTransaction transaction, DomainOfExpertise owner, IEnumerable <ParameterOrOverrideBase> parameterOrOverrides, Action <IThingTransaction, ParameterOrOverrideBase, ParameterSubscription> updateAction)
        {
            foreach (var parameterOrOverride in parameterOrOverrides)
            {
                var subscription = new ParameterSubscription
                {
                    Owner = owner
                };

                var clone = parameterOrOverride.Clone(false);
                updateAction(transaction, clone, subscription);
            }
        }
Esempio n. 20
0
        public void VerifyThatConverReturnsExpectedResuly()
        {
            object result;

            result = this.dataTypeConverter.Convert(null, null, null, null);
            Assert.IsNull(result);

            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), null, null);

            result = this.dataTypeConverter.Convert(parameterSubscription, null, null, null);

            Assert.AreEqual(typeof(ParameterSubscription), result);
        }
Esempio n. 21
0
        public void Setup()
        {
            this.booleanParameterType = new BooleanParameterType(Guid.NewGuid(), null, null)
            {
                ShortName = "bool"
            };

            this.elementDefinition1 = new ElementDefinition(Guid.NewGuid(), null, null)
            {
                ShortName = "Sat"
            };
            this.elementDefinition2 = new ElementDefinition(Guid.NewGuid(), null, null)
            {
                ShortName = "Bat"
            };
            this.elementUsage = new ElementUsage(Guid.NewGuid(), null, null)
            {
                ShortName         = "battery_1",
                ElementDefinition = this.elementDefinition2
            };
            this.elementDefinition1.ContainedElement.Add(this.elementUsage);
            this.parameter = new Parameter(Guid.NewGuid(), null, null);
            this.parameter.ParameterType = this.booleanParameterType;
            this.elementDefinition2.Parameter.Add(this.parameter);
            this.parameterOverride           = new ParameterOverride(Guid.NewGuid(), null, null);
            this.parameterOverride.Parameter = this.parameter;

            this.parameterSubscriptionValueSet   = new ParameterSubscriptionValueSet();
            this.parameterValueSetBase           = new ParameterValueSet();
            this.parameterValueSetBase.Published = new ValueArray <string>(new List <string> {
                "computed"
            });
            this.parameterValueSetBase.Computed = new ValueArray <string>(new List <string> {
                "computed"
            });
            this.parameterValueSetBase.Reference = new ValueArray <string>(new List <string> {
                "ref"
            });
            this.parameterValueSetBase.ActualState  = new ActualFiniteState();
            this.parameterValueSetBase.ActualOption = new Option();

            this.parameterSubscriptionValueSet.SubscribedValueSet = this.parameterValueSetBase;
            this.parameterSubscriptionValueSet.Manual             = new ValueArray <string>(new List <string> {
                "manual"
            });

            this.parameterSubscription = new ParameterSubscription();
            this.parameterSubscription.ValueSet.Add(this.parameterSubscriptionValueSet);
            this.parameterSubscription.Owner = new DomainOfExpertise();
        }
Esempio n. 22
0
        /// <summary>
        /// Add the listener associated to the <see cref="ParameterSubscription"/>
        /// </summary>
        /// <param name="parameterSubscription">The <see cref="ParameterSubscription"/></param>
        private void AddParameterSubscriptionListener(ParameterSubscription parameterSubscription)
        {
            if (this.ParameterBaseListener.ContainsKey(parameterSubscription))
            {
                return;
            }

            var listener = CDPMessageBus.Current.Listen <ObjectChangedEvent>(parameterSubscription)
                           .Where(objectChange => objectChange.ChangedThing.RevisionNumber > this.RevisionNumber)
                           .ObserveOn(RxApp.MainThreadScheduler)
                           .Subscribe(_ => this.PopulateParameters());

            this.ParameterBaseListener.Add(parameterSubscription, listener);
        }
Esempio n. 23
0
        private void SetValueSet(ParameterSubscription subscription, ParameterOrOverrideBase param, IReadOnlyList <string> values)
        {
            var i = 0;

            foreach (var parameterValueSet in param.ValueSets)
            {
                var valueset = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.cache, this.uri)
                {
                    SubscribedValueSet = (ParameterValueSetBase)parameterValueSet
                };
                this.SetValueSet(valueset, values[i]);
                subscription.ValueSet.Add(valueset);
                i++;
            }
        }
        /// <summary>
        /// Serialize the <see cref="ParameterSubscription"/>
        /// </summary>
        /// <param name="parameterSubscription">The <see cref="ParameterSubscription"/> to serialize</param>
        /// <returns>The <see cref="JObject"/></returns>
        private JObject Serialize(ParameterSubscription parameterSubscription)
        {
            var jsonObject = new JObject();

            jsonObject.Add("classKind", this.PropertySerializerMap["classKind"](Enum.GetName(typeof(CDP4Common.CommonData.ClassKind), parameterSubscription.ClassKind)));
            jsonObject.Add("excludedDomain", this.PropertySerializerMap["excludedDomain"](parameterSubscription.ExcludedDomain.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("excludedPerson", this.PropertySerializerMap["excludedPerson"](parameterSubscription.ExcludedPerson.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("iid", this.PropertySerializerMap["iid"](parameterSubscription.Iid));
            jsonObject.Add("modifiedOn", this.PropertySerializerMap["modifiedOn"](parameterSubscription.ModifiedOn));
            jsonObject.Add("owner", this.PropertySerializerMap["owner"](parameterSubscription.Owner));
            jsonObject.Add("revisionNumber", this.PropertySerializerMap["revisionNumber"](parameterSubscription.RevisionNumber));
            jsonObject.Add("thingPreference", this.PropertySerializerMap["thingPreference"](parameterSubscription.ThingPreference));
            jsonObject.Add("valueSet", this.PropertySerializerMap["valueSet"](parameterSubscription.ValueSet.OrderBy(x => x, this.guidComparer)));
            return(jsonObject);
        }
Esempio n. 25
0
        public void VerifyThatParameterSubscriptionModelCodeReturnsExpectedResult()
        {
            var parameterValueSet = new ParameterValueSet();

            this.parameter.ValueSet.Add(parameterValueSet);

            var subscription         = new ParameterSubscription();
            var subscriptionValueSet = new ParameterSubscriptionValueSet();

            subscription.ValueSet.Add(subscriptionValueSet);

            subscriptionValueSet.SubscribedValueSet = parameterValueSet;

            this.parameter.ParameterSubscription.Add(subscription);

            Assert.AreEqual(@"Bat.bool", subscriptionValueSet.ModelCode(0));
        }
        public void Setup()
        {
            this.BuildSiteDirData();
            this.BuildModelData();

            this.map              = new Dictionary <Thing, Thing>();
            this.def2Copy         = new ElementDefinition(Guid.NewGuid(), null, null);
            this.parameter1Copy   = new Parameter(Guid.NewGuid(), null, null);
            this.subscriptionCopy = new ParameterSubscription(Guid.NewGuid(), null, null);

            this.def2Copy.Parameter.Add(this.parameter1Copy);
            this.parameter1Copy.ParameterSubscription.Add(this.subscriptionCopy);

            this.map.Add(this.def2, this.def2Copy);
            this.map.Add(this.parameter1, this.parameter1Copy);
            this.map.Add(this.subscription1, this.subscriptionCopy);
        }
        public void SetUp()
        {
            this.uri   = new Uri("http://www.rheagroup.com");
            this.cache = new ConcurrentDictionary <CDP4Common.Types.CacheKey, Lazy <Thing> >();

            this.siteReferenceDataLibrary = new SiteReferenceDataLibrary(Guid.NewGuid(), this.cache, this.uri);

            this.systemEngineering  = new DomainOfExpertise(Guid.NewGuid(), this.cache, this.uri);
            this.powerEngineering   = new DomainOfExpertise(Guid.NewGuid(), this.cache, this.uri);
            this.simpleQuantityKind = new SimpleQuantityKind(Guid.NewGuid(), this.cache, this.uri);
            this.equipments         = new Category(Guid.NewGuid(), this.cache, this.uri)
            {
                ShortName = "EQT", Name = "Equipments"
            };

            this.siteReferenceDataLibrary.DefinedCategory.Add(this.equipments);

            var engineeringModel = new EngineeringModel(Guid.NewGuid(), this.cache, this.uri);

            this.iteration = new Iteration(Guid.NewGuid(), this.cache, this.uri);
            engineeringModel.Iteration.Add(this.iteration);
            var elementDefinition = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri)
            {
                Owner = this.powerEngineering
            };

            elementDefinition.Category.Add(this.equipments);
            this.iteration.Element.Add(elementDefinition);
            var parameter = new Parameter(Guid.NewGuid(), this.cache, this.uri)
            {
                Owner = this.powerEngineering, ParameterType = this.simpleQuantityKind
            };

            elementDefinition.Parameter.Add(parameter);
            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), this.cache, this.uri)
            {
                Owner = this.systemEngineering
            };

            parameter.ParameterSubscription.Add(parameterSubscription);

            this.session = new Mock <ISession>();
            this.session.Setup(x => x.QuerySelectedDomainOfExpertise(this.iteration)).Returns(this.systemEngineering);

            this.parameterSubscriptionBatchService = new ParameterSubscriptionBatchService();
        }
Esempio n. 28
0
        public void VerifyThatParameterBaseValueSetWorks()
        {
            var parameter    = new Parameter();
            var poverride    = new ParameterOverride();
            var subscription = new ParameterSubscription();

            var parameterValueSet    = new ParameterValueSet();
            var overrideValueset     = new ParameterOverrideValueSet();
            var subscriptionValueset = new ParameterSubscriptionValueSet();

            parameter.ValueSet.Add(parameterValueSet);
            poverride.ValueSet.Add(overrideValueset);
            subscription.ValueSet.Add(subscriptionValueset);

            Assert.AreSame(parameter.ValueSet, parameter.ValueSets);
            Assert.AreSame(poverride.ValueSet, poverride.ValueSets);
            Assert.AreSame(subscription.ValueSet, subscription.ValueSets);
        }
Esempio n. 29
0
        public void VerifyThatComputedAndReferenceValueAreUpdated(IViewModelBase <Thing> container, string scenario)
        {
            this.subscription = new ParameterSubscription(Guid.NewGuid(), this.assembler.Cache, this.uri);
            this.parameter.IsOptionDependent = false;
            this.parameter.ParameterSubscription.Add(this.subscription);
            this.parameter.StateDependence = null;

            var set1       = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri);
            var liststring = new List <string> {
                "abc"
            };

            set1.Reference = new ValueArray <string>(liststring);
            set1.Published = new ValueArray <string>(liststring);

            this.parameter.ValueSet.Add(set1);

            var subset1 = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri)
            {
                SubscribedValueSet = set1
            };

            this.subscription.ValueSet.Add(subset1);

            var row = new ParameterSubscriptionRowViewModel(this.subscription, this.session.Object, container, false);

            Assert.AreEqual("abc", row.Computed);
            Assert.AreEqual("abc", row.Reference);

            var updated = new List <string> {
                "123"
            };

            set1.Published = new ValueArray <string>(updated);
            set1.Reference = new ValueArray <string>(updated);

            var rev = typeof(Thing).GetProperty("RevisionNumber");

            rev.SetValue(set1, 50);

            CDPMessageBus.Current.SendObjectChangeEvent(set1, EventKind.Updated);
            Assert.AreEqual("123", row.Computed);
            Assert.AreEqual("123", row.Reference);
        }
Esempio n. 30
0
        public void VerifyThatTheWhenOwnerOfTheParameterAndSubscriptionAreEqualExceptionIsThrown()
        {
            var owner = Guid.NewGuid();
            var parameterSubscription = new ParameterSubscription(Guid.NewGuid(), 1)
            {
                Owner = owner
            };

            var parameter = new Parameter(Guid.NewGuid(), 1)
            {
                Owner = owner
            };

            parameter.ValueSet.Add(Guid.NewGuid());

            Assert.Throws <Cdp4ModelValidationException>(() => this.sideEffect.BeforeCreate(parameterSubscription, parameter, this.npgsqlTransaction, "partition", this.securityContext.Object));

            Assert.Throws <Cdp4ModelValidationException>(() => this.sideEffect.BeforeUpdate(parameterSubscription, parameter, this.npgsqlTransaction, "partition", this.securityContext.Object, null));
        }