package com.example.e4.rcp.todo.services.internal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.eclipse.e4.core.services.events.IEventBroker; import com.example.e4.rcp.todo.events.MyEventConstants; import com.example.e4.rcp.todo.model.ITodoService; import com.example.e4.rcp.todo.model.Todo; public class MyTodoServiceImpl implements ITodoService { private static int current = 1; private List<Todo> todos; // use dependency injection in MyTodoServiceImpl @Inject private IEventBroker broker; public MyTodoServiceImpl() { todos = createInitialModel(); } // always return a new copy of the data @Override public List<Todo> getTodos() { List<Todo> list = new ArrayList<Todo>(); for (Todo todo : todos) { list.add(todo.copy()); } return list; } // create or update an existing instance of Todo @Override public synchronized boolean saveTodo(Todo newTodo) { boolean created = false; Todo updateTodo = findById(newTodo.getId()); if (updateTodo == null) { created = true; updateTodo = new Todo(current++); todos.add(updateTodo); } updateTodo.setSummary(newTodo.getSummary()); updateTodo.setDescription(newTodo.getDescription()); updateTodo.setDone(newTodo.isDone()); updateTodo.setDueDate(newTodo.getDueDate()); // configure the event // send out events if (created) { broker.post(MyEventConstants.TOPIC_TODO_NEW, createEventData(MyEventConstants.TOPIC_TODO_NEW, String.valueOf(updateTodo.getId()))); } else { broker. post(MyEventConstants.TOPIC_TODO_UPDATE, createEventData(MyEventConstants.TOPIC_TODO_UPDATE, String.valueOf(updateTodo.getId()))); } return true; } @Override public Todo getTodo(long id) { Todo todo = findById(id); if (todo != null) { return todo.copy(); } return null; } @Override public boolean deleteTodo(long id) { Todo deleteTodo = findById(id); if (deleteTodo != null) { todos.remove(deleteTodo); // configure the event broker. post(MyEventConstants.TOPIC_TODO_DELETE, createEventData(MyEventConstants.TOPIC_TODO_DELETE, String.valueOf(deleteTodo.getId()))); return true; } return false; } // Example data, change if you like private List<Todo> createInitialModel() { List<Todo> list = new ArrayList<Todo>(); list.add(createTodo("Application model", "Flexible and extensible")); list.add(createTodo("DI", "@Inject as programming mode")); list.add(createTodo("OSGi", "Services")); list.add(createTodo("SWT", "Widgets")); list.add(createTodo("JFace", "Especially Viewers!")); list.add(createTodo("CSS Styling", "Style your application")); list.add(createTodo("Eclipse services", "Selection, model, Part")); list.add(createTodo("Renderer", "Different UI toolkit")); list.add(createTodo("Compatibility Layer", "Run Eclipse 3.x")); return list; } private Todo createTodo(String summary, String description) { return new Todo(current++, summary, description, false, new Date()); } private Todo findById(long id) { for (Todo todo : todos) { if (id == todo.getId()) { return todo; } } return null; } private Map<String, String> createEventData(String topic, String todoId) { Map<String, String> map = new HashMap<String, String>(); // in case the receiver wants to check the topic map.put(MyEventConstants.TOPIC_TODO, topic); // which todo has changed map.put(Todo.FIELD_ID, todoId); return map; } }