/// <summary> /// Attempts to create the composite component. Component is created only if definition is a DecisionMetadataDefinition. /// Otherwise method returns false, and null node. /// </summary> /// <param name="experiment">The experiment to which new component is added.</param> /// <param name="metadataDefinition">The metadata definition which component is created based on.</param> /// <param name="data">The data containing position of new vertex</param> /// <param name="newCreatedNode">Output of new created node; null if metadatadefinition was not a DecisionMetadataDefinition</param> /// <returns> /// true if metadatadefinition was a DecisionMetadataDefinition and node has been created, otherwise false /// </returns> private static bool TryCreateDecisionComponent(IEditableExperiment experiment, MetadataDefinition metadataDefinition, SerializedVertexData data, out ExperimentNode newCreatedNode) { bool isCreated = false; newCreatedNode = null; DecisionMetadataDefinition decisionMetadataDefinition = metadataDefinition as DecisionMetadataDefinition; if (decisionMetadataDefinition != null) { newCreatedNode = CreateDecisionComponent(experiment, decisionMetadataDefinition, data); isCreated = true; } return(isCreated); }
/// <summary> /// Creates the decision component. /// </summary> /// <param name="experiment">The experiment to which new component is added.</param> /// <param name="decisionMetadataDefinition">The decision metadata definition.</param> /// <param name="data">The data containing position of new vertex</param> /// <returns>Newly added desicion node (note, that in case of decision additional nodes are constructed, two scopes and exit decision node). They are not returned.</returns> private static ExperimentDecisionNode CreateDecisionComponent(IEditableExperiment experiment, DecisionMetadataDefinition decisionMetadataDefinition, SerializedVertexData data) { data.Metadata = new DecisionMetadata(decisionMetadataDefinition.Label); ExperimentDecisionNode decisionNode = new ExperimentDecisionNode(Guid.NewGuid().ToString(), data); experiment.AddVertex(decisionNode); if (decisionMetadataDefinition.ID == DecisionMetadataDefinition.DecisionGuid) { //generate corresponding scopes and exit nodes GenerateScopesAndExit(experiment, data, decisionNode); } //otherwise it is GoTo decision that does not have corresponding scopes, so simply return it return(decisionNode); }