Exemplo n.º 1
0
        protected override InterceptionAction InterceptCore(Message messageData)
        {
            ModelSelectedForGeneration model = messageData.Get <ModelSelectedForGeneration>();
            string name;

            string[] namespaceParts;
            if (model.TryGet(out AgentModelSelectedForGeneration agentModel))
            {
                name           = agentModel.Agent.Name;
                namespaceParts = agentModel.Agent.Namespace.Split(new [] { '.' }, StringSplitOptions.RemoveEmptyEntries);
            }
            else
            {
                MessageModelSelectedForGeneration messageModel = messageData.Get <MessageModelSelectedForGeneration>();
                name           = messageModel.Message.Name;
                namespaceParts = messageModel.Message.Namespace.Split(new [] { '.' }, StringSplitOptions.RemoveEmptyEntries);
            }

            string path = Path.Combine(model.GenerationPath, Path.Combine(namespaceParts), $"{name}.cs");

            //TODO replace with must lead to new on message and donotpublish
            model.ReplaceWith(new ModelSelectedForGeneration(path, Array.Empty <Message>()));

            return(InterceptionAction.Continue);
        }
        private void OnMessagesCollected(MessageCollection <GenerateFilesRequested, ModelVersionCreated> set)
        {
            set.MarkAsConsumed(set.Message1);
            List <Message> messages = new();
            List <string>  errors   = new();

            foreach (AgentModel agentModel in set.Message2.Model.Agents)
            {
                List <MessageModel> consuming = new();
                List <MessageModel> producing = new();
                FindMessageModels(agentModel.ConsumingMessages, agentModel, "consuming", consuming,
                                  set.Message2.Model.Messages, errors);
                FindMessageModels(agentModel.ProducedMessages, agentModel, "producing", producing,
                                  set.Message2.Model.Messages, errors);
                Message message = AgentModelSelectedForGeneration.Decorate(new ModelSelectedForGeneration(
                                                                               set.Message1.Path, set), agentModel,
                                                                           consuming.ToArray(), producing.ToArray());
                if (agentModel is InterceptorAgentModel interceptorAgent)
                {
                    List <MessageModel> intercepting = new();
                    FindMessageModels(interceptorAgent.InterceptingMessages, agentModel, "intercepting", intercepting,
                                      set.Message2.Model.Messages, errors);
                    message = InterceptorAgentModelSelectedForGeneration.Decorate((AgentModelSelectedForGeneration)message, intercepting.ToArray());
                }
                messages.Add(message);
            }

            foreach (MessageModel modelMessage in set.Message2.Model.Messages)
            {
                if (modelMessage.BuildIn || modelMessage.IsGenericInstance)
                {
                    continue;
                }

                Message message =
                    MessageModelSelectedForGeneration.Decorate(new ModelSelectedForGeneration(set.Message1.Path, set),
                                                               modelMessage);
                if (modelMessage is MessageDecoratorModel decoratorModel &&
                    decoratorModel.DecoratedMessage != default)
                {
                    MessageModel decoratedMessage = GetMessageModel(decoratorModel.DecoratedMessage,
                                                                    set.Message2.Model.Messages,
                                                                    () => errors.Add($"No message definition found for message decorator definition {modelMessage.FullName()} with " +
                                                                                     $"defined message decorator {decoratorModel.DecoratedMessage}"));
                    message = MessageDecoratorSelectedForGeneration.Decorate((MessageModelSelectedForGeneration)message, decoratedMessage);
                }
                messages.Add(message);
            }

            if (errors.Any())
            {
                OnMessage(new ModelInvalid(errors.ToArray(), set));
            }
            else
            {
                OnMessage(new GeneratorSettingsDefined(set.Message2.Model.GeneratorSettings ?? new GeneratorSettings(), set.Message1.Path, set));
                OnMessages(messages);
            }
        }
        protected override void ExecuteCore(Message messageData)
        {
            MessageModelSelectedForGeneration messageModel = messageData.Get <MessageModelSelectedForGeneration>();
            Message message = GeneratingMessage.Decorate(new GeneratingFile(messageModel.Message.Name,
                                                                            messageModel.Message.FullNamespace(),
                                                                            messageModel.Get <ModelSelectedForGeneration>()
                                                                            .GenerationPath, messageModel));

            if (messageModel.TryGet(out MessageDecoratorSelectedForGeneration messageDecorator))
            {
                string messageNamespace = messageDecorator.DecoratedMessage.FullNamespace();
                string dependency       = messageNamespace != messageModel.Message.FullNamespace()
                                        ? messageNamespace
                                        : string.Empty;
                message = GeneratingMessageDecorator.Decorate((GeneratingMessage)message, dependency, messageDecorator.DecoratedMessage.Name);
            }
            OnMessage(message);
        }