package ch.rasc.wampspring.demo.various.grid; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import ch.rasc.wampspring.EventMessenger; import ch.rasc.wampspring.annotation.WampCallListener; import ch.rasc.wampspring.message.CallMessage; @Service public class BookService { @Autowired private EventMessenger eventMessenger; @Autowired private ObjectMapper objectMapper; @WampCallListener("grid:read") public Collection<Book> bookRead(CallMessage callMessage, StoreReadRequest readRequest) throws Throwable { System.out.println("bookRead:" + callMessage.getWebSocketSessionId()); List<Book> list = BookDb.list(); if (StringUtils.hasText(readRequest.getSort())) { List<SortInfo> si = this.objectMapper.readValue(readRequest.getSort(), new TypeReference<List<SortInfo>>() { // nothing_here }); readRequest.setSortInfo(si); Comparator<Book> comparator = PropertyComparatorFactory .createComparatorFromSorters(readRequest.getSortInfo()); if (comparator != null) { list.sort(comparator); } } return list; } @WampCallListener("grid:create") public List<Book> bookCreate(CallMessage callMessage, List<Book> books) { System.out.println("bookCreate:" + callMessage.getWebSocketSessionId()); List<Book> result = new ArrayList<>(); for (Book book : books) { BookDb.create(book); result.add(book); } this.eventMessenger.sendToAllExcept("grid:oncreate", result, callMessage.getWebSocketSessionId()); return result; } @WampCallListener("grid:update") public List<Book> bookUpdate(CallMessage callMessage, List<Book> books) { System.out.println("bookUpdate:" + callMessage.getWebSocketSessionId()); List<Book> result = new ArrayList<>(); for (Book book : books) { BookDb.update(book); result.add(book); } this.eventMessenger.sendToAllExcept("grid:onupdate", result, callMessage.getWebSocketSessionId()); return result; } @WampCallListener("grid:destroy") public void bookDestroy(CallMessage callMessage, List<Book> books) throws Throwable { System.out.println("bookDestroy:" + callMessage.getWebSocketSessionId()); for (Book book : books) { BookDb.delete(book); } this.eventMessenger.sendToAll("grid:ondestroy", books); } }