Beispiel #1
0
        /// <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());
        }
Beispiel #2
0
        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);
        }