public void VerifyThatIfNonCategorizableThingsAreRelatedViolationsAreReturned()
        {
            var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri)
            {
                RelationshipCategory = this.lithiumBatteryCategory
            };

            rule.RelatedCategory.Add(this.lithiumBatteryCategory);

            var alias      = new Alias(Guid.NewGuid(), this.cache, this.uri);
            var definition = new Definition(Guid.NewGuid(), this.cache, this.uri);

            var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri);

            multiRelationship.Category.Add(this.lithiumBatteryCategory);

            multiRelationship.RelatedThing.Add(alias);
            multiRelationship.RelatedThing.Add(definition);
            this.iteration.Relationship.Add(multiRelationship);

            var violations = rule.Verify(this.iteration);

            Assert.AreEqual(2, violations.Count());

            var aliasViolation = violations.Single(v => v.ViolatingThing.Contains(alias.Iid));

            Assert.IsTrue(aliasViolation.Description.Contains("is not a CategorizableThing"));

            var definitionViolation = violations.Single(v => v.ViolatingThing.Contains(definition.Iid));

            Assert.IsTrue(definitionViolation.Description.Contains("is not a CategorizableThing"));
        }
Esempio n. 2
0
        public void VerifyDialogValidation()
        {
            var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri);
            var vm   = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object);

            Assert.IsFalse(vm.OkCanExecute);
        }
Esempio n. 3
0
        public void VerifyThatCategoriesFromExistingRdlsAreLoaded()
        {
            var siterefenceDataLibrary = new SiteReferenceDataLibrary(Guid.NewGuid(), null, null);
            var rule1 = new BinaryRelationshipRule(Guid.NewGuid(), null, null);
            var rule2 = new MultiRelationshipRule(Guid.NewGuid(), null, null);

            siterefenceDataLibrary.Rule.Add(rule1);
            siterefenceDataLibrary.Rule.Add(rule2);
            this.siteDir.SiteReferenceDataLibrary.Add(siterefenceDataLibrary);

            var engineeringModelSetup     = new EngineeringModelSetup(Guid.NewGuid(), null, null);
            var modelReferenceDataLibrary = new ModelReferenceDataLibrary(Guid.NewGuid(), null, null);
            var rule3 = new BinaryRelationshipRule(Guid.NewGuid(), null, null);
            var rule4 = new MultiRelationshipRule(Guid.NewGuid(), null, null);

            modelReferenceDataLibrary.Rule.Add(rule3);
            modelReferenceDataLibrary.Rule.Add(rule4);
            engineeringModelSetup.RequiredRdl.Add(modelReferenceDataLibrary);
            this.siteDir.Model.Add(engineeringModelSetup);
            this.session.Setup(x => x.OpenReferenceDataLibraries).Returns(new HashSet <ReferenceDataLibrary>(this.siteDir.SiteReferenceDataLibrary)
            {
                modelReferenceDataLibrary
            });

            var browser = new RulesBrowserViewModel(this.session.Object, this.siteDir, null, null, null, null);

            Assert.AreEqual(4, browser.Rules.Count);
        }
        public void VerifyThatIfNoMultiRelationshipsAreContainedByIterationNoViolationsAreReturned()
        {
            var rule       = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri);
            var violations = rule.Verify(this.iteration);

            Assert.IsEmpty(violations);
        }
Esempio n. 5
0
        public void VerifyThatContainerIsSetForRuleUpdate()
        {
            var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri);
            var vm   = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Create, this.dialogService.Object);

            Assert.AreEqual(2, vm.PossibleContainer.Count);
        }
Esempio n. 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MultiRelationshipRuleDialogViewModel"/> class.
 /// </summary>
 /// <param name="multiRelationshipRule">
 /// The <see cref="CDP4Common.SiteDirectoryData.MultiRelationshipRule"/> that is the subject of the current view-model. This is the object
 /// that will be either created, or edited.
 /// </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="CDP4Common.CommonData.Thing"/> is to be added or updated
 /// </param>
 /// <param name="isRoot">
 /// Assert if this <see cref="MultiRelationshipRuleDialogViewModel"/> is the root of all <see cref="IThingDialogViewModel"/>
 /// </param>
 /// <param name="dialogKind">
 /// The kind of operation this <see cref="MultiRelationshipRuleDialogViewModel"/> 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="CDP4Common.CommonData.Thing"/> of the created <see cref="CDP4Common.SiteDirectoryData.MultiRelationshipRule"/>
 /// </param>
 /// <param name="chainOfContainers">
 /// The optional chain of containers that contains the <paramref name="container"/> argument
 /// </param>
 public MultiRelationshipRuleDialogViewModel(MultiRelationshipRule multiRelationshipRule, IThingTransaction transaction, ISession session, bool isRoot, ThingDialogKind dialogKind, IThingDialogNavigationService thingDialogNavigationService, Thing container = null, IEnumerable <Thing> chainOfContainers = null)
     : base(multiRelationshipRule, transaction, session, isRoot, dialogKind, thingDialogNavigationService, container, chainOfContainers)
 {
     this.WhenAnyValue(vm => vm.Container).Subscribe(_ => this.RepopulatePossibleCategories());
     this.WhenAnyValue(vm => vm.Container).Subscribe(_ => this.UpdateOkCanExecute());
     this.WhenAnyValue(vm => vm.SelectedRelationshipCategory).Subscribe(_ => this.UpdateOkCanExecute());
     this.WhenAnyValue(vm => vm.RelatedCategory).Subscribe(_ => this.UpdateOkCanExecute());
 }
        public void SetUp()
        {
            this.multiRelationshipRule = new MultiRelationshipRule {
                Iid = Guid.Parse("3b9f431a-7a7c-4763-9818-7e3154c70910"), ShortName = "MULTIRULE"
            };
            this.siteReferenceDataLibrary = new SiteReferenceDataLibrary();
            this.siteReferenceDataLibrary.Rule.Add(this.multiRelationshipRule);

            this.multiRelationshipRuleRuleChecker = new MultiRelationshipRuleRuleChecker();
        }
Esempio n. 8
0
        public void VerifyThatContainerIsSetForRuleInspect()
        {
            var expectedContainers = new List <ReferenceDataLibrary>();

            expectedContainers.Add(this.siteRdl);

            var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri);

            this.siteRdl.Rule.Add(rule);

            var vm = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object, null);

            CollectionAssert.AreEquivalent(expectedContainers, vm.PossibleContainer);
        }
        public void VerifyThatIfRelationshipIsNotMemberOfCategoryNoViolationIsReturned()
        {
            var rule = new MultiRelationshipRule();

            rule.RelationshipCategory = this.equipmentCategory;

            var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri);

            this.iteration.Relationship.Add(multiRelationship);

            var violations = rule.Verify(this.iteration);

            Assert.IsEmpty(violations);
        }
        public void VerifyThatIfRelationshipCategoryIsNullNoViolationsAreReturned()
        {
            var rule = new MultiRelationshipRule();

            rule.RelationshipCategory = null;

            var binaryRelationship = new BinaryRelationship(Guid.NewGuid(), this.cache, this.uri);

            this.iteration.Relationship.Add(binaryRelationship);

            var violations = rule.Verify(this.iteration);

            Assert.IsEmpty(violations);
        }
        public void VerifyThatIfRuleIsNotViolatedNoViolationsAreReturned()
        {
            var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri)
            {
                RelationshipCategory = this.productCategory
            };

            rule.RelatedCategory.Add(this.productCategory);

            var battery = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri);

            battery.Category.Add(this.batteryCategory);
            this.iteration.Element.Add(battery);

            var cell = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri);

            cell.Category.Add(this.equipmentCategory);
            this.iteration.Element.Add(cell);

            var cellElementUsage = new ElementUsage(Guid.NewGuid(), this.cache, this.uri);

            cellElementUsage.ElementDefinition = cell;
            battery.ContainedElement.Add(cellElementUsage);

            var pcdu = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri);

            pcdu.Category.Add(this.equipmentCategory);
            this.iteration.Element.Add(pcdu);

            var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri);

            multiRelationship.Category.Add(this.productCategory);
            this.iteration.Relationship.Add(multiRelationship);

            multiRelationship.RelatedThing.Add(battery);
            multiRelationship.RelatedThing.Add(cellElementUsage);
            multiRelationship.RelatedThing.Add(pcdu);

            var violations = rule.Verify(this.iteration);

            CollectionAssert.IsEmpty(violations);
        }
Esempio n. 12
0
        public void VerifyThatSubscriptionsWork()
        {
            var viewmodel = new RelationshipEditorViewModel(this.iteration, this.participant, this.session.Object, this.thingDialogNavigationService.Object, this.panelNavigationService.Object, null, null);

            Assert.AreEqual(0, viewmodel.RelationshipRules.Count);

            var newBinaryRule = new BinaryRelationshipRule(Guid.NewGuid(), this.cache, this.uri);
            var newMultiRule  = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri);

            CDPMessageBus.Current.SendObjectChangeEvent(newBinaryRule, EventKind.Added);
            Assert.AreEqual(1, viewmodel.RelationshipRules.Count);

            CDPMessageBus.Current.SendObjectChangeEvent(newMultiRule, EventKind.Added);
            Assert.AreEqual(2, viewmodel.RelationshipRules.Count);

            CDPMessageBus.Current.SendObjectChangeEvent(newBinaryRule, EventKind.Removed);
            Assert.AreEqual(1, viewmodel.RelationshipRules.Count);

            CDPMessageBus.Current.SendObjectChangeEvent(newMultiRule, EventKind.Removed);
            Assert.AreEqual(0, viewmodel.RelationshipRules.Count);
        }
Esempio n. 13
0
        public void VerifyThatAllPropertiesArePopulated()
        {
            var shortname          = "shortname";
            var name               = "name";
            var minRelated         = 2;
            var maxRelated         = 3;
            var expectedCategories =
                this.siteRdl.DefinedCategory.Concat(this.genericSiteReferenceDataLibrary.DefinedCategory).ToList();

            var expectedRelatedCategories = new List <Category>();

            expectedRelatedCategories.Add(this.cat1);
            expectedRelatedCategories.Add(this.cat2);

            var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri);

            rule.ShortName = shortname;
            rule.Name      = name;
            this.siteRdl.Rule.Add(rule);
            rule.MinRelated           = minRelated;
            rule.MaxRelated           = maxRelated;
            rule.RelationshipCategory = this.cat;
            rule.RelatedCategory.Add(this.cat1);
            rule.RelatedCategory.Add(this.cat2);

            var vm = new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object);

            Assert.AreEqual(shortname, vm.ShortName);
            Assert.AreEqual(name, vm.Name);
            Assert.AreEqual(minRelated, vm.MinRelated);
            Assert.AreEqual(maxRelated, vm.MaxRelated);
            Assert.AreEqual(this.cat, vm.SelectedRelationshipCategory);

            CollectionAssert.AreEquivalent(expectedCategories, vm.PossibleRelatedCategory);
            CollectionAssert.AreEquivalent(expectedCategories, vm.PossibleRelationshipCategory);
            CollectionAssert.AreEquivalent(expectedRelatedCategories, vm.RelatedCategory);

            Assert.IsTrue(vm.OkCanExecute);
        }
        public void VerifyThatIfRelationshipViolatesRuleViolationIsReturned()
        {
            var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri)
            {
                RelationshipCategory = this.lithiumBatteryCategory
            };

            rule.RelatedCategory.Add(this.lithiumBatteryCategory);

            var battery = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri)
            {
                ShortName = "BAT",
                Name      = "Battery"
            };

            battery.Category.Add(this.batteryCategory);
            this.iteration.Element.Add(battery);

            var lithiumBattery = new ElementDefinition(Guid.NewGuid(), this.cache, this.uri)
            {
                ShortName = "LITBAT",
                Name      = "Lithium Battery"
            };

            lithiumBattery.Category.Add(this.lithiumBatteryCategory);
            this.iteration.Element.Add(lithiumBattery);

            var multiRelationship = new MultiRelationship(Guid.NewGuid(), this.cache, this.uri);

            multiRelationship.Category.Add(this.lithiumBatteryCategory);
            multiRelationship.RelatedThing.Add(battery);
            multiRelationship.RelatedThing.Add(lithiumBattery);
            this.iteration.Relationship.Add(multiRelationship);

            var violations = rule.Verify(this.iteration);
            var violation  = violations.Single();

            CollectionAssert.Contains(violation.ViolatingThing, multiRelationship.Iid);
        }
        /// <summary>
        /// Serialize the <see cref="MultiRelationshipRule"/>
        /// </summary>
        /// <param name="multiRelationshipRule">The <see cref="MultiRelationshipRule"/> to serialize</param>
        /// <returns>The <see cref="JObject"/></returns>
        private JObject Serialize(MultiRelationshipRule multiRelationshipRule)
        {
            var jsonObject = new JObject();

            jsonObject.Add("alias", this.PropertySerializerMap["alias"](multiRelationshipRule.Alias.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("classKind", this.PropertySerializerMap["classKind"](Enum.GetName(typeof(CDP4Common.CommonData.ClassKind), multiRelationshipRule.ClassKind)));
            jsonObject.Add("definition", this.PropertySerializerMap["definition"](multiRelationshipRule.Definition.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("excludedDomain", this.PropertySerializerMap["excludedDomain"](multiRelationshipRule.ExcludedDomain.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("excludedPerson", this.PropertySerializerMap["excludedPerson"](multiRelationshipRule.ExcludedPerson.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("hyperLink", this.PropertySerializerMap["hyperLink"](multiRelationshipRule.HyperLink.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("iid", this.PropertySerializerMap["iid"](multiRelationshipRule.Iid));
            jsonObject.Add("isDeprecated", this.PropertySerializerMap["isDeprecated"](multiRelationshipRule.IsDeprecated));
            jsonObject.Add("maxRelated", this.PropertySerializerMap["maxRelated"](multiRelationshipRule.MaxRelated));
            jsonObject.Add("minRelated", this.PropertySerializerMap["minRelated"](multiRelationshipRule.MinRelated));
            jsonObject.Add("modifiedOn", this.PropertySerializerMap["modifiedOn"](multiRelationshipRule.ModifiedOn));
            jsonObject.Add("name", this.PropertySerializerMap["name"](multiRelationshipRule.Name));
            jsonObject.Add("relatedCategory", this.PropertySerializerMap["relatedCategory"](multiRelationshipRule.RelatedCategory.OrderBy(x => x, this.guidComparer)));
            jsonObject.Add("relationshipCategory", this.PropertySerializerMap["relationshipCategory"](multiRelationshipRule.RelationshipCategory));
            jsonObject.Add("revisionNumber", this.PropertySerializerMap["revisionNumber"](multiRelationshipRule.RevisionNumber));
            jsonObject.Add("shortName", this.PropertySerializerMap["shortName"](multiRelationshipRule.ShortName));
            jsonObject.Add("thingPreference", this.PropertySerializerMap["thingPreference"](multiRelationshipRule.ThingPreference));
            return(jsonObject);
        }
Esempio n. 16
0
        /// <summary>
        /// Creates a <see cref="MultiRelationship"/>
        /// </summary>
        /// <param name="relatableThings">The list of <see cref="Thing"/> that this relationship will apply to.</param>
        /// <param name="rule">The <see cref="MultiRelationshipRule"/> that defines this relationship.</param>
        private async void CreateMultiRelationship(IEnumerable <Thing> relatableThings, MultiRelationshipRule rule)
        {
            // send off the relationship
            Tuple <DomainOfExpertise, Participant> tuple;

            this.Session.OpenIterations.TryGetValue(this.Thing, out tuple);
            var multiRelationship = new MultiRelationship(Guid.NewGuid(), null, null)
            {
                Owner = tuple.Item1
            };

            if (rule != null)
            {
                multiRelationship.Category.Add(rule.RelationshipCategory);
            }

            var iteration = this.Thing.Clone(false);

            iteration.Relationship.Add(multiRelationship);

            multiRelationship.Container = iteration;

            multiRelationship.RelatedThing = relatableThings.ToList();

            var transactionContext = TransactionContextResolver.ResolveContext(this.Thing);

            var containerTransaction = new ThingTransaction(transactionContext, iteration);

            containerTransaction.CreateOrUpdate(multiRelationship);

            try
            {
                var operationContainer = containerTransaction.FinalizeTransaction();
                await this.Session.Write(operationContainer);

                // at this point relationship has gone through.
                var returedRelationship =
                    this.Thing.Relationship.FirstOrDefault(r => r.Iid == multiRelationship.Iid) as MultiRelationship;

                if (returedRelationship != null)
                {
                    this.CreateMultiRelationshipDiagramConnector(returedRelationship);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Creation of Binary Relationship failed: {0}", ex.Message),
                                "Binary Relationship Failed",
                                MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Esempio n. 17
0
        public void VerifyThatInvalidContainerThrowsException()
        {
            var rule = new MultiRelationshipRule(Guid.NewGuid(), null, this.uri);

            Assert.Throws <ArgumentException>(() => new MultiRelationshipRuleDialogViewModel(rule, this.transaction, this.session.Object, true, ThingDialogKind.Inspect, this.dialogService.Object, this.siteDir));
        }
Esempio n. 18
0
        /// <summary>
        /// Persist the DTO composition to the ORM layer.
        /// </summary>
        /// <param name="transaction">
        /// The transaction object.
        /// </param>
        /// <param name="partition">
        /// The database partition (schema) where the requested resource will be stored.
        /// </param>
        /// <param name="multiRelationshipRule">
        /// The multiRelationshipRule instance to persist.
        /// </param>
        /// <returns>
        /// True if the persistence was successful.
        /// </returns>
        private bool CreateContainment(NpgsqlTransaction transaction, string partition, MultiRelationshipRule multiRelationshipRule)
        {
            var results = new List <bool>();

            foreach (var alias in this.ResolveFromRequestCache(multiRelationshipRule.Alias))
            {
                results.Add(this.AliasService.CreateConcept(transaction, partition, alias, multiRelationshipRule));
            }

            foreach (var definition in this.ResolveFromRequestCache(multiRelationshipRule.Definition))
            {
                results.Add(this.DefinitionService.CreateConcept(transaction, partition, definition, multiRelationshipRule));
            }

            foreach (var hyperLink in this.ResolveFromRequestCache(multiRelationshipRule.HyperLink))
            {
                results.Add(this.HyperLinkService.CreateConcept(transaction, partition, hyperLink, multiRelationshipRule));
            }

            return(results.All(x => x));
        }
        public void VerifyThatNullIterationThrowsArgumentException()
        {
            var rule = new MultiRelationshipRule(Guid.NewGuid(), this.cache, this.uri);

            Assert.Throws <ArgumentNullException>(() => rule.Verify(null));
        }
Esempio n. 20
0
        /// <summary>
        /// Creates a <see cref="MultiRelationship"/>
        /// </summary>
        /// <param name="rule">
        /// The rule this relationship is based on.
        /// </param>
        public void CreateMultiRelationshipCommandExecute(MultiRelationshipRule rule = null)
        {
            var relatableThings = this.SelectedItems.Select(i => ((NamedThingDiagramContentItem)i).Thing);

            this.CreateMultiRelationship(relatableThings, rule);
        }