Ejemplo n.º 1
0
        public void QueueContainerAction(IEntityContainer container, Action action)
        {
            var tabs        = this.GeneratorConfiguration.HierarchyStack.Count;
            var tabText     = this.CurrentTabText;
            var parentModel = container.Parent;

            if (container.Facets.Length > 0)
            {
                if (container.HasFacetAttribute <AppNameAttribute>())
                {
                    var appNameAttribute = container.GetFacetAttribute <AppNameAttribute>();

                    if (this.HasRegisteredAppConfig())
                    {
                        var config = this.GeneratorConfiguration;

                        if (config.CurrentPass != GeneratorPass.Files)
                        {
                            throw new InvalidOperationException("Cannot have more than one container with app specific attributes");
                        }
                    }
                    else
                    {
                        KeyValuePair <string, IGeneratorOverrides> appNameOverridePair;
                        string argumentsKind;
                        IGeneratorOverrides appNameOverride;

                        appNameOverridePair = generatorOverridePairs.Where(o => o.Value.OverridesAppName).Last();

                        argumentsKind   = appNameOverridePair.Key;
                        appNameOverride = appNameOverridePair.Value;

                        if (appNameOverride == null)
                        {
                            this.GeneratorConfiguration.AppName = appNameAttribute.Name;
                        }
                        else
                        {
                            this.GeneratorConfiguration.AppName = appNameOverride.GetAppName(this.GeneratorConfiguration, argumentsKind);
                        }

                        this.GeneratorConfiguration.AppDescription = appNameAttribute.Description;
                        this.GeneratorConfiguration.ClientId       = appNameAttribute.Name;
                        this.GeneratorConfiguration.ClientSecret   = Guid.NewGuid().ToString();
                    }
                }

                baseObjectDictionary.Add(parentModel.ID, parentModel);
                baseObjectDictionary.Add(container.ID, container);

                container.EntityDictionary = baseObjectDictionary;

                foreach (var baseObject in container.GetFollowingDescendants(this.GeneratorConfiguration.PartsAliasResolver))
                {
                    baseObjectDictionary.Add(baseObject.ID, baseObject);
                    baseObject.EntityDictionary = baseObjectDictionary;
                }
            }
            else
            {
                baseObjectDictionary.Add(container.ID, container);
                baseObjectDictionary.Add(parentModel.ID, parentModel);

                container.EntityDictionary = baseObjectDictionary;

                if (container.CanFollowWithout())
                {
                    foreach (var baseObject in container.GetFollowingDescendants(this.GeneratorConfiguration.PartsAliasResolver))
                    {
                        if (container.PreventRecursion)
                        {
                            if (!baseObjectDictionary.ContainsKey(baseObject.ID))
                            {
                                baseObjectDictionary.Add(baseObject.ID, baseObject);
                            }
                        }
                        else
                        {
                            baseObjectDictionary.Add(baseObject.ID, baseObject);
                        }

                        baseObject.EntityDictionary = baseObjectDictionary;
                    }
                }
            }

            this.containerActionQueue.Enqueue(new ContainerAction(container, action));
        }