package com.example.listmaker.app.client.service; import com.example.listmaker.app.client.App; import com.example.listmaker.app.client.domain.NoteList; import com.example.listmaker.app.client.event.NoteListAddedEvent; import com.example.listmaker.app.client.event.NoteListsModifiedEvent; import com.google.gwt.core.shared.GWT; import com.turbomanage.gwt.client.Display; import com.turbomanage.gwt.client.event.ShowMessageEvent; import com.turbomanage.gwt.client.rest.ListResponse; import com.turbomanage.gwt.client.rest.RestApi; import com.turbomanage.gwt.client.ui.widget.MessageWidget; import javax.ws.rs.Path; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class NoteListService { private static final NoteListRestService service = GWT.create(NoteListRestService.class); @Path("/api/noteList") public interface NoteListRestService extends RestApi<NoteList> { } private HashMap<Long, NoteList> noteLists = new HashMap<Long, NoteList>(); public void refreshNoteLists(final AppCallback<ListResponse<NoteList>> callback) { if (noteLists != null) { List<NoteList> lists = new ArrayList<NoteList>(noteLists.values()); ListResponse<NoteList> res = new ListResponse<NoteList>(); res.list = lists; callback.handleSuccess(res); } service.listAll(new AppCallback<ListResponse<NoteList>>() { @Override public void handleSuccess(ListResponse<NoteList> responseObj) { setNoteLists(responseObj.list); callback.handleSuccess(responseObj); } }); } public void actionAddList(final Display display, NoteList pl) { service.save(pl, new AppCallback<NoteList>(display) { @Override public void handleSuccess(NoteList result) { NoteList newNoteList = result; addNoteList(newNoteList); App.getEventBus().fireEvent(new NoteListAddedEvent(new ArrayList<NoteList>(noteLists.values()), newNoteList)); } }); } /* * (non-Javadoc) * * @see * com.example.listmaker.client.service.NoteListService#deleteSelectedLists(net.customware * .gwt.presenter.client.Display, java.util.ArrayList) */ public void deleteSelectedLists(final Display display, ArrayList<NoteList> selectedLists) { final List<Long> listIds = new ArrayList<Long>(); for (NoteList list : selectedLists) { listIds.add(list.id); } service.deleteMany(listIds, new AppCallback<Integer>(display) { @Override public void handleSuccess(Integer value) { removeLists(listIds); App.getEventBus().fireEvent(new NoteListsModifiedEvent(noteLists)); App.getEventBus().fireEvent(new ShowMessageEvent("Deleted successfully", MessageWidget.MessageType.WARN)); } }); } private void removeLists(List<Long> listIds) { for (NoteList pl : noteLists.values()) { if (listIds.contains(pl.id)) { noteLists.remove(pl); } } } public NoteList getNoteList(Long id) { assert noteLists != null; return this.noteLists.get(id); } private void setNoteLists(List<NoteList> noteLists) { this.noteLists.clear(); for (NoteList pl : noteLists) { addNoteList(pl); } } private void addNoteList(NoteList noteList) { this.noteLists.put(noteList.id, noteList); } }