/// <summary> /// Create a <see cref="ThingTransaction"/> object from the <see cref="RequirementsSpecification"/> /// </summary> /// <returns>The <see cref="ThingTransaction"/></returns> private ThingTransaction CreateTransaction() { var transactionContext = TransactionContextResolver.ResolveContext(this.IterationClone); var transaction = new ThingTransaction(transactionContext, this.IterationClone); foreach (var externalIdentifierMap in this.IterationClone.ExternalIdentifierMap) { transaction.CreateOrUpdate(externalIdentifierMap); } foreach (var specMap in this.thingFactory.SpecificationMap) { transaction.CreateDeep(specMap.Value); } foreach (var relationshipMap in this.thingFactory.SpecRelationMap) { transaction.CreateDeep(relationshipMap.Value); } foreach (var relationshipMap in this.thingFactory.RelationGroupMap) { transaction.CreateDeep(relationshipMap.Value); } return(transaction); }
/// <summary> /// Creates an new <see cref="ElementDefinition"/> on the connected data-source and updates and valuesests of created contained parameters /// </summary> /// <param name="session"> /// The active <see cref="ISession"/> used to write to the data-source /// </param> /// <param name="iteration"> /// The <see cref="Iteration"/> that the template <see cref="ElementDefinition"/> is to be added to /// </param> /// <param name="elementDefinition"> /// the template <see cref="ElementDefinition"/> that is to be created. /// </param> /// <returns> /// an awaitable task /// </returns> public static async Task CreateElementDefinitionFromTemplate(ISession session, Iteration iteration, ElementDefinition elementDefinition) { var owner = session.QuerySelectedDomainOfExpertise(iteration); if (owner == null) { return; } elementDefinition.Owner = owner; foreach (var parameter in elementDefinition.Parameter) { parameter.Owner = owner; } var clonedParameters = new List <Parameter>(); foreach (var parameter in elementDefinition.Parameter) { clonedParameters.Add(parameter.Clone(true)); parameter.ValueSet.Clear(); } var transactionContext = TransactionContextResolver.ResolveContext(iteration); var iterationClone = iteration.Clone(false); var createTransaction = new ThingTransaction(transactionContext); createTransaction.CreateDeep(elementDefinition, iterationClone); var createOperationContainer = createTransaction.FinalizeTransaction(); await session.Write(createOperationContainer); var createdElementDefinition = iteration.Element.SingleOrDefault(x => x.Iid == elementDefinition.Iid); if (createdElementDefinition != null) { var updateTransaction = new ThingTransaction(transactionContext); foreach (var parameter in createdElementDefinition.Parameter) { var clonedParameter = clonedParameters.SingleOrDefault(x => x.ParameterType.Iid == parameter.ParameterType.Iid); if (clonedParameter != null) { var parameterValueSet = parameter.ValueSet[0]; var clonedParameterValuesSet = parameterValueSet.Clone(false); clonedParameterValuesSet.Manual = clonedParameter.ValueSet[0].Manual; updateTransaction.CreateOrUpdate(clonedParameterValuesSet); } } var updateOperationContainer = updateTransaction.FinalizeTransaction(); await session.Write(updateOperationContainer); } }