/// <summary> /// Fill the data source from all the data stored in all domain files /// </summary> /// <param name="domains">All the domain files used to populate the datasource</param> public ConversationDataSource(IEnumerable <IDomainData> domains) { domains = domains.Evaluate(); //We're going to be iterating over this a lot IEnumerable <DynamicEnumerationData> dynamicEnumerations = domains.SelectMany(d => d.DynamicEnumerations); IEnumerable <LocalDynamicEnumerationData> localDynamicEnumerations = domains.SelectMany(d => d.LocalDynamicEnumerations); IEnumerable <EnumerationData> enumerations = domains.SelectMany(d => d.Enumerations); IEnumerable <DecimalData> decimals = domains.SelectMany(d => d.Decimals); IEnumerable <IntegerData> integers = domains.SelectMany(d => d.Integers); IEnumerable <LocalizedStringData> localizedStrings = domains.SelectMany(d => d.LocalizedStrings); m_types = ConversationTypeSetFactory.MakeConstant(dynamicEnumerations, localDynamicEnumerations, enumerations, decimals, integers, localizedStrings); m_nodes.Removing += m_nodes_Removing; //NodeTypes must be generated before Nodes and can be generated before Types. NodeTypes may have interdependencies between files m_categories = domains.SelectMany(d => d.NodeTypes).ToList(); //GenerateCategories(m_categories); //Connectors must be generated after Types but before Nodes foreach (var connector in domains.SelectMany(d => d.Connectors)) { m_connectorDefinitions[connector.Id] = connector; } //Nodes must be generated after NodeTypes, Types and Connectors foreach (var node in domains.SelectMany(d => d.Nodes)) { var nodeGenerator = new NodeDataGenerator(node, m_types, m_connectorDefinitions, m_connectionRules, null); m_nodes[node.Guid] = new Tuple <Guid, NodeDataGenerator>(node.Category.GetValueOrDefault(DomainIDs.CategoryNone), nodeGenerator); //TODO: Make the Guid an Id<Category> } m_connectionRules.SetRules(domains.SelectMany(d => d.Connections)); m_domainErrors.AddRange(DetectErrors()); }
internal static ConstantTypeSet MakeConstant(IEnumerable <DynamicEnumerationData> dynamicEnumerations, IEnumerable <LocalDynamicEnumerationData> localDynamicEnumerations, IEnumerable <EnumerationData> enumerations, IEnumerable <DecimalData> decimals, IEnumerable <IntegerData> integers, IEnumerable <LocalizedStringData> localizedStrings) { IEnumerable <Tuple <ParameterType, string, ParameterGenerator> > others = new List <Tuple <ParameterType, string, ParameterGenerator> >() { Tuple.Create <ParameterType, string, ParameterGenerator>(StringParameter.ParameterType, "String", (name, id, def, document) => new StringParameter(name, id, def)), Tuple.Create <ParameterType, string, ParameterGenerator>(BooleanParameter.ParameterType, "Boolean", (name, id, def, document) => new BooleanParameter(name, id, def)), Tuple.Create <ParameterType, string, ParameterGenerator>(AudioParameter.ParameterType, "Audio", (name, id, def, document) => new AudioParameter(name, id)), }; var result = new ConstantTypeSet(dynamicEnumerations, localDynamicEnumerations, enumerations, decimals.Concat(BaseTypeDecimal.Data.Only()), integers.Concat(BaseTypeInteger.Data.Only()), localizedStrings.Concat(BaseTypeLocalizedString.Data.Only()), others); return(result); }