public override ExperimentNode Clone() { var clone = new CompositeComponentNode(); clone.CopyFrom(this); return(clone); }
/// <summary> /// Finds the owner node in the top level experiment, (at the top of the subgraphs hierarchy) of this sublevel component graph. /// Also it sets the node id full path. It contains the id of all the owners node of the subgraphs all the way to the top. /// </summary> private CompositeComponentNode GetTopOwnerNode() { //if the top owner node has not yet been discovered if (m_topOwnerCompositeComponentNode == null) { if (Owner == null) throw new InvalidOperationException("Application is at invalid state. Sublevel experiment always need to have an owner."); // if the owner of this sublevel experiment is the top level experiment TopLevelExperimentViewModel topLevel = Owner as TopLevelExperimentViewModel; if (topLevel != null) { // then return this component graph owner node (which is a part of the top level experiment) CompositeComponentGraph componentGraph = (CompositeComponentGraph)GetExperiment(); m_topOwnerCompositeComponentNode = componentGraph.OwnerNode; } else { //otherwise recursive to subgraph above this graph, until it finds top level experiment SubLevelExperimentViewModel levelAbove = (SubLevelExperimentViewModel)Owner; m_topOwnerCompositeComponentNode = levelAbove.GetTopOwnerNode(); //in addition, set this component graph node if path. CompositeComponentGraph componentGraph = (CompositeComponentGraph)GetExperiment(); GraphIdPath = componentGraph.OwnerNode.ID; } } return m_topOwnerCompositeComponentNode; }
/// <summary> /// Attempts to create the composite component. Component is created only if definition is a CompositeComponentMetadataDefinition. /// 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 CompositeComponentMetadataDefinition</param> /// <returns> /// true if metadatadefinition was a CompositeComponentMetadataDefinition and node has been created, otherwise false /// </returns> private static bool TryCreateCompositeComponent(IEditableExperiment experiment, MetadataDefinition metadataDefinition, SerializedVertexData data, out ExperimentNode newCreatedNode) { bool isCreated = false; newCreatedNode = null; CompositeComponentMetadataDefinition compositeComponentMetadataDefinition = metadataDefinition as CompositeComponentMetadataDefinition; if (compositeComponentMetadataDefinition != null) { data.Metadata = new CompositeComponentMetadata(compositeComponentMetadataDefinition, System.IO.Path.GetDirectoryName(experiment.ExperimentInfo.FilePath)); string componentNodeId = Guid.NewGuid().ToString(); string componentName = data.Metadata.Label; newCreatedNode = new CompositeComponentNode(componentNodeId, data, experiment.Settings); experiment.AddVertex(newCreatedNode); //set the log settings of the new component experiment.SetLogLevelSettings(newCreatedNode); isCreated = true; } return(isCreated); }
/// <summary> /// Initializes a new instance of the <see cref="CompositeComponentGraph"/> class with the given settings. /// </summary> /// <param name="compositeComponentNode">The composite component node.</param> /// <param name="componentGraph">The component graph.</param> /// <param name="settings">The settings. All components are initialized with with the given settings.</param> public CompositeComponentGraph(CompositeComponentNode compositeComponentNode, CompositeComponentGraph componentGraph) : base() { if (componentGraph == null) { throw new ArgumentException("Component graph cannot be null"); } CopyFrom(componentGraph); OwnerNode = compositeComponentNode; }
/// <summary> /// Generates the correct node based on metadata contained in serialized vertex data /// </summary> /// <param name="id">The id.</param> /// <param name="nodeData">The node data.</param> /// <returns>Experiment node</returns> private ExperimentNode NodeGenerator(string id, SerializedVertexData nodeData) { if (id == null) { throw new ArgumentNullException("id"); } if (nodeData == null) { throw new ArgumentNullException("nodeData"); } ExperimentNode node; if (nodeData.Metadata is StartNodeMetadata) { node = new ExperimentStartNode(id, nodeData); } else if (nodeData.Metadata is EndNodeMetadata) { node = new ExperimentEndNode(id, nodeData); } else if (nodeData.Metadata is DecisionMetadata) { node = new ExperimentDecisionNode(id, nodeData); } else if (nodeData.Metadata is ScopeMetadata) { node = new ScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is LoopScopeMetadata) { node = new LoopScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is CompositeComponentMetadata) { node = new CompositeComponentNode(id, nodeData); } else if (nodeData.Metadata is ExitDecisionMetadata) { node = new ExitDecisionNode(id, nodeData); } else { ComponentNode componentNode = new ComponentNode(id, nodeData); node = componentNode; } return(node); }
/// <summary> /// Initializes the component graph from ComponentMetadataDefinition graph /// </summary> /// <param name="node">The node.</param> /// <param name="settings">The settings.</param> public override void InitializeComponentGraph(CompositeComponentNode node, TraceLab.Core.Settings.Settings settings) { //each composite node gets its own copy of ComponentMetadataDefinition.ComponentGraph m_compositeComponentGraph = new CompositeComponentGraph(node, ComponentMetadataDefinition.ComponentGraph); m_compositeComponentGraph.Settings = settings; }
/// <summary> /// Initializes the component graph. /// </summary> /// <param name="node">The node.</param> /// <param name="settings">The settings.</param> public override void InitializeComponentGraph(CompositeComponentNode node, Settings.Settings settings) { //scope node just assigns itself to component graph ComponentGraph.OwnerNode = node; ComponentGraph.Settings = settings; }
/// <summary> /// Generates the correct node based on metadata contained in serialized vertex data /// </summary> /// <param name="id">The id.</param> /// <param name="nodeData">The node data.</param> /// <returns>Experiment node</returns> private ExperimentNode NodeGenerator(string id, SerializedVertexData nodeData) { if (id == null) throw new ArgumentNullException("id"); if (nodeData == null) throw new ArgumentNullException("nodeData"); ExperimentNode node; if (nodeData.Metadata is StartNodeMetadata) { node = new ExperimentStartNode(id, nodeData); } else if (nodeData.Metadata is EndNodeMetadata) { node = new ExperimentEndNode(id, nodeData); } else if (nodeData.Metadata is DecisionMetadata) { node = new ExperimentDecisionNode(id, nodeData); } else if (nodeData.Metadata is ScopeMetadata) { node = new ScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is LoopScopeMetadata) { node = new LoopScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is CompositeComponentMetadata) { node = new CompositeComponentNode(id, nodeData); } else if (nodeData.Metadata is ExitDecisionMetadata) { node = new ExitDecisionNode(id, nodeData); } // HERZUM SPRINT 1.0 else if (nodeData.Metadata is CommentMetadata) { // HERZUM SPRINT 1.2 // node = new CommentNode(id, nodeData); node = new CommentNode(id, (SerializedVertexDataWithSize) nodeData); // END HERZUM SPRINT 1.2 } // END HERZUM SPRINT 1.0 // HERZUM SPRINT 2.0: TLAB-65 CLASS else if (nodeData.Metadata is ChallengeMetadata) { node = new ChallengeNode(id, (SerializedVertexDataWithSize) nodeData); } // END HERZUM SPRINT 2.0: TLAB-65 CLASS else { ComponentNode componentNode = new ComponentNode(id, nodeData); node = componentNode; } return node; }
public abstract void InitializeComponentGraph(CompositeComponentNode node, TraceLab.Core.Settings.Settings settings);
/// <summary> /// Generates the correct node based on metadata contained in serialized vertex data /// </summary> /// <param name="id">The id.</param> /// <param name="nodeData">The node data.</param> /// <returns>Experiment node</returns> private ExperimentNode NodeGenerator(string id, SerializedVertexData nodeData) { if (id == null) { throw new ArgumentNullException("id"); } if (nodeData == null) { throw new ArgumentNullException("nodeData"); } ExperimentNode node; if (nodeData.Metadata is StartNodeMetadata) { node = new ExperimentStartNode(id, nodeData); } else if (nodeData.Metadata is EndNodeMetadata) { node = new ExperimentEndNode(id, nodeData); } else if (nodeData.Metadata is DecisionMetadata) { node = new ExperimentDecisionNode(id, nodeData); } else if (nodeData.Metadata is ScopeMetadata) { node = new ScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is LoopScopeMetadata) { node = new LoopScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is CompositeComponentMetadata) { node = new CompositeComponentNode(id, nodeData); } else if (nodeData.Metadata is ExitDecisionMetadata) { node = new ExitDecisionNode(id, nodeData); } // HERZUM SPRINT 1.0 else if (nodeData.Metadata is CommentMetadata) { // HERZUM SPRINT 1.2 // node = new CommentNode(id, nodeData); node = new CommentNode(id, (SerializedVertexDataWithSize)nodeData); // END HERZUM SPRINT 1.2 } // END HERZUM SPRINT 1.0 // HERZUM SPRINT 2.0: TLAB-65 CLASS else if (nodeData.Metadata is ChallengeMetadata) { node = new ChallengeNode(id, (SerializedVertexDataWithSize)nodeData); } // END HERZUM SPRINT 2.0: TLAB-65 CLASS else { ComponentNode componentNode = new ComponentNode(id, nodeData); node = componentNode; } return(node); }
public void GetGraphIdPath(CompositeComponentNode topOwnerCompositeComponentNode, ref string fullGraphIdPath) { if (topOwnerCompositeComponentNode == null) { if (topOwnerCompositeComponentNode.Owner == null) throw new InvalidOperationException("Application is at invalid state. Sublevel experiment always need to have an owner."); var ownerGraph = topOwnerCompositeComponentNode.Owner as CompositeComponentGraph; //check if node is in the subgraph, and also check if //ownerGraph.OwnerNode as it the top graph might be a composite component - if it is during the process of creating //the composite component bool isNodeInSubgraph = (ownerGraph != null && ownerGraph.OwnerNode != null); if (isNodeInSubgraph) { //recursive to graph above this graph, until it finds top level experiment CompositeComponentNode topCompositeComponentNode = ownerGraph.OwnerNode; GetGraphIdPath(topOwnerCompositeComponentNode, ref fullGraphIdPath); if (String.IsNullOrEmpty(fullGraphIdPath)) { fullGraphIdPath = ownerGraph.OwnerNode.ID; } else { //otherwise add to already existing path fullGraphIdPath += ":" + ownerGraph.OwnerNode.ID; } } } }
/// <summary> /// Attempts to create the composite component. Component is created only if definition is a CompositeComponentMetadataDefinition. /// 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 CompositeComponentMetadataDefinition</param> /// <returns> /// true if metadatadefinition was a CompositeComponentMetadataDefinition and node has been created, otherwise false /// </returns> private static bool TryCreateCompositeComponent(IEditableExperiment experiment, MetadataDefinition metadataDefinition, SerializedVertexData data, out ExperimentNode newCreatedNode) { bool isCreated = false; newCreatedNode = null; CompositeComponentMetadataDefinition compositeComponentMetadataDefinition = metadataDefinition as CompositeComponentMetadataDefinition; if (compositeComponentMetadataDefinition != null) { data.Metadata = new CompositeComponentMetadata(compositeComponentMetadataDefinition, System.IO.Path.GetDirectoryName(experiment.ExperimentInfo.FilePath)); string componentNodeId = Guid.NewGuid().ToString(); string componentName = data.Metadata.Label; newCreatedNode = new CompositeComponentNode(componentNodeId, data, experiment.Settings); experiment.AddVertex(newCreatedNode); //set the log settings of the new component experiment.SetLogLevelSettings(newCreatedNode); isCreated = true; } return isCreated; }
/// <summary> /// Generates the correct node based on metadata contained in serialized vertex data /// </summary> /// <param name="id">The id.</param> /// <param name="nodeData">The node data.</param> /// <returns>Experiment node</returns> private ExperimentNode NodeGenerator(string id, SerializedVertexData nodeData) { if (id == null) throw new ArgumentNullException("id"); if (nodeData == null) throw new ArgumentNullException("nodeData"); ExperimentNode node; if (nodeData.Metadata is StartNodeMetadata) { node = new ExperimentStartNode(id, nodeData); } else if (nodeData.Metadata is EndNodeMetadata) { node = new ExperimentEndNode(id, nodeData); } else if (nodeData.Metadata is DecisionMetadata) { node = new ExperimentDecisionNode(id, nodeData); } else if (nodeData.Metadata is ScopeMetadata) { node = new ScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is LoopScopeMetadata) { node = new LoopScopeNode(id, (SerializedVertexDataWithSize)nodeData); } else if (nodeData.Metadata is CompositeComponentMetadata) { node = new CompositeComponentNode(id, nodeData); } else if (nodeData.Metadata is ExitDecisionMetadata) { node = new ExitDecisionNode(id, nodeData); } else { ComponentNode componentNode = new ComponentNode(id, nodeData); node = componentNode; } return node; }
public override ExperimentNode Clone() { var clone = new CompositeComponentNode(); clone.CopyFrom(this); return clone; }