private void CreateAtomicAgents() { var atomicAgents = DefinitionFile.Entities.Where(e => !e.States.SourceText.IsEmptyOrWhitespace()); foreach (var agetEntity in atomicAgents) { var states = agetEntity.States.SourceText.Split(',') .Select(s => s.Trim()); var agent = new BcsAtomicAgentNode() { Name = agetEntity.Id }; agent.AllStates.AddRange(states.Select(s => new BcsAgentStateNode { Name = s })); DefinitionFile.AtomicAgents.Add(agent); } }
public static UIElement CreateAgentGrid(BcsAtomicAgentNode agent) { var gridBorder = new Border { Margin = new Thickness(5), BorderThickness = new Thickness(3), CornerRadius = new CornerRadius(3), BorderBrush = Brushes.LightBlue }; var grid = new Grid { Background = Brushes.LightBlue, }; gridBorder.Child = grid; AddRowControlToGrid(grid, new Label { Content = $"Agent: {agent.Name}" }); AddRowControlToGrid(grid, new Label { Content = $"Required state: {agent.CurrentState?.Name ?? "-"}" }); string possibleStatesText = $"Possible states: {string.Join(", ", agent.AllStates.Select(agentState => agentState.Name ?? string.Empty))}"; AddRowControlToGrid(grid, new Label { Content = possibleStatesText }); return gridBorder; }
protected override void VisitAgent(BcsAtomicAgentNode bcsAtomicAgent) { var item = new MenuItem() { Title = $"Agent: {bcsAtomicAgent.Name}{{{bcsAtomicAgent?.CurrentState?.Name ?? ""}}}" }; AddToTree(bcsAtomicAgent, item); }
protected override void VisitAgent(BcsAtomicAgentNode bcsAtomicAgent) { ResolveFromParent(bcsAtomicAgent); }
protected abstract void VisitAgent(BcsAtomicAgentNode bcsAtomicAgent);
private void CreateComponents() { var components = DefinitionFile.Entities.Where(e => e.States.SourceText.IsEmptyOrWhitespace() && !e.Composition.SourceText.Contains(".")); foreach (var component in components) { var componentNode = new BcsComponentNode() { Name = component.Id }; if (!component.Composition.SourceText.IsEmptyOrWhitespace()) { var componentAgents = component.Composition.SourceText.Split('|').Select(name => { name = name.Trim(); var matchingAgent = DefinitionFile.AtomicAgents.SingleOrDefault(agent => agent.Name == name); if (matchingAgent == null) { componentNode.Errors.Add(new NodeError($"Failed to find matching agent named {name} in the definition file.")); var dummyAgent = new BcsAtomicAgentNode() { Name = name }; DefinitionFile.AtomicAgents.Add(dummyAgent); return dummyAgent; } return matchingAgent; }).ToList(); componentNode.AtomicAgents.AddRange(componentAgents); } DefinitionFile.Components.Add(componentNode); } }