void descriptionTextBox_LostFocus(object sender, EventArgs e) { if (descriptionChanged) { TodoItemDescriptionChanged @event = new TodoItemDescriptionChanged(todoItem.id, descriptionTextBox.Text); state.LoadAndPersist(@event); descriptionChanged = false; } }
/// <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(); }
public IEvent transformEvent(TodoItemDescriptionChanged toTransform, IEvent transformAgainst) { if (transformAgainst.GetType().Equals(typeof(TodoItemCreated))) { //Change a description on an item that has been created server side without this side knowing, impossible. } else if (transformAgainst.GetType().Equals(typeof(TodoItemDeleted))) { if (toTransform.aggregateId == ((TodoItemDeleted)transformAgainst).aggregateId) //Delete todo item when other side has also deleted it. No problem, remove this event. return new Unused(); } else if (transformAgainst.GetType().Equals(typeof(TodoItemDescriptionChanged))) { // If it is the exact same, remove the event. if (toTransform.Equals((TodoItemDescriptionChanged)transformAgainst)) return new Unused(); // If it is On the same aggregate but not the same, conflict. else if (toTransform.aggregateId == ((TodoItemDescriptionChanged)transformAgainst).aggregateId) return null; } else if (transformAgainst.GetType().Equals(typeof(TodoItemsDeleted))) { //If the item deleted is deleted by multiple on the server, remove this event if (((TodoItemsDeleted)transformAgainst).aggregateIds.Contains(toTransform.aggregateId)) return new Unused(); } return toTransform; }