/// <summary> /// Update a database record from the supplied data transfer object. /// </summary> /// <param name="transaction"> /// The current <see cref="NpgsqlTransaction"/> to the database. /// </param> /// <param name="partition"> /// The database partition (schema) where the requested resource will be updated. /// </param> /// <param name="elementDefinition"> /// The ElementDefinition DTO that is to be updated. /// </param> /// <param name="container"> /// The container of the DTO to be updated. /// </param> /// <returns> /// True if the concept was successfully updated. /// </returns> public virtual bool Update(NpgsqlTransaction transaction, string partition, CDP4Common.DTO.ElementDefinition elementDefinition, CDP4Common.DTO.Thing container = null) { bool isHandled; var valueTypeDictionaryAdditions = new Dictionary <string, string>(); var beforeUpdate = this.BeforeUpdate(transaction, partition, elementDefinition, container, out isHandled, valueTypeDictionaryAdditions); if (!isHandled) { beforeUpdate = beforeUpdate && base.Update(transaction, partition, elementDefinition, container); using (var command = new NpgsqlCommand()) { var sqlBuilder = new System.Text.StringBuilder(); sqlBuilder.AppendFormat("UPDATE \"{0}\".\"ElementDefinition\"", partition); sqlBuilder.AppendFormat(" SET \"Container\""); sqlBuilder.AppendFormat(" = :container"); sqlBuilder.AppendFormat(" WHERE \"Iid\" = :iid;"); command.Parameters.Add("iid", NpgsqlDbType.Uuid).Value = elementDefinition.Iid; command.Parameters.Add("container", NpgsqlDbType.Uuid).Value = container.Iid; command.CommandText = sqlBuilder.ToString(); command.Connection = transaction.Connection; command.Transaction = transaction; this.ExecuteAndLogCommand(command); } } return(this.AfterUpdate(beforeUpdate, transaction, partition, elementDefinition, container)); }
/// <summary> /// Insert a new database record, or updates one if it already exists from the supplied data transfer object. /// This is typically used during the import of existing data to the Database. /// </summary> /// <param name="transaction"> /// The current <see cref="NpgsqlTransaction"/> to the database. /// </param> /// <param name="partition"> /// The database partition (schema) where the requested resource will be stored. /// </param> /// <param name="elementDefinition"> /// The elementDefinition DTO that is to be persisted. /// </param> /// <param name="container"> /// The container of the DTO to be persisted. /// </param> /// <returns> /// True if the concept was successfully persisted. /// </returns> public virtual bool Upsert(NpgsqlTransaction transaction, string partition, CDP4Common.DTO.ElementDefinition elementDefinition, CDP4Common.DTO.Thing container = null) { var valueTypeDictionaryAdditions = new Dictionary <string, string>(); base.Upsert(transaction, partition, elementDefinition, container); using (var command = new NpgsqlCommand()) { var sqlBuilder = new System.Text.StringBuilder(); sqlBuilder.AppendFormat("INSERT INTO \"{0}\".\"ElementDefinition\"", partition); sqlBuilder.AppendFormat(" (\"Iid\", \"Container\")"); sqlBuilder.AppendFormat(" VALUES (:iid, :container)"); command.Parameters.Add("iid", NpgsqlDbType.Uuid).Value = elementDefinition.Iid; command.Parameters.Add("container", NpgsqlDbType.Uuid).Value = container.Iid; sqlBuilder.Append(" ON CONFLICT (\"Iid\")"); sqlBuilder.Append(" DO UPDATE "); sqlBuilder.Append(" SET \"Container\""); sqlBuilder.Append(" = :container;"); command.CommandText = sqlBuilder.ToString(); command.Connection = transaction.Connection; command.Transaction = transaction; this.ExecuteAndLogCommand(command); } elementDefinition.OrganizationalParticipant.ForEach(x => this.UpsertOrganizationalParticipant(transaction, partition, elementDefinition.Iid, x)); elementDefinition.ReferencedElement.ForEach(x => this.UpsertReferencedElement(transaction, partition, elementDefinition.Iid, x)); return(true); }
/// <summary> /// Insert a new database record from the supplied data transfer object. /// </summary> /// <param name="transaction"> /// The current <see cref="NpgsqlTransaction"/> to the database. /// </param> /// <param name="partition"> /// The database partition (schema) where the requested resource will be stored. /// </param> /// <param name="elementDefinition"> /// The elementDefinition DTO that is to be persisted. /// </param> /// <param name="container"> /// The container of the DTO to be persisted. /// </param> /// <returns> /// True if the concept was successfully persisted. /// </returns> public virtual bool Write(NpgsqlTransaction transaction, string partition, CDP4Common.DTO.ElementDefinition elementDefinition, CDP4Common.DTO.Thing container = null) { bool isHandled; var valueTypeDictionaryAdditions = new Dictionary <string, string>(); var beforeWrite = this.BeforeWrite(transaction, partition, elementDefinition, container, out isHandled, valueTypeDictionaryAdditions); if (!isHandled) { beforeWrite = beforeWrite && base.Write(transaction, partition, elementDefinition, container); using (var command = new NpgsqlCommand()) { var sqlBuilder = new System.Text.StringBuilder(); sqlBuilder.AppendFormat("INSERT INTO \"{0}\".\"ElementDefinition\"", partition); sqlBuilder.AppendFormat(" (\"Iid\", \"Container\")"); sqlBuilder.AppendFormat(" VALUES (:iid, :container);"); command.Parameters.Add("iid", NpgsqlDbType.Uuid).Value = elementDefinition.Iid; command.Parameters.Add("container", NpgsqlDbType.Uuid).Value = container.Iid; command.CommandText = sqlBuilder.ToString(); command.Connection = transaction.Connection; command.Transaction = transaction; this.ExecuteAndLogCommand(command); } elementDefinition.OrganizationalParticipant.ForEach(x => this.AddOrganizationalParticipant(transaction, partition, elementDefinition.Iid, x)); elementDefinition.ReferencedElement.ForEach(x => this.AddReferencedElement(transaction, partition, elementDefinition.Iid, x)); } return(this.AfterWrite(beforeWrite, transaction, partition, elementDefinition, container)); }
public void VerifyThatCreateValueSetsUpdateOperationsWorksStateOptionDependent() { var valueset1 = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri); valueset1.Manual = new ValueArray <string>(manual); this.parameter1.ValueSet.Add(valueset1); valueset1.ActualOption = this.option1; valueset1.ActualState = this.as1; var valueset2 = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri); valueset2.Manual = new ValueArray <string>(); this.parameter1.ValueSet.Add(valueset2); valueset2.ActualOption = this.option2; valueset2.ActualState = this.as1; this.parameter1.IsOptionDependent = true; this.parameter1Copy.IsOptionDependent = true; this.parameter1.StateDependence = this.asl1; var modeldto = this.model2.ToDto(); var iterationDto = (Dto.Iteration) this.iteration2.ToDto(); var def2Dto = new Dto.ElementDefinition(this.def2Copy.Iid, 2); var parameterDto = new Dto.Parameter(this.parameter1Copy.Iid, 2); parameterDto.IsOptionDependent = true; var newValueSet = new Dto.ParameterValueSet(Guid.NewGuid(), 2); iterationDto.Element.Add(def2Dto.Iid); def2Dto.Parameter.Add(parameterDto.Iid); parameterDto.ValueSet.Add(newValueSet.Iid); var returnedDto = new List <Dto.Thing> { modeldto, iterationDto, def2Dto, parameterDto, newValueSet }; var transactionContext = TransactionContextResolver.ResolveContext(this.iteration2); var context = transactionContext.ContextRoute(); var operationCreator = new ValueSetOperationCreator(this.session.Object); var operationContainer = operationCreator.CreateValueSetsUpdateOperations(context, returnedDto, this.map); var operation = operationContainer.Operations.Single(); var original = (Dto.ParameterValueSet)operation.OriginalThing; var modified = (Dto.ParameterValueSet)operation.ModifiedThing; Assert.AreNotEqual(original.Manual, modified.Manual); }
public void VerifyThatCreateValueSetsUpdateOperationsWorks() { var valueset = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri); valueset.Manual = new ValueArray <string>(manual); this.parameter1.ValueSet.Add(valueset); var subscriptionvalueset = new ParameterSubscriptionValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri); subscriptionvalueset.Manual = new ValueArray <string>(manual); this.subscription1.ValueSet.Add(subscriptionvalueset); var modeldto = this.model2.ToDto(); var iterationDto = (Dto.Iteration) this.iteration2.ToDto(); var def2Dto = new Dto.ElementDefinition(this.def2Copy.Iid, 2); var parameterDto = new Dto.Parameter(this.parameter1Copy.Iid, 2); var newValueSet = new Dto.ParameterValueSet(Guid.NewGuid(), 2); var subscription = new Dto.ParameterSubscription(this.subscriptionCopy.Iid, 1); var subscriptionValueSet = new Dto.ParameterSubscriptionValueSet(Guid.NewGuid(), 1); iterationDto.Element.Add(def2Dto.Iid); def2Dto.Parameter.Add(parameterDto.Iid); parameterDto.ValueSet.Add(newValueSet.Iid); parameterDto.ParameterSubscription.Add(subscription.Iid); subscription.ValueSet.Add(subscriptionValueSet.Iid); var returnedDto = new List <Dto.Thing> { modeldto, iterationDto, def2Dto, parameterDto, newValueSet, subscription, subscriptionValueSet }; var transactionContext = TransactionContextResolver.ResolveContext(this.iteration2); var context = transactionContext.ContextRoute(); var operationCreator = new ValueSetOperationCreator(this.session.Object); var operationContainer = operationCreator.CreateValueSetsUpdateOperations(context, returnedDto, this.map); Assert.AreEqual(2, operationContainer.Operations.Count()); var operation = operationContainer.Operations.Single(x => x.OriginalThing.ClassKind == ClassKind.ParameterValueSet); var originalPvs = (Dto.ParameterValueSet)operation.OriginalThing; var modifiedPvs = (Dto.ParameterValueSet)operation.ModifiedThing; Assert.AreNotEqual(originalPvs.Manual, modifiedPvs.Manual); }
/// <summary> /// The mapping from a database record to data transfer object. /// </summary> /// <param name="reader"> /// An instance of the SQL reader. /// </param> /// <returns> /// A deserialized instance of <see cref="CDP4Common.DTO.ElementDefinition"/>. /// </returns> public virtual CDP4Common.DTO.ElementDefinition MapToDto(NpgsqlDataReader reader) { string tempModifiedOn; string tempName; string tempShortName; string tempThingPreference; var valueDict = (Dictionary <string, string>)reader["ValueTypeSet"]; var iid = Guid.Parse(reader["Iid"].ToString()); var revisionNumber = int.Parse(valueDict["RevisionNumber"]); var dto = new CDP4Common.DTO.ElementDefinition(iid, revisionNumber); dto.Alias.AddRange(Array.ConvertAll((string[])reader["Alias"], Guid.Parse)); dto.Category.AddRange(Array.ConvertAll((string[])reader["Category"], Guid.Parse)); dto.ContainedElement.AddRange(Array.ConvertAll((string[])reader["ContainedElement"], Guid.Parse)); dto.Definition.AddRange(Array.ConvertAll((string[])reader["Definition"], Guid.Parse)); dto.ExcludedDomain.AddRange(Array.ConvertAll((string[])reader["ExcludedDomain"], Guid.Parse)); dto.ExcludedPerson.AddRange(Array.ConvertAll((string[])reader["ExcludedPerson"], Guid.Parse)); dto.HyperLink.AddRange(Array.ConvertAll((string[])reader["HyperLink"], Guid.Parse)); dto.OrganizationalParticipant.AddRange(Array.ConvertAll((string[])reader["OrganizationalParticipant"], Guid.Parse)); dto.Owner = Guid.Parse(reader["Owner"].ToString()); dto.Parameter.AddRange(Array.ConvertAll((string[])reader["Parameter"], Guid.Parse)); dto.ParameterGroup.AddRange(Array.ConvertAll((string[])reader["ParameterGroup"], Guid.Parse)); dto.ReferencedElement.AddRange(Array.ConvertAll((string[])reader["ReferencedElement"], Guid.Parse)); if (valueDict.TryGetValue("ModifiedOn", out tempModifiedOn)) { dto.ModifiedOn = Utils.ParseUtcDate(tempModifiedOn); } if (valueDict.TryGetValue("Name", out tempName)) { dto.Name = tempName.UnEscape(); } if (valueDict.TryGetValue("ShortName", out tempShortName)) { dto.ShortName = tempShortName.UnEscape(); } if (valueDict.TryGetValue("ThingPreference", out tempThingPreference) && tempThingPreference != null) { dto.ThingPreference = tempThingPreference.UnEscape(); } return(dto); }
public void VerifyInvalidOperationException() { var valueset1 = new ParameterValueSet(Guid.NewGuid(), this.assembler.Cache, this.uri); valueset1.Manual = new ValueArray <string>(manual); this.parameter1.ValueSet.Add(valueset1); valueset1.ActualOption = this.option1; valueset1.ActualState = this.as1; var modeldto = this.model2.ToDto(); var iterationDto = (Dto.Iteration) this.iteration2.ToDto(); var def2Dto = new Dto.ElementDefinition(this.def2Copy.Iid, 2); var parameterDto = new Dto.Parameter(this.parameter1Copy.Iid, 2); parameterDto.IsOptionDependent = true; var newValueSet = new Dto.ParameterValueSet(Guid.NewGuid(), 2); iterationDto.Element.Add(def2Dto.Iid); def2Dto.Parameter.Add(parameterDto.Iid); parameterDto.ValueSet.Add(newValueSet.Iid); var returnedDto = new List <Dto.Thing> { iterationDto, def2Dto, parameterDto, newValueSet }; var transactionContext = TransactionContextResolver.ResolveContext(this.iteration2); var context = transactionContext.ContextRoute(); var operationCreator = new ValueSetOperationCreator(this.session.Object); Assert.Throws <InvalidOperationException>(() => operationCreator.CreateValueSetsUpdateOperations(context, returnedDto, this.map)); }
public void VerifyThatMultipleIterationCanBeSynchronized() { var sitedir = new Dto.SiteDirectory(Guid.NewGuid(), 0); var srdl1 = new Dto.SiteReferenceDataLibrary(Guid.NewGuid(), 0); var srdl2 = new Dto.SiteReferenceDataLibrary(Guid.NewGuid(), 0); var category = new Dto.Category(Guid.NewGuid(), 0); var modeldto = new Dto.EngineeringModel(Guid.NewGuid(), 1); var iteration1dto = new Dto.Iteration(Guid.NewGuid(), 1); var iteration2dto = new Dto.Iteration(Guid.NewGuid(), 1); var element1dto = new Dto.ElementDefinition(Guid.NewGuid(), 1); element1dto.IterationContainerId = iteration1dto.Iid; element1dto.Category.Add(category.Iid); var element2dto = new Dto.ElementDefinition(element1dto.Iid, 1); element2dto.IterationContainerId = iteration2dto.Iid; element2dto.Category.Add(category.Iid); var usage1dto = new Dto.ElementUsage(Guid.NewGuid(), 1); usage1dto.IterationContainerId = iteration1dto.Iid; usage1dto.Category.Add(category.Iid); var usage2dto = new Dto.ElementUsage(usage1dto.Iid, 1); usage2dto.IterationContainerId = iteration2dto.Iid; usage2dto.Category.Add(category.Iid); sitedir.SiteReferenceDataLibrary.Add(srdl1.Iid); sitedir.SiteReferenceDataLibrary.Add(srdl2.Iid); srdl1.DefinedCategory.Add(category.Iid); modeldto.Iteration.Add(iteration1dto.Iid); modeldto.Iteration.Add(iteration2dto.Iid); iteration1dto.Element.Add(element1dto.Iid); iteration2dto.Element.Add(element2dto.Iid); element1dto.ContainedElement.Add(usage1dto.Iid); element2dto.ContainedElement.Add(usage2dto.Iid); var dtos = new List <Dto.Thing> { sitedir, srdl1, srdl2, category }; var assembler = new Assembler(this.uri); assembler.Synchronize(dtos); dtos = new List <Dto.Thing> { modeldto, iteration1dto, iteration2dto, element1dto, element2dto, usage1dto, usage2dto }; assembler.Synchronize(dtos); Assert.AreEqual(11, assembler.Cache.Count); }
public bool Update(NpgsqlTransaction transaction, string partition, ElementDefinition parameter, Thing container = null) { throw new NotImplementedException(); }
public bool Write(NpgsqlTransaction transaction, string partition, ElementDefinition ed, Thing container = null) { this.writtenThings.Add(ed); return(true); }
public void VerifyCopyElementDefWorks() { var modelSetupService = new Mock <IEngineeringModelSetupService>(); var modelSetup = new EngineeringModelSetup(Guid.NewGuid(), 0); modelSetupService.Setup(x => x.GetEngineeringModelSetup(It.IsAny <NpgsqlTransaction>(), It.IsAny <Guid>())).Returns(modelSetup); this.copySourceDtos = new List <Thing>(); var boolParamTypeId = Guid.NewGuid(); var mrdl = new ModelReferenceDataLibrary(Guid.NewGuid(), 1); mrdl.ParameterType.Add(boolParamTypeId); var sourceIteration = new Iteration(Guid.NewGuid(), 1); var sourceElementDef1 = new ElementDefinition(Guid.NewGuid(), 1); var sourceElementDef2 = new ElementDefinition(Guid.NewGuid(), 1); var sourceUsage1 = new ElementUsage(Guid.NewGuid(), 1) { ElementDefinition = sourceElementDef2.Iid }; sourceElementDef1.ContainedElement.Add(sourceUsage1.Iid); sourceIteration.Element.Add(sourceElementDef1.Iid); sourceIteration.Element.Add(sourceElementDef2.Iid); var parameter1 = new Parameter(Guid.NewGuid(), 1) { ParameterType = boolParamTypeId }; var pvs1 = new ParameterValueSet(Guid.NewGuid(), 1) { Manual = new ValueArray <string>(new[] { "true" }), Computed = new ValueArray <string>(new[] { "-" }), Reference = new ValueArray <string>(new[] { "-" }), Published = new ValueArray <string>(new[] { "-" }), ValueSwitch = ParameterSwitchKind.MANUAL }; var parameter2 = new Parameter(Guid.NewGuid(), 1) { ParameterType = boolParamTypeId }; var pvs2 = new ParameterValueSet(Guid.NewGuid(), 1) { Manual = new ValueArray <string>(new[] { "true" }), Computed = new ValueArray <string>(new[] { "-" }), Reference = new ValueArray <string>(new[] { "-" }), Published = new ValueArray <string>(new[] { "-" }), ValueSwitch = ParameterSwitchKind.MANUAL }; parameter1.ValueSet.Add(pvs1.Iid); sourceElementDef1.Parameter.Add(parameter1.Iid); parameter2.ValueSet.Add(pvs2.Iid); sourceElementDef2.Parameter.Add(parameter2.Iid); var override2 = new ParameterOverride(Guid.NewGuid(), 1); override2.Parameter = parameter2.Iid; var ovs = new ParameterOverrideValueSet(Guid.NewGuid(), 1) { ParameterValueSet = pvs2.Iid }; override2.ValueSet.Add(ovs.Iid); sourceUsage1.ParameterOverride.Add(override2.Iid); this.copySourceDtos.Add(sourceIteration); this.copySourceDtos.Add(sourceElementDef1); this.copySourceDtos.Add(sourceElementDef2); this.copySourceDtos.Add(sourceUsage1); this.copySourceDtos.Add(parameter1); this.copySourceDtos.Add(pvs1); this.copySourceDtos.Add(parameter2); this.copySourceDtos.Add(pvs2); this.copySourceDtos.Add(override2); this.copySourceDtos.Add(ovs); var targetIteration = new Iteration(Guid.NewGuid(), 1); this.serviceProvider.Setup(x => x.MapToReadService(It.IsAny <string>())).Returns <string>(x => new TestSourceService(this.copySourceDtos, x)); this.serviceProvider.Setup(x => x.MapToReadService(It.Is <string>(t => t == ClassKind.ModelReferenceDataLibrary.ToString()))) .Returns <string>(x => new TestSourceService(new List <Thing> { mrdl }, x)); this.serviceProvider.Setup(x => x.MapToReadService(It.Is <string>(t => t == ClassKind.Iteration.ToString()))) .Returns <string>(x => new TestSourceService(new List <Thing> { sourceIteration, targetIteration }, x)); var customOperationSideEffectProcessor = new Mock <IOperationSideEffectProcessor>(); customOperationSideEffectProcessor.Setup(x => x.BeforeCreate(It.IsAny <Thing>(), It.IsAny <Thing>(), It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <ISecurityContext>())). Returns(true); var paramSubscriptionService = new ParameterSubscriptionService { ParameterSubscriptionDao = new Mock <IParameterSubscriptionDao>().Object, PermissionService = this.permissionService.Object, }; var parameterContextProvider = new OldParameterContextProvider { ParameterValueSetService = new TestSourceService(this.copySourceDtos, ClassKind.ParameterValueSet.ToString()) }; var paramGroupService = new ParameterGroupService { PermissionService = this.permissionService.Object, TransactionManager = this.transactionManager.Object, ParameterGroupDao = new Mock <IParameterGroupDao>().Object }; var valueSetService = new Mock <IParameterValueSetService>(); valueSetService.Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <IEnumerable <Guid> >(), It.IsAny <ISecurityContext>())) .Returns <NpgsqlTransaction, string, IEnumerable <Guid>, ISecurityContext>((a, b, c, d) => { var list = new List <ParameterValueSet>(); foreach (var guid in c) { var vs = new ParameterValueSet(guid, 1) { Manual = new ValueArray <string>(new [] { "-" }), Computed = new ValueArray <string>(new [] { "-" }), Reference = new ValueArray <string>(new [] { "-" }), Published = new ValueArray <string>(new [] { "-" }) }; list.Add(vs); } return(list); }); var overrideValueSetService = new Mock <IParameterOverrideValueSetService>(); overrideValueSetService.Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <IEnumerable <Guid> >(), It.IsAny <ISecurityContext>())) .Returns <NpgsqlTransaction, string, IEnumerable <Guid>, ISecurityContext>((a, b, c, d) => { var list = new List <ParameterOverrideValueSet>(); foreach (var guid in c) { var vs = new ParameterOverrideValueSet(guid, 1) { Manual = new ValueArray <string>(new[] { "-" }), Computed = new ValueArray <string>(new[] { "-" }), Reference = new ValueArray <string>(new[] { "-" }), Published = new ValueArray <string>(new[] { "-" }) }; list.Add(vs); } return(list); }); var paramDao = new TestParameterDao(); var paramService = new ParameterService { PermissionService = this.permissionService.Object, ParameterDao = paramDao, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object, TransactionManager = this.transactionManager.Object, OldParameterContextProvider = parameterContextProvider, ParameterSubscriptionService = paramSubscriptionService, ParameterValueSetService = valueSetService.Object }; var paramOverrideDao = new TestParameterOverrideDao(); var paramOverrideService = new ParameterOverrideService { PermissionService = this.permissionService.Object, ParameterOverrideDao = paramOverrideDao, TransactionManager = this.transactionManager.Object, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object, ParameterSubscriptionService = paramSubscriptionService, ParameterOverrideValueSetService = overrideValueSetService.Object }; var usageDao = new Mock <IElementUsageDao>(); var usageService = new ElementUsageService { PermissionService = this.permissionService.Object, ParameterOverrideService = paramOverrideService, ElementUsageDao = usageDao.Object, TransactionManager = this.transactionManager.Object, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object }; var edDao = new TestElementDefinitionDao(); var edService = new ElementDefinitionService { PermissionService = this.permissionService.Object, ElementDefinitionDao = edDao, ElementUsageService = usageService, ParameterService = paramService, TransactionManager = this.transactionManager.Object, OperationSideEffectProcessor = customOperationSideEffectProcessor.Object, ParameterGroupService = paramGroupService }; this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ElementDefinition.ToString())).Returns(edService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ElementUsage.ToString())).Returns(usageService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.Parameter.ToString())).Returns(paramService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ParameterOverride.ToString())).Returns(paramOverrideService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ParameterSubscription.ToString())).Returns(paramSubscriptionService); this.serviceProvider.Setup(x => x.MapToPersitableService(ClassKind.ParameterGroup.ToString())).Returns(paramGroupService); var postOperation = new CdpPostOperation(); var copyinfo = new CopyInfo { ActiveOwner = Guid.NewGuid(), Options = new CopyInfoOptions { CopyKind = CopyKind.Deep, KeepOwner = true, KeepValues = true }, Source = new CopySource { IterationId = sourceIteration.Iid, Thing = new CopyReference { Iid = sourceElementDef1.Iid, ClassKind = ClassKind.ElementDefinition }, TopContainer = new CopyReference { Iid = Guid.NewGuid(), ClassKind = ClassKind.EngineeringModel } }, Target = new CopyTarget { IterationId = targetIteration.Iid, Container = new CopyReference { Iid = targetIteration.Iid, ClassKind = ClassKind.Iteration }, TopContainer = new CopyReference { Iid = Guid.NewGuid(), ClassKind = ClassKind.EngineeringModel } } }; postOperation.Copy.Add(copyinfo); this.serviceProvider.Setup(x => x.MapToReadService(ClassKind.EngineeringModelSetup.ToString())).Returns(modelSetupService.Object); this.operationProcessor.Process(postOperation, null, $"Iteration_{targetIteration.Iid.ToString().Replace("-", "_")}", null); Assert.AreEqual(2, edDao.WrittenThingCount); Assert.AreEqual(2, paramDao.WrittenThingCount); Assert.AreEqual(1, paramOverrideDao.WrittenThingCount); usageDao.Verify(x => x.Write(It.IsAny <NpgsqlTransaction>(), It.IsAny <string>(), It.IsAny <ElementUsage>(), It.IsAny <Thing>()), Times.Once); }
/// <summary> /// Obfuscates an <see cref="CDP4Common.DTO.ElementDefinition" /> object /// </summary> /// <param name="thing">The <see cref="CDP4Common.DTO.ElementDefinition" /> to obfuscate.</param> /// <param name="parameters">The list of all <see cref="Parameter" />s in the response</param> /// <param name="parameterSubscriptions">The list of all <see cref="ParameterSubscription" />s in the response</param> /// <param name="parameterValueSets">The list of all <see cref="ParameterValueSet" />s in the response</param> /// <param name="parameterSubscriptionValueSets"> /// The list of all <see cref="ParameterSubscriptionValueSet" />s in the /// response /// </param> /// <param name="usages">The list of all <see cref="ElementUsage" />s in the response</param> /// <param name="parameterOverrides">The list of all <see cref="ParameterOverride" />s in the response</param> /// <param name="parameterOverrideValueSets">The list of all <see cref="ParameterOverrideValueSet" />s in the response</param> /// <param name="parameterGroups">The list of all <see cref="ParameterGroup" />s in the response</param> /// <param name="allowedElementDefinitions">The list of allowed <see cref="ElementDefinition" /> Iids</param> /// <param name="definitions">The list of all <see cref="Definition" />s in the response</param> /// <param name="citations">The list of all <see cref="Citation" />s in the response</param> /// <param name="aliases">The list of all <see cref="Alias" />s in the response</param> /// <param name="hyperlinks">The list of all <see cref="HyperLink" />s in the response</param> private void ObfuscateElementDefinition( ElementDefinition thing, List <Parameter> parameters, List <ParameterSubscription> parameterSubscriptions, List <ParameterValueSet> parameterValueSets, List <ParameterSubscriptionValueSet> parameterSubscriptionValueSets, List <ElementUsage> usages, List <ParameterOverride> parameterOverrides, List <ParameterOverrideValueSet> parameterOverrideValueSets, List <ParameterGroup> parameterGroups, List <Guid> allowedElementDefinitions, List <Definition> definitions, List <Citation> citations, List <Alias> aliases, List <HyperLink> hyperlinks) { // obfuscate own properties thing.Name = "Hidden Element Definition"; thing.ShortName = "hiddenElementDefinition"; this.obfuscatedCache.Add(thing.Iid); // obfuscate all parameter values foreach (var paramIid in thing.Parameter) { this.obfuscatedCache.Add(paramIid); var paramDto = parameters.FirstOrDefault(p => p.Iid.Equals(paramIid)); if (paramDto == null) { continue; } var subscriptions = paramDto.ParameterSubscription; var paramValueSetIids = paramDto.ValueSets; foreach (var paramValueSet in paramValueSetIids) { var set = parameterValueSets.FirstOrDefault(pvs => pvs.Iid.Equals(paramValueSet)); if (set != null) { this.ObfuscateValueSet(set); } } foreach (var subscriptionIid in subscriptions) { var subscription = parameterSubscriptions.FirstOrDefault(s => s.Iid.Equals(subscriptionIid)); if (subscription == null) { continue; } var paramSubscriptionValueSetIids = subscription.ValueSets; foreach (var paramValueSet in paramSubscriptionValueSetIids) { var set = parameterSubscriptionValueSets.FirstOrDefault(psvs => psvs.Iid.Equals(paramValueSet)); if (set != null) { this.ObfuscateSubscriptionValueSet(set); } } } } // obfuscate usages foreach (var usageIid in thing.ContainedElement) { var usage = usages.FirstOrDefault(u => u.Iid.Equals(usageIid)); // if no usage in response or the usage is of an element that is allowed, skip if (usage == null || allowedElementDefinitions.Contains(usage.ElementDefinition)) { continue; } this.ObfuscateElementUsage(usage, parameterOverrides, parameterOverrideValueSets, definitions, citations, aliases, hyperlinks); } // obfuscate definitions foreach (var definitionIid in thing.Definition) { var definition = definitions.FirstOrDefault(d => d.Iid.Equals(definitionIid)); if (definition == null) { continue; } this.ObfuscateDefinition(definition, citations); } // obfuscate alias foreach (var aliasIid in thing.Alias) { var alias = aliases.FirstOrDefault(d => d.Iid.Equals(aliasIid)); if (alias == null) { continue; } this.ObfuscateAlias(alias); } // obfuscate hyperlink foreach (var hyperlinkIid in thing.HyperLink) { var hyperlink = hyperlinks.FirstOrDefault(d => d.Iid.Equals(hyperlinkIid)); if (hyperlink == null) { continue; } this.ObfuscateHyperlink(hyperlink); } // obfuscate parameter groups foreach (var groupIid in thing.ParameterGroup) { var group = parameterGroups.FirstOrDefault(g => g.Iid.Equals(groupIid)); if (group == null) { continue; } this.ObfuscateParameterGroup(group); } }
public void Setup() { this.securityContext = new Mock <ISecurityContext>(); this.optionService = new Mock <IOptionService>(); this.actualFiniteStateListService = new Mock <IActualFiniteStateListService>(); this.parameterService = new Mock <ICompoundParameterTypeService>(); this.valueSetService = new Mock <IParameterValueSetService>(); this.iterationService = new Mock <IIterationService>(); this.parameterOverrideValueSetService = new Mock <IParameterOverrideValueSetService>(); this.parameterSubscriptionValueSetService = new Mock <IParameterSubscriptionValueSetService>(); this.parameterSubscriptionService = new Mock <IParameterSubscriptionService>(); this.parameterOverrideService = new Mock <IParameterOverrideService>(); this.parameterTypeComponentService = new Mock <IParameterTypeComponentService>(); this.parameterTypeService = new Mock <IParameterTypeService>(); this.elementUsageService = new Mock <IElementUsageService>(); this.defaultValueArrayFactory = new Mock <IDefaultValueArrayFactory>(); this.OldParameterContextProvider = new Mock <IOldParameterContextProvider>(); this.npgsqlTransaction = null; this.iteration = new Iteration(Guid.NewGuid(), 1); this.option1 = new Option(Guid.NewGuid(), 1); this.option2 = new Option(Guid.NewGuid(), 1); this.iteration.Option.Add(new OrderedItem { K = 1, V = this.option1.Iid }); this.iteration.Option.Add(new OrderedItem { K = 2, V = this.option2.Iid }); this.actualList = new ActualFiniteStateList(Guid.NewGuid(), 1); this.actualState1 = new ActualFiniteState(Guid.NewGuid(), 1); this.actualState2 = new ActualFiniteState(Guid.NewGuid(), 1); this.actualList.ActualState.Add(this.actualState1.Iid); this.actualList.ActualState.Add(this.actualState2.Iid); this.parameter = new Parameter(Guid.NewGuid(), 1); this.cptParameterType = new CompoundParameterType(Guid.NewGuid(), 1); this.boolPt = new BooleanParameterType(Guid.NewGuid(), 1); this.cpt1 = new ParameterTypeComponent(Guid.NewGuid(), 1) { ParameterType = this.boolPt.Iid }; this.cpt2 = new ParameterTypeComponent(Guid.NewGuid(), 1) { ParameterType = this.boolPt.Iid }; this.cptParameterType.Component.Add(new OrderedItem { K = 1, V = this.cpt1.Iid.ToString() }); this.cptParameterType.Component.Add(new OrderedItem { K = 2, V = this.cpt2.Iid.ToString() }); this.sideEffect = new ParameterSideEffect { IterationService = this.iterationService.Object, ActualFiniteStateListService = this.actualFiniteStateListService.Object, ParameterValueSetService = this.valueSetService.Object, ParameterOverrideValueSetService = this.parameterOverrideValueSetService.Object, ParameterSubscriptionValueSetService = this.parameterSubscriptionValueSetService.Object, ParameterOverrideService = this.parameterOverrideService.Object, ParameterSubscriptionService = this.parameterSubscriptionService.Object, ParameterTypeService = this.parameterTypeService.Object, ElementUsageService = this.elementUsageService.Object, ParameterTypeComponentService = this.parameterTypeComponentService.Object, OptionService = this.optionService.Object, DefaultValueArrayFactory = this.defaultValueArrayFactory.Object, ParameterValueSetFactory = new ParameterValueSetFactory(), ParameterOverrideValueSetFactory = new ParameterOverrideValueSetFactory(), ParameterSubscriptionValueSetFactory = new ParameterSubscriptionValueSetFactory(), OldParameterContextProvider = this.OldParameterContextProvider.Object }; // prepare mock data this.elementDefinition = new ElementDefinition(Guid.NewGuid(), 1); this.elementDefinition.Parameter.Add(this.parameter.Iid); this.parameterOverride = new ParameterOverride(Guid.NewGuid(), 1) { Parameter = this.parameter.Iid, }; this.elementUsage = new ElementUsage(Guid.NewGuid(), 1) { ElementDefinition = this.elementDefinition.Iid, ParameterOverride = { this.parameterOverride.Iid } }; this.parameterService.Setup(x => x.Get(It.IsAny <NpgsqlTransaction>(), "SiteDirectory", It.Is <IEnumerable <Guid> >(y => y.Contains(this.cptParameterType.Iid)), this.securityContext.Object)) .Returns(new List <Thing> { this.cptParameterType }); this.iterationService.Setup(x => x.GetActiveIteration(null, "partition", this.securityContext.Object)) .Returns(this.iteration); this.actualFiniteStateListService.Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), "partition", It.Is <IEnumerable <Guid> >(y => y.Contains(this.actualList.Iid)), this.securityContext.Object)) .Returns(new List <Thing> { this.actualList }); this.parameterTypeService.Setup(x => x.GetShallow(this.npgsqlTransaction, "SiteDirectory", null, this.securityContext.Object)) .Returns(new List <Thing> { this.boolPt, this.cptParameterType }); this.parameterTypeService.Setup(x => x.GetShallow(this.npgsqlTransaction, "SiteDirectory", new List <Guid> { this.existingNotQuantityKindParameterTypeGuid }, this.securityContext.Object)) .Returns(new List <Thing> { new BooleanParameterType(this.existingNotQuantityKindParameterTypeGuid, 1) }); this.parameterTypeService.Setup(x => x.GetShallow(this.npgsqlTransaction, "SiteDirectory", new List <Guid> { this.existingQuantityKindParameterTypeGuid }, this.securityContext.Object)) .Returns(new List <Thing> { new SimpleQuantityKind(this.existingQuantityKindParameterTypeGuid, 1) }); this.parameterTypeService.Setup(x => x.GetShallow(this.npgsqlTransaction, "SiteDirectory", new List <Guid> { this.notExistingParameterTypeGuid }, this.securityContext.Object)) .Returns(new List <Thing>()); this.parameterTypeComponentService.Setup(x => x.GetShallow(this.npgsqlTransaction, "SiteDirectory", null, this.securityContext.Object)) .Returns(new List <Thing> { this.cpt1, this.cpt2 }); this.parameterOverrideService.Setup(x => x.GetShallow(this.npgsqlTransaction, "partition", null, this.securityContext.Object)) .Returns(new List <Thing> { this.parameterOverride }); this.elementUsageService.Setup(x => x.GetShallow(this.npgsqlTransaction, "partition", null, this.securityContext.Object)) .Returns(new List <Thing> { this.elementUsage }); this.scalarDefaultValueArray = new ValueArray <string>(new List <string>() { "-" }); this.compoundDefaultValueArray = new ValueArray <string>(new List <string>() { "-", "-" }); this.defaultValueArrayFactory.Setup(x => x.CreateDefaultValueArray(this.cptParameterType.Iid)) .Returns(this.compoundDefaultValueArray); this.defaultValueArrayFactory.Setup(x => x.CreateDefaultValueArray(this.boolPt.Iid)) .Returns(this.scalarDefaultValueArray); this.OldParameterContextProvider.Setup(x => x.GetsourceValueSet(It.IsAny <Guid?>(), It.IsAny <Guid?>())).Returns((ParameterValueSet)null); }
public void Setup() { this.securityContext = new Mock <ISecurityContext>(); this.optionService = new Mock <IOptionService>(); this.actualFiniteStateListService = new Mock <IActualFiniteStateListService>(); this.valueSetService = new Mock <IParameterValueSetService>(); this.iterationService = new Mock <IIterationService>(); this.parameterOverrideValueSetService = new Mock <IParameterOverrideValueSetService>(); this.parameterSubscriptionValueSetService = new Mock <IParameterSubscriptionValueSetService>(); this.parameterSubscriptionService = new Mock <IParameterSubscriptionService>(); this.parameterOverrideService = new Mock <IParameterOverrideService>(); this.elementUsageService = new Mock <IElementUsageService>(); this.defaultValueArrayFactory = new Mock <IDefaultValueArrayFactory>(); this.OldParameterContextProvider = new Mock <IOldParameterContextProvider>(); this.cachedReferenceDataService = new Mock <ICachedReferenceDataService>(); this.organizationalParticipationResolverService = new Mock <IOrganizationalParticipationResolverService>(); this.organizationalParticipationResolverService.Setup(x => x.ValidateCreateOrganizationalParticipation(It.IsAny <Thing>(), It.IsAny <Thing>(), It.IsAny <ISecurityContext>(), this.npgsqlTransaction, It.IsAny <string>())); this.npgsqlTransaction = null; this.iteration = new Iteration(Guid.NewGuid(), 1); this.option1 = new Option(Guid.NewGuid(), 1); this.option2 = new Option(Guid.NewGuid(), 1); this.iteration.Option.Add(new OrderedItem { K = 1, V = this.option1.Iid }); this.iteration.Option.Add(new OrderedItem { K = 2, V = this.option2.Iid }); this.actualList = new ActualFiniteStateList(Guid.NewGuid(), 1); this.actualState1 = new ActualFiniteState(Guid.NewGuid(), 1); this.actualState2 = new ActualFiniteState(Guid.NewGuid(), 1); this.actualList.ActualState.Add(this.actualState1.Iid); this.actualList.ActualState.Add(this.actualState2.Iid); this.parameter = new Parameter(Guid.NewGuid(), 1); this.cptParameterType = new CompoundParameterType(Guid.NewGuid(), 1); this.boolPt = new BooleanParameterType(Guid.NewGuid(), 1); this.cpt1 = new ParameterTypeComponent(Guid.NewGuid(), 1) { ParameterType = this.boolPt.Iid }; this.cpt2 = new ParameterTypeComponent(Guid.NewGuid(), 1) { ParameterType = this.boolPt.Iid }; this.cptParameterType.Component.Add(new OrderedItem { K = 1, V = this.cpt1.Iid.ToString() }); this.cptParameterType.Component.Add(new OrderedItem { K = 2, V = this.cpt2.Iid.ToString() }); this.sideEffect = new ParameterSideEffect { IterationService = this.iterationService.Object, ActualFiniteStateListService = this.actualFiniteStateListService.Object, ParameterValueSetService = this.valueSetService.Object, ParameterOverrideValueSetService = this.parameterOverrideValueSetService.Object, ParameterSubscriptionValueSetService = this.parameterSubscriptionValueSetService.Object, ParameterOverrideService = this.parameterOverrideService.Object, ParameterSubscriptionService = this.parameterSubscriptionService.Object, ElementUsageService = this.elementUsageService.Object, OptionService = this.optionService.Object, DefaultValueArrayFactory = this.defaultValueArrayFactory.Object, ParameterValueSetFactory = new ParameterValueSetFactory(), ParameterOverrideValueSetFactory = new ParameterOverrideValueSetFactory(), ParameterSubscriptionValueSetFactory = new ParameterSubscriptionValueSetFactory(), OldParameterContextProvider = this.OldParameterContextProvider.Object, OrganizationalParticipationResolverService = this.organizationalParticipationResolverService.Object, CachedReferenceDataService = this.cachedReferenceDataService.Object }; // prepare mock data this.elementDefinition = new ElementDefinition(Guid.NewGuid(), 1); this.elementDefinition.Parameter.Add(this.parameter.Iid); this.parameterOverride = new ParameterOverride(Guid.NewGuid(), 1) { Parameter = this.parameter.Iid }; this.elementUsage = new ElementUsage(Guid.NewGuid(), 1) { ElementDefinition = this.elementDefinition.Iid, ParameterOverride = { this.parameterOverride.Iid } }; this.iterationService.Setup(x => x.GetActiveIteration(null, "partition", this.securityContext.Object)) .Returns(this.iteration); this.actualFiniteStateListService.Setup(x => x.GetShallow(It.IsAny <NpgsqlTransaction>(), "partition", It.Is <IEnumerable <Guid> >(y => y.Contains(this.actualList.Iid)), this.securityContext.Object)) .Returns(new List <Thing> { this.actualList }); var parameterTypeDictionary = new Dictionary <Guid, ParameterType>(); parameterTypeDictionary.Add(this.cptParameterType.Iid, this.cptParameterType); parameterTypeDictionary.Add(this.boolPt.Iid, this.boolPt); this.cachedReferenceDataService.Setup(x => x.QueryParameterTypes(this.npgsqlTransaction, this.securityContext.Object)) .Returns(parameterTypeDictionary); var parameterTypeComponentDictionary = new Dictionary <Guid, ParameterTypeComponent>(); parameterTypeComponentDictionary.Add(this.cpt1.Iid, this.cpt1); parameterTypeComponentDictionary.Add(this.cpt2.Iid, this.cpt2); this.cachedReferenceDataService.Setup(x => x.QueryParameterTypeComponents(this.npgsqlTransaction, this.securityContext.Object)) .Returns(parameterTypeComponentDictionary); this.parameterOverrideService.Setup(x => x.GetShallow(this.npgsqlTransaction, "partition", null, this.securityContext.Object)) .Returns(new List <Thing> { this.parameterOverride }); this.elementUsageService.Setup(x => x.GetShallow(this.npgsqlTransaction, "partition", null, this.securityContext.Object)) .Returns(new List <Thing> { this.elementUsage }); this.scalarDefaultValueArray = new ValueArray <string>(new List <string> { "-" }); this.compoundDefaultValueArray = new ValueArray <string>(new List <string> { "-", "-" }); this.defaultValueArrayFactory.Setup(x => x.CreateDefaultValueArray(this.cptParameterType.Iid)) .Returns(this.compoundDefaultValueArray); this.defaultValueArrayFactory.Setup(x => x.CreateDefaultValueArray(this.boolPt.Iid)) .Returns(this.scalarDefaultValueArray); this.OldParameterContextProvider.Setup(x => x.GetsourceValueSet(It.IsAny <Guid?>(), It.IsAny <Guid?>())).Returns((ParameterValueSet)null); }