package com.example.listmaker.server.dao; import java.util.*; import java.util.logging.Logger; import com.googlecode.objectify.Key; import com.googlecode.objectify.Ref; import com.example.listmaker.common.domain.*; import com.turbomanage.gwt.server.servlet.AuthFilter; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; @Path("api/note") public class NoteDao extends RestServiceDao<Note> { private static final Logger LOG = Logger.getLogger(NoteDao.class.getName()); @Override @Path("all") @GET public ListWrapper<Note> findAll() { User user = AuthFilter.getUser(); List<Note> notes = this.listByOwner(user); return new ListWrapper<Note>(notes); } @Override public Key<Note> put(Note item) { item.setDateCreated(new Date()); Ref<Note> itemKey = Ref.create(super.put(item)); return itemKey.key(); } @Override @Path("save") @POST public Note save(Note item) { // Populate item // User creator = action.getItemCreator(); User creator = AuthFilter.getUser(); long listId = item.getListId(); Ref<User> creatorKey = Ref.create(creator); Ref<NoteList> listKey = Ref.create(Key.create(NoteList.class, listId)); item.setOwnerKey(creatorKey); item.setDateCreated(new Date()); item.setListKey(listKey); this.put(item); LOG.info("Saved item = " + item.getId() + "and itemText = " + item.getItemText()); return item; } @Override public void delete(Note note) { super.delete(note); } @Override @POST @Path("deleteMany") public int removeMany(List<Long> ids) { return super.removeMany(ids); } /** * Group items by list. * * @param items * @return List<NoteList> */ public static List<NoteList> prepareListOfLists(ArrayList<Note> items) { // List of lists List<NoteList> lol = new ArrayList<NoteList>(); NoteList pl = new NoteList(); for (Note item : items) { if (!item.getListName().equals(pl.getName())) { pl = new NoteList(); pl.setName(item.getListName()); pl.setItems(new ArrayList<Note>()); lol.add(pl); } pl.getItems().add(item); } return lol; } }