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); }