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);
            }
        }
Пример #2
0
        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;
            }
        }
Пример #3
0
        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())));
        }