protected override void ExecuteCore(Message messageData) { ModifyModel modifyModel = messageData.Get <ModifyModel>(); CommunityModel model = modifyModel.CurrentVersion; if (modifyModel.Modification.Target is not MessageModel messageModel) { return; } MessageModel updatedModel; switch (modifyModel.Modification.Property) { case MessageNameProperty _: updatedModel = messageModel.Clone(name: modifyModel.Modification.NewValue.AssertTypeOf <string>()); break; case MessageNamespaceProperty _: updatedModel = messageModel.Clone(@namespace: modifyModel.Modification.NewValue.AssertTypeOf <string>()); break; case MessageDecoratorDecoratedMessageProperty _: MessageDecoratorModel decoratorModel = (MessageDecoratorModel)messageModel; updatedModel = decoratorModel.Clone(modifyModel.Modification.NewValue.AssertTypeOf <Guid>()); break; default: throw new InvalidOperationException($"Property {modifyModel.Modification.Property} unknown for agent model."); } CommunityModel updatedCommunity = new(model.GeneratorSettings, model.Agents, ReplaceMessage()); OnMessage(new ModificationResult(updatedCommunity, messageData)); MessageModel[] ReplaceMessage() { MessageModel[] messages = new MessageModel[model.Messages.Length]; Array.Copy(model.Messages, messages, messages.Length); int messageIndex = Array.IndexOf(messages, messageModel); if (messageIndex < 0) { throw new InvalidOperationException("Could not find agent model in community."); } messages[messageIndex] = updatedModel; return(messages); } }
private void ViewModelOnPropertyChanged(object sender, PropertyChangedEventArgs e) { MessageModel oldModel = latestData.Item3.Messages.First(a => a.Id == latestData.Item1.ModelId); switch (e.PropertyName) { case nameof(MessageViewModel.Name): OnMessage(new ModificationRequest( latestData.Item2, new Modification(ModificationType.Change, oldModel.Name, latestData.Item1.Name, oldModel, new MessageNameProperty()))); break; case nameof(MessageViewModel.RelativeNamespace): OnMessage(new ModificationRequest( latestData.Item2, new Modification(ModificationType.Change, oldModel.Namespace, latestData.Item1.RelativeNamespace, oldModel, new MessageNamespaceProperty()))); break; case nameof(MessageViewModel.DecoratedMessage): MessageDecoratorModel oldDecoratorModel = (MessageDecoratorModel)oldModel; OnMessage(new ModificationRequest( latestData.Item2, new Modification(ModificationType.Change, oldDecoratorModel.DecoratedMessage, latestData.Item1.DecoratedMessage.ModelId, oldModel, new MessageDecoratorDecoratedMessageProperty()))); break; case nameof(MessageViewModel.MessageType): SwitchMessageType(oldModel); break; } }
private void SwitchMessageType(MessageModel oldModel) { MessageModel newModel; switch (latestData.Item1.MessageType) { case MessageType.Message: newModel = new MessageModel(oldModel.Name, oldModel.Namespace, oldModel.Id, oldModel.BuildIn); break; case MessageType.MessageDecorator: newModel = new MessageDecoratorModel(oldModel.Name, oldModel.Namespace, oldModel.Id, oldModel.BuildIn); break; default: throw new InvalidOperationException($"Message type {latestData.Item1.MessageType} is not known."); } OnMessage(new ModificationRequest(latestData.Item2, new Modification(ModificationType.Change, oldModel, newModel, oldModel.ContainingPackage, new PackageMessagesProperty()))); }