/// <summary>
        /// Creates a random event. Needs to be updated every time new events get created!
        /// </summary>
        /// <returns>An event. </returns>
        private List<IEvent> getRandomEvent()
        {
            //returns less then specified number.
            int whichEvent = differentSeedRandom.Next(10);
            Debug.WriteLine("Case: " + whichEvent);
            switch (whichEvent)
            {
                    // List name changed
                case 0:
                    ListNameChanged listNameChanged = new ListNameChanged(getRandomString(nameLength));
                    return toList(listNameChanged);
                    // Todo item created
                case 1:
                    return toList(getRandomTodoItemCreated());
                    // Todo item description changed.
                case 2:
                    // Can only add events to items that exist.
                    if(getAvailableTodoItems().Count == 0)
                    {
                        break;
                    }
                    TodoItemDescriptionChanged todoItemDescriptionChanged = new TodoItemDescriptionChanged(getRandomTodoItemGuid(), getRandomString(descriptionLenght));
                    return toList(todoItemDescriptionChanged);
                    // Todo item name changed.
                case 3:
                    // Can only add events to items that exist.
                    if (getAvailableTodoItems().Count == 0)
                    {
                        break;
                    }
                    TodoItemNameChanged todoItemNameChanged = new TodoItemNameChanged(getRandomTodoItemGuid(), getRandomString(nameLength));
                    return toList(todoItemNameChanged);
                case 4:
                    // Need at least two items to change Priority. It's more of a swap priority.
                    if (getAvailableTodoItems().Count < 2)
                    {
                        break;
                    }
                    return getRandomTodoItemPriorityChanged();
                    // Todo item deleted.
                case 5:
                    if (getAvailableTodoItems().Count <= 1)
                    {
                        break;
                    }
                    return toList(getRandomTodoItemDeleted());
                    // Todo item Priority increased.
                case 6:
                    if (getAvailableTodoItems().Count == 0)
                    {
                        break;
                    }
                    return toList(new TodoItemPriorityIncreased(getRandomTodoItemGuid()));
                    // Todo item Priority decreased.
                case 7:
                    if (getAvailableTodoItems().Count == 0)
                    {
                        break;
                    }
                    TodoItemAggregate toDecrease = getAvailableTodoItems().ElementAt(
                                        differentSeedRandom.Next(getAvailableTodoItems().Count));

                    if (toDecrease.priority < 2)
                        break;
                    return toList(new TodoItemPriorityDecreased(toDecrease.id));
                    // Multiple delete of todo items.
                case 8:
                    if (getAvailableTodoItems().Count <=  3)
                        break;
                    // Build a list of items to remove. Random amount.
                    List<Guid> removedItems = new List<Guid>();
                    for (int i = 0; i < differentSeedRandom.Next(2, maxsimultaneousDelete + 1); i++)
                    {
                        removedItems.Add(getAvailableTodoItems().ElementAt(
                                        differentSeedRandom.Next(getAvailableTodoItems().Count)).id);
                    }
                    // Make sure there are no duplicates.
                    TodoItemsDeleted deletedItems = new TodoItemsDeleted(removedItems.Distinct().ToList());
                    return toList(deletedItems);
                case 9:
                    if (getAvailableTodoItems().Count == 0)
                        break;
                    return toList(getRandomTodoItemIndexChanged());

            }
            return getRandomEvent();
        }
 void nameText_TextChanged(object sender, EventArgs e)
 {
     ListNameChanged nameChangedEvent = new ListNameChanged(((TextBox)sender).Text);
     state.LoadAndPersist(nameChangedEvent);
 }
 public IEvent transformEvent(ListNameChanged toTransform, IEvent transformAgainst)
 {
     if (transformAgainst.GetType().Equals(typeof(ListNameChanged)))
     {
         if (toTransform.newName == ((ListNameChanged)transformAgainst).newName)
             return new Unused();
         //Cannot simultaniously change name.
         return null;
     }
     return toTransform;
 }