From 82a50c8abf8d78f0ba01a2e98e5562898e2bde99 Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Mon, 3 Apr 2017 21:57:55 +0200 Subject: [PATCH 1/9] HW2 main part --- pom.xml | 7 ++ .../ru/javawebinar/topjava/SpringMain.java | 2 +- .../ru/javawebinar/topjava/model/Meal.java | 20 ++++-- .../topjava/repository/MealRepository.java | 9 +-- .../mock/InMemoryMealRepositoryImpl.java | 38 ++++++---- .../mock/InMemoryUserRepositoryImpl.java | 69 +++++++++++++++++++ .../mock/MockUserRepositoryImpl.java | 45 ------------ .../topjava/service/MealService.java | 11 +++ .../topjava/service/MealServiceImpl.java | 32 +++++++++ .../topjava/{model => to}/MealWithExceed.java | 2 +- .../javawebinar/topjava/util/MealsUtil.java | 2 +- .../javawebinar/topjava/util/UsersUtil.java | 30 ++++++++ .../javawebinar/topjava/web/MealServlet.java | 9 +-- .../topjava/web/meal/MealRestController.java | 28 +++++++- src/main/webapp/meals.jsp | 2 +- 15 files changed, 232 insertions(+), 74 deletions(-) create mode 100644 src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java delete mode 100644 src/main/java/ru/javawebinar/topjava/repository/mock/MockUserRepositoryImpl.java rename src/main/java/ru/javawebinar/topjava/{model => to}/MealWithExceed.java (96%) create mode 100644 src/main/java/ru/javawebinar/topjava/util/UsersUtil.java diff --git a/pom.xml b/pom.xml index 711746d..f3419d6 100644 --- a/pom.xml +++ b/pom.xml @@ -88,8 +88,15 @@ jstl 1.2 + + + com.google.guava + guava + 21.0 + + diff --git a/src/main/java/ru/javawebinar/topjava/SpringMain.java b/src/main/java/ru/javawebinar/topjava/SpringMain.java index 9fa857a..bfdb6bb 100644 --- a/src/main/java/ru/javawebinar/topjava/SpringMain.java +++ b/src/main/java/ru/javawebinar/topjava/SpringMain.java @@ -12,7 +12,7 @@ public class SpringMain { public static void main(String[] args) { // java 7 Automatic resource management try (ConfigurableApplicationContext appCtx = new ClassPathXmlApplicationContext("spring/spring-app.xml")) { - System.out.println("Bean definition names: " + Arrays.toString(appCtx.getBeanDefinitionNames())); + System.out.println("\n Bean definition names: " + Arrays.toString(appCtx.getBeanDefinitionNames())+"\n"); AdminRestController adminUserController = appCtx.getBean(AdminRestController.class); adminUserController.create(new User(null, "userName", "email", "password", Role.ROLE_ADMIN)); } diff --git a/src/main/java/ru/javawebinar/topjava/model/Meal.java b/src/main/java/ru/javawebinar/topjava/model/Meal.java index d243414..3ef467c 100644 --- a/src/main/java/ru/javawebinar/topjava/model/Meal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -9,7 +9,7 @@ * 11.01.2015. */ public class Meal { - private Integer id; + private volatile Integer id; private final LocalDateTime dateTime; @@ -17,15 +17,18 @@ public class Meal { private final int calories; - public Meal(LocalDateTime dateTime, String description, int calories) { - this(null, dateTime, description, calories); + private volatile int userID; + + public Meal(LocalDateTime dateTime, String description, int calories/*, int userID*/) { + this(null, dateTime, description, calories/*, userID*/); } - public Meal(Integer id, LocalDateTime dateTime, String description, int calories) { + public Meal(Integer id, LocalDateTime dateTime, String description, int calories/*, int userID*/) { this.id = id; this.dateTime = dateTime; this.description = description; this.calories = calories; +// this.userID = userID; } public Integer getId() { @@ -36,10 +39,19 @@ public void setId(Integer id) { this.id = id; } + public int getUserID() { + return userID; + } + + public void setUserID(int userID) { + this.userID = userID; + } + public LocalDateTime getDateTime() { return dateTime; } + public String getDescription() { return description; } diff --git a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java index f80eec9..6ab99be 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java +++ b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java @@ -1,6 +1,7 @@ package ru.javawebinar.topjava.repository; import ru.javawebinar.topjava.model.Meal; +import ru.javawebinar.topjava.model.User; import java.util.Collection; @@ -9,11 +10,11 @@ * 06.03.2015. */ public interface MealRepository { - Meal save(Meal Meal); + Meal save(Meal meal, int userID); - void delete(int id); + void delete(int id, int userID); - Meal get(int id); + Meal get(int id, int userID); - Collection getAll(); + Collection getAll(int userID); } diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java index f6ead51..7eb3878 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java @@ -1,48 +1,62 @@ package ru.javawebinar.topjava.repository.mock; +import org.springframework.stereotype.Repository; import ru.javawebinar.topjava.model.Meal; import ru.javawebinar.topjava.repository.MealRepository; import ru.javawebinar.topjava.util.MealsUtil; -import java.util.Collection; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; /** * GKislin * 15.09.2015. */ +@Repository public class InMemoryMealRepositoryImpl implements MealRepository { private Map repository = new ConcurrentHashMap<>(); private AtomicInteger counter = new AtomicInteger(0); { - MealsUtil.MEALS.forEach(this::save); + MealsUtil.MEALS.forEach((meal) -> save(meal, 1)); } + @Override - public Meal save(Meal meal) { + public Meal save(Meal meal, int userID) { if (meal.isNew()) { meal.setId(counter.incrementAndGet()); + meal.setUserID(userID); } repository.put(meal.getId(), meal); return meal; } @Override - public void delete(int id) { - repository.remove(id); + public void delete(int id, int userID) { + if (repository.get(id).getUserID() == userID) { + repository.remove(id); + } } @Override - public Meal get(int id) { - return repository.get(id); + public Meal get(int id, int userID) { + if (repository.get(id).getUserID() == userID) { + return repository.get(id); + } else { + return null; + } } @Override - public Collection getAll() { - return repository.values(); - } -} + public List getAll(int userID) { + List meallist = repository.values().stream() + .filter((val) -> val.getUserID() == userID) + .collect(Collectors.toList()); + meallist.sort((o1, o2) -> o2.getDateTime().compareTo(o1.getDateTime())); + return meallist; + } +} \ No newline at end of file diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java new file mode 100644 index 0000000..a9b7ae6 --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java @@ -0,0 +1,69 @@ +package ru.javawebinar.topjava.repository.mock; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Repository; +import ru.javawebinar.topjava.model.User; +import ru.javawebinar.topjava.repository.UserRepository; +import ru.javawebinar.topjava.util.UsersUtil; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +@Repository +public class InMemoryUserRepositoryImpl implements UserRepository { + private static final Logger LOG = LoggerFactory.getLogger(InMemoryUserRepositoryImpl.class); + private Map repository = new ConcurrentHashMap<>(); + private AtomicInteger counter = new AtomicInteger(0); + + { + UsersUtil.USERS.forEach(this::save); + } + + + @Override + public boolean delete(int id) { + LOG.info("delete " + id); + + if (repository.containsKey(id)) { + repository.remove(id); + return true; + } else { + return false; + } + } + + @Override + public User save(User user) { + LOG.info("save " + user); + if (user.isNew()) { + user.setId(counter.incrementAndGet()); + } + + repository.put(user.getId(), user); + return user; + } + + @Override + public User get(int id) { + LOG.info("get " + id); + return repository.get(id); + } + + @Override + public List getAll() { + LOG.info("getAll"); + return repository.entrySet().stream() + .map((val) -> val.getValue()) + .collect(Collectors.toList()); + } + + @Override + public User getByEmail(String email){ + LOG.info("getByEmail " + email); + return getAll().stream().filter( user -> user.getEmail().equals(email)).findFirst().orElse(null); + } +} diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/MockUserRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/MockUserRepositoryImpl.java deleted file mode 100644 index f3704e6..0000000 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/MockUserRepositoryImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package ru.javawebinar.topjava.repository.mock; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Repository; -import ru.javawebinar.topjava.model.User; -import ru.javawebinar.topjava.repository.UserRepository; - -import java.util.Collections; -import java.util.List; - -@Repository -public class MockUserRepositoryImpl implements UserRepository { - private static final Logger LOG = LoggerFactory.getLogger(MockUserRepositoryImpl.class); - - @Override - public boolean delete(int id) { - LOG.info("delete " + id); - return true; - } - - @Override - public User save(User user) { - LOG.info("save " + user); - return user; - } - - @Override - public User get(int id) { - LOG.info("get " + id); - return null; - } - - @Override - public List getAll() { - LOG.info("getAll"); - return Collections.emptyList(); - } - - @Override - public User getByEmail(String email) { - LOG.info("getByEmail " + email); - return null; - } -} diff --git a/src/main/java/ru/javawebinar/topjava/service/MealService.java b/src/main/java/ru/javawebinar/topjava/service/MealService.java index b63fc9b..7d15106 100644 --- a/src/main/java/ru/javawebinar/topjava/service/MealService.java +++ b/src/main/java/ru/javawebinar/topjava/service/MealService.java @@ -1,4 +1,15 @@ package ru.javawebinar.topjava.service; +import ru.javawebinar.topjava.model.Meal; + +import java.util.Collection; + public interface MealService { + Meal save(Meal meal, int userID); + + void delete(int id, int userID); + + Meal get(int id, int userID); + + Collection getAll(int userID); } \ No newline at end of file diff --git a/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java b/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java index 9017380..b8dbc40 100644 --- a/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java +++ b/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java @@ -1,9 +1,41 @@ package ru.javawebinar.topjava.service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.javawebinar.topjava.model.Meal; import ru.javawebinar.topjava.repository.MealRepository; +import ru.javawebinar.topjava.util.exception.NotFoundException; +import java.util.Collection; + +@Service public class MealServiceImpl implements MealService { + @Autowired private MealRepository repository; + @Override + public Meal save(Meal meal, int userID) { + return repository.save(meal, userID); + } + + @Override + public void delete(int id, int userID) { + repository.delete(id, userID); + } + + @Override + public Meal get(int id, int userID) { + Meal result = repository.get(id, userID); + + if (result == null) throw new NotFoundException("Not found Meal with id:"+id); + + return result; + + } + + @Override + public Collection getAll(int userID) { + return repository.getAll(userID); + } } \ No newline at end of file diff --git a/src/main/java/ru/javawebinar/topjava/model/MealWithExceed.java b/src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java similarity index 96% rename from src/main/java/ru/javawebinar/topjava/model/MealWithExceed.java rename to src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java index 204c177..53795a2 100644 --- a/src/main/java/ru/javawebinar/topjava/model/MealWithExceed.java +++ b/src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java @@ -1,4 +1,4 @@ -package ru.javawebinar.topjava.model; +package ru.javawebinar.topjava.to; import java.time.LocalDateTime; diff --git a/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java b/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java index bceab4d..55533ae 100644 --- a/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java +++ b/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java @@ -1,7 +1,7 @@ package ru.javawebinar.topjava.util; import ru.javawebinar.topjava.model.Meal; -import ru.javawebinar.topjava.model.MealWithExceed; +import ru.javawebinar.topjava.to.MealWithExceed; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/src/main/java/ru/javawebinar/topjava/util/UsersUtil.java b/src/main/java/ru/javawebinar/topjava/util/UsersUtil.java new file mode 100644 index 0000000..51273aa --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/util/UsersUtil.java @@ -0,0 +1,30 @@ +package ru.javawebinar.topjava.util; + +import com.google.common.collect.Sets; +import ru.javawebinar.topjava.model.NamedEntity; +import ru.javawebinar.topjava.model.Role; +import ru.javawebinar.topjava.model.User; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +/** + * Created by Администратор on 02.04.2017. + */ +public class UsersUtil { + + public static final List USERS; + + static { + List list = new ArrayList( + Arrays.asList( + new User(null, "User", "user@gmail.com", "user", Role.ROLE_ADMIN, Role.ROLE_USER), + new User(null, "Admin", "admin@gmail.com", "admin", 2000, true, + Sets.newHashSet(Role.ROLE_USER)) + )); + list.sort(Comparator.comparing(NamedEntity::getName)); + USERS = list; + } +} diff --git a/src/main/java/ru/javawebinar/topjava/web/MealServlet.java b/src/main/java/ru/javawebinar/topjava/web/MealServlet.java index d3c0b7c..a546923 100644 --- a/src/main/java/ru/javawebinar/topjava/web/MealServlet.java +++ b/src/main/java/ru/javawebinar/topjava/web/MealServlet.java @@ -2,6 +2,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ru.javawebinar.topjava.AuthorizedUser; import ru.javawebinar.topjava.model.Meal; import ru.javawebinar.topjava.repository.mock.InMemoryMealRepositoryImpl; import ru.javawebinar.topjava.repository.MealRepository; @@ -43,7 +44,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) Integer.valueOf(request.getParameter("calories"))); LOG.info(meal.isNew() ? "Create {}" : "Update {}", meal); - repository.save(meal); + repository.save(meal, AuthorizedUser.id()); response.sendRedirect("meals"); } @@ -55,14 +56,14 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t case "delete": int id = getId(request); LOG.info("Delete {}", id); - repository.delete(id); + repository.delete(id, AuthorizedUser.id()); response.sendRedirect("meals"); break; case "create": case "update": final Meal meal = action.equals("create") ? new Meal(LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES), "", 1000) : - repository.get(getId(request)); + repository.get(getId(request), AuthorizedUser.id()); request.setAttribute("meal", meal); request.getRequestDispatcher("/meal.jsp").forward(request, response); break; @@ -70,7 +71,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t default: LOG.info("getAll"); request.setAttribute("meals", - MealsUtil.getWithExceeded(repository.getAll(), MealsUtil.DEFAULT_CALORIES_PER_DAY)); + MealsUtil.getWithExceeded(repository.getAll(AuthorizedUser.id()), MealsUtil.DEFAULT_CALORIES_PER_DAY)); request.getRequestDispatcher("/meals.jsp").forward(request, response); break; } diff --git a/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java b/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java index ab4e8ea..afdf7c5 100644 --- a/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java +++ b/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java @@ -1,8 +1,34 @@ package ru.javawebinar.topjava.web.meal; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import ru.javawebinar.topjava.model.Meal; import ru.javawebinar.topjava.service.MealService; -public class MealRestController { +import java.util.Collection; + +@Controller +public class MealRestController implements MealService{ + @Autowired private MealService service; + @Override + public Meal save(Meal meal, int userID) { + return service.save(meal,userID); + } + + @Override + public void delete(int id, int userID) { + service.delete(id,userID); + } + + @Override + public Meal get(int id, int userID) { + return service.get(id,userID); + } + + @Override + public Collection getAll(int userID) { + return service.getAll(userID); + } } \ No newline at end of file diff --git a/src/main/webapp/meals.jsp b/src/main/webapp/meals.jsp index 45b4709..942a245 100644 --- a/src/main/webapp/meals.jsp +++ b/src/main/webapp/meals.jsp @@ -32,7 +32,7 @@ - + <%--${meal.dateTime.toLocalDate()} ${meal.dateTime.toLocalTime()}--%> From 7a13987a7a7d4f1b24e7f91ea3950854ee94e8ec Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Mon, 3 Apr 2017 22:08:42 +0200 Subject: [PATCH 2/9] HW2 main part --- src/main/java/ru/javawebinar/topjava/web/MealServlet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/web/MealServlet.java b/src/main/java/ru/javawebinar/topjava/web/MealServlet.java index a546923..c18723c 100644 --- a/src/main/java/ru/javawebinar/topjava/web/MealServlet.java +++ b/src/main/java/ru/javawebinar/topjava/web/MealServlet.java @@ -41,7 +41,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) Meal meal = new Meal(id.isEmpty() ? null : Integer.valueOf(id), LocalDateTime.parse(request.getParameter("dateTime")), request.getParameter("description"), - Integer.valueOf(request.getParameter("calories"))); + Integer.parseInt(request.getParameter("calories"))); LOG.info(meal.isNew() ? "Create {}" : "Update {}", meal); repository.save(meal, AuthorizedUser.id()); @@ -79,6 +79,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t private int getId(HttpServletRequest request) { String paramId = Objects.requireNonNull(request.getParameter("id")); - return Integer.valueOf(paramId); + return Integer.parseInt(paramId); } } \ No newline at end of file From 3647976b16b6149cc5b9a339db09647539e64f22 Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Tue, 4 Apr 2017 00:33:18 +0200 Subject: [PATCH 3/9] HW2 main part. Some bug was fixed --- .../javawebinar/topjava/model/BaseEntity.java | 4 ---- .../ru/javawebinar/topjava/model/Meal.java | 4 ++++ .../ru/javawebinar/topjava/model/User.java | 18 ++++++++++++++++++ .../topjava/repository/MealRepository.java | 5 ++--- .../mock/InMemoryMealRepositoryImpl.java | 11 +++++++---- .../mock/InMemoryUserRepositoryImpl.java | 14 +++++++------- 6 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java index f15234b..2aa5148 100644 --- a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java +++ b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java @@ -14,10 +14,6 @@ public void setId(Integer id) { this.id = id; } - public Integer getId() { - return id; - } - public boolean isNew() { return (this.id == null); } diff --git a/src/main/java/ru/javawebinar/topjava/model/Meal.java b/src/main/java/ru/javawebinar/topjava/model/Meal.java index 3ef467c..e553a58 100644 --- a/src/main/java/ru/javawebinar/topjava/model/Meal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -31,6 +31,10 @@ public Meal(Integer id, LocalDateTime dateTime, String description, int calories // this.userID = userID; } + public Meal() { + + } + public Integer getId() { return id; } diff --git a/src/main/java/ru/javawebinar/topjava/model/User.java b/src/main/java/ru/javawebinar/topjava/model/User.java index f0971e1..4897e91 100644 --- a/src/main/java/ru/javawebinar/topjava/model/User.java +++ b/src/main/java/ru/javawebinar/topjava/model/User.java @@ -80,6 +80,24 @@ public String getPassword() { return password; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof User)) return false; + + User user = (User) o; + + if (!name.equals(user.name)) return false; + return email.equals(user.email); + } + + @Override + public int hashCode() { + int result = email.hashCode(); + result = 31 * result + email.hashCode(); + return result; + } + @Override public String toString() { return "User (" + diff --git a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java index 6ab99be..ebc208a 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java +++ b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java @@ -1,9 +1,8 @@ package ru.javawebinar.topjava.repository; import ru.javawebinar.topjava.model.Meal; -import ru.javawebinar.topjava.model.User; -import java.util.Collection; +import java.util.List; /** * GKislin @@ -16,5 +15,5 @@ public interface MealRepository { Meal get(int id, int userID); - Collection getAll(int userID); + List getAll(int userID); } diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java index 7eb3878..e85de7d 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java @@ -10,6 +10,8 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import static java.util.Collections.EMPTY_LIST; + /** * GKislin * 15.09.2015. @@ -43,10 +45,11 @@ public void delete(int id, int userID) { @Override public Meal get(int id, int userID) { - if (repository.get(id).getUserID() == userID) { - return repository.get(id); + Meal chekedMeal = repository.get(id); + if (chekedMeal.getUserID() == userID) { + return chekedMeal; } else { - return null; + return new Meal(); } } @@ -57,6 +60,6 @@ public List getAll(int userID) { .collect(Collectors.toList()); meallist.sort((o1, o2) -> o2.getDateTime().compareTo(o1.getDateTime())); - return meallist; + return meallist.isEmpty()? Collections.EMPTY_LIST : meallist; } } \ No newline at end of file diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java index a9b7ae6..002c079 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java @@ -28,21 +28,21 @@ public class InMemoryUserRepositoryImpl implements UserRepository { public boolean delete(int id) { LOG.info("delete " + id); - if (repository.containsKey(id)) { - repository.remove(id); - return true; - } else { + if (repository.remove(id) == null) { return false; + } else { + return true; } } @Override public User save(User user) { LOG.info("save " + user); - if (user.isNew()) { - user.setId(counter.incrementAndGet()); + if (!repository.containsValue(user)) { + if (user.isNew()) { + user.setId(counter.incrementAndGet()); + } } - repository.put(user.getId(), user); return user; } From 4fabdf860d7b581b919fb4196bcaf07b27e912f5 Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Tue, 4 Apr 2017 19:59:32 +0200 Subject: [PATCH 4/9] HW2 main part. Some bug was fixed --- src/main/java/ru/javawebinar/topjava/model/BaseEntity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java index 2aa5148..f15234b 100644 --- a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java +++ b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java @@ -14,6 +14,10 @@ public void setId(Integer id) { this.id = id; } + public Integer getId() { + return id; + } + public boolean isNew() { return (this.id == null); } From ceb273698fa63028f41535396e4795d035845aa6 Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Tue, 4 Apr 2017 20:03:15 +0200 Subject: [PATCH 5/9] HW2 main part. Some bug was fixed --- src/main/java/ru/javawebinar/topjava/model/Meal.java | 4 ---- .../topjava/repository/mock/InMemoryMealRepositoryImpl.java | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/model/Meal.java b/src/main/java/ru/javawebinar/topjava/model/Meal.java index e553a58..3ef467c 100644 --- a/src/main/java/ru/javawebinar/topjava/model/Meal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -31,10 +31,6 @@ public Meal(Integer id, LocalDateTime dateTime, String description, int calories // this.userID = userID; } - public Meal() { - - } - public Integer getId() { return id; } diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java index e85de7d..8926848 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java @@ -49,7 +49,7 @@ public Meal get(int id, int userID) { if (chekedMeal.getUserID() == userID) { return chekedMeal; } else { - return new Meal(); + return null; } } From d0148283e1cc83db3a3d706d7d579e013ed1f318 Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Tue, 4 Apr 2017 20:12:25 +0200 Subject: [PATCH 6/9] Meal extends NamedEntity --- README.md | 2 +- cv.md | 2 +- .../javawebinar/topjava/model/BaseEntity.java | 2 +- .../ru/javawebinar/topjava/model/Meal.java | 32 ++++--------------- .../javawebinar/topjava/util/MealsUtil.java | 2 +- src/main/webapp/meal.jsp | 2 +- src/main/webapp/meals.jsp | 2 +- 7 files changed, 12 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 78785ef..fde1c27 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + Старинная китайская поговорка -## Описание и план проекта +## Описание и план проекта ### Демо разрабатываемого приложения ### [Изменения проекта (Release Notes)](ReleaseNotes.md) ### Требования к участникам, Wiki diff --git a/cv.md b/cv.md index 0999159..29834b3 100644 --- a/cv.md +++ b/cv.md @@ -51,7 +51,7 @@ - на English иметь желательно. Если вакансия опублинована на Englsih - шлите на нем. Часто могут на нем попросить, если работодатель иностранный. - удобно иметь резюме где то в инете (hh, linkedin, google doc, чтобы им было удобно делиться). -### Позиционирование проекта Topjava: +### Позиционирование проекта Topjava: - После завершения проекта вы освоите все заявленные в нем технологии - вставьте их в квалификацию (включая java 8 Stream and Time API). В разделе опыт работы (если у вас нет коммерческого опыта) вставьте: Участие в разработке Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей diff --git a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java index f15234b..43c0d7f 100644 --- a/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java +++ b/src/main/java/ru/javawebinar/topjava/model/BaseEntity.java @@ -1,7 +1,7 @@ package ru.javawebinar.topjava.model; public class BaseEntity { - protected Integer id; + protected volatile Integer id; public BaseEntity() { } diff --git a/src/main/java/ru/javawebinar/topjava/model/Meal.java b/src/main/java/ru/javawebinar/topjava/model/Meal.java index 3ef467c..28c7b01 100644 --- a/src/main/java/ru/javawebinar/topjava/model/Meal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -8,36 +8,25 @@ * GKislin * 11.01.2015. */ -public class Meal { - private volatile Integer id; - +public class Meal extends NamedEntity{ private final LocalDateTime dateTime; - private final String description; - private final int calories; private volatile int userID; - public Meal(LocalDateTime dateTime, String description, int calories/*, int userID*/) { - this(null, dateTime, description, calories/*, userID*/); + public Meal(LocalDateTime dateTime, String name, int calories/*, int userID*/) { + this(null, dateTime, name, calories/*, userID*/); } - public Meal(Integer id, LocalDateTime dateTime, String description, int calories/*, int userID*/) { + public Meal(Integer id, LocalDateTime dateTime, String name, int calories/*, int userID*/) { this.id = id; this.dateTime = dateTime; - this.description = description; + this.name = name; this.calories = calories; // this.userID = userID; } - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } public int getUserID() { return userID; @@ -51,11 +40,6 @@ public LocalDateTime getDateTime() { return dateTime; } - - public String getDescription() { - return description; - } - public int getCalories() { return calories; } @@ -68,16 +52,12 @@ public LocalTime getTime() { return dateTime.toLocalTime(); } - public boolean isNew() { - return id == null; - } - @Override public String toString() { return "Meal{" + "id=" + id + ", dateTime=" + dateTime + - ", description='" + description + '\'' + + ", name='" + name + '\'' + ", calories=" + calories + '}'; } diff --git a/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java b/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java index 55533ae..9883969 100644 --- a/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java +++ b/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java @@ -65,6 +65,6 @@ public static List getFilteredWithExceededByCycle(List mea } public static MealWithExceed createWithExceed(Meal meal, boolean exceeded) { - return new MealWithExceed(meal.getId(), meal.getDateTime(), meal.getDescription(), meal.getCalories(), exceeded); + return new MealWithExceed(meal.getId(), meal.getDateTime(), meal.getName(), meal.getCalories(), exceeded); } } \ No newline at end of file diff --git a/src/main/webapp/meal.jsp b/src/main/webapp/meal.jsp index 7541b41..f14bcbc 100644 --- a/src/main/webapp/meal.jsp +++ b/src/main/webapp/meal.jsp @@ -37,7 +37,7 @@
Description:
-
+
Calories:
diff --git a/src/main/webapp/meals.jsp b/src/main/webapp/meals.jsp index 942a245..c08322a 100644 --- a/src/main/webapp/meals.jsp +++ b/src/main/webapp/meals.jsp @@ -39,7 +39,7 @@ <%--<%=TimeUtil.toString(meal.getDateTime())%>--%> ${fn:formatDateTime(meal.dateTime)} - ${meal.description} + ${meal.name} ${meal.calories} Update Delete From 3e5f7d6b34025df2612cdd14c1e7a18b77dfb790 Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Tue, 4 Apr 2017 22:54:32 +0200 Subject: [PATCH 7/9] Bug fixing --- .../topjava/to/MealWithExceed.java | 12 ++++---- .../javawebinar/topjava/web/MealServlet.java | 28 +++++++++++++++---- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java b/src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java index 53795a2..36bd046 100644 --- a/src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java +++ b/src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java @@ -11,16 +11,16 @@ public class MealWithExceed { private final LocalDateTime dateTime; - private final String description; + private final String name; private final int calories; private final boolean exceed; - public MealWithExceed(Integer id, LocalDateTime dateTime, String description, int calories, boolean exceed) { + public MealWithExceed(Integer id, LocalDateTime dateTime, String name, int calories, boolean exceed) { this.id = id; this.dateTime = dateTime; - this.description = description; + this.name = name; this.calories = calories; this.exceed = exceed; } @@ -33,8 +33,8 @@ public LocalDateTime getDateTime() { return dateTime; } - public String getDescription() { - return description; + public String getName() { + return name; } public int getCalories() { @@ -50,7 +50,7 @@ public String toString() { return "MealWithExceed{" + "id=" + id + ", dateTime=" + dateTime + - ", description='" + description + '\'' + + ", name='" + name + '\'' + ", calories=" + calories + ", exceed=" + exceed + '}'; diff --git a/src/main/java/ru/javawebinar/topjava/web/MealServlet.java b/src/main/java/ru/javawebinar/topjava/web/MealServlet.java index c18723c..7c40af3 100644 --- a/src/main/java/ru/javawebinar/topjava/web/MealServlet.java +++ b/src/main/java/ru/javawebinar/topjava/web/MealServlet.java @@ -2,11 +2,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; import ru.javawebinar.topjava.AuthorizedUser; import ru.javawebinar.topjava.model.Meal; +import ru.javawebinar.topjava.model.Role; +import ru.javawebinar.topjava.model.User; import ru.javawebinar.topjava.repository.mock.InMemoryMealRepositoryImpl; import ru.javawebinar.topjava.repository.MealRepository; import ru.javawebinar.topjava.util.MealsUtil; +import ru.javawebinar.topjava.web.meal.MealRestController; +import ru.javawebinar.topjava.web.user.AdminRestController; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -16,6 +22,7 @@ import java.io.IOException; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; +import java.util.Arrays; import java.util.Objects; /** @@ -25,12 +32,21 @@ public class MealServlet extends HttpServlet { private static final Logger LOG = LoggerFactory.getLogger(MealServlet.class); - private MealRepository repository; +// private MealRepository repository; + MealRestController mealRestController; + AdminRestController adminUserController; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - repository = new InMemoryMealRepositoryImpl(); + try (ConfigurableApplicationContext appCtx = new ClassPathXmlApplicationContext("spring/spring-app.xml")) { + System.out.println("\n Bean definition names: " + Arrays.toString(appCtx.getBeanDefinitionNames())+"\n"); + adminUserController = appCtx.getBean(AdminRestController.class); + adminUserController.create(new User(null, "userName", "email", "password", Role.ROLE_ADMIN)); + mealRestController = appCtx.getBean(MealRestController.class); + + } +// repository = new InMemoryMealRepositoryImpl(); } @Override @@ -44,7 +60,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) Integer.parseInt(request.getParameter("calories"))); LOG.info(meal.isNew() ? "Create {}" : "Update {}", meal); - repository.save(meal, AuthorizedUser.id()); + mealRestController.save(meal, AuthorizedUser.id()); response.sendRedirect("meals"); } @@ -56,14 +72,14 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t case "delete": int id = getId(request); LOG.info("Delete {}", id); - repository.delete(id, AuthorizedUser.id()); + mealRestController.delete(id, AuthorizedUser.id()); response.sendRedirect("meals"); break; case "create": case "update": final Meal meal = action.equals("create") ? new Meal(LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES), "", 1000) : - repository.get(getId(request), AuthorizedUser.id()); + mealRestController.get(getId(request), AuthorizedUser.id()); request.setAttribute("meal", meal); request.getRequestDispatcher("/meal.jsp").forward(request, response); break; @@ -71,7 +87,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t default: LOG.info("getAll"); request.setAttribute("meals", - MealsUtil.getWithExceeded(repository.getAll(AuthorizedUser.id()), MealsUtil.DEFAULT_CALORIES_PER_DAY)); + MealsUtil.getWithExceeded(mealRestController.getAll(AuthorizedUser.id()), MealsUtil.DEFAULT_CALORIES_PER_DAY)); request.getRequestDispatcher("/meals.jsp").forward(request, response); break; } From 7b53c0ca7115c12c0511c43b2b08ce54b2f9139e Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Wed, 5 Apr 2017 00:19:21 +0200 Subject: [PATCH 8/9] Bug fixing --- .../ru/javawebinar/topjava/model/Meal.java | 1 - .../topjava/repository/UserRepository.java | 1 + .../mock/InMemoryMealRepositoryImpl.java | 22 ++++++++++++------- .../mock/InMemoryUserRepositoryImpl.java | 10 ++++++--- .../topjava/service/UserService.java | 1 + .../topjava/service/UserServiceImpl.java | 1 + .../topjava/web/meal/MealRestController.java | 8 ++----- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/model/Meal.java b/src/main/java/ru/javawebinar/topjava/model/Meal.java index 28c7b01..4c179c6 100644 --- a/src/main/java/ru/javawebinar/topjava/model/Meal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -27,7 +27,6 @@ public Meal(Integer id, LocalDateTime dateTime, String name, int calories/*, int // this.userID = userID; } - public int getUserID() { return userID; } diff --git a/src/main/java/ru/javawebinar/topjava/repository/UserRepository.java b/src/main/java/ru/javawebinar/topjava/repository/UserRepository.java index c37b84d..6bee939 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/UserRepository.java +++ b/src/main/java/ru/javawebinar/topjava/repository/UserRepository.java @@ -3,6 +3,7 @@ import ru.javawebinar.topjava.model.User; import java.util.List; +import java.util.Optional; public interface UserRepository { User save(User user); diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java index 8926848..bcc9128 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java @@ -32,25 +32,31 @@ public Meal save(Meal meal, int userID) { meal.setId(counter.incrementAndGet()); meal.setUserID(userID); } - repository.put(meal.getId(), meal); + if (meal.getUserID() == userID){ + repository.put(meal.getId(), meal); + } return meal; } @Override public void delete(int id, int userID) { - if (repository.get(id).getUserID() == userID) { - repository.remove(id); + if (repository.containsKey(id)){ + if (repository.get(id).getUserID() == userID) { + repository.remove(id); + } } } @Override public Meal get(int id, int userID) { - Meal chekedMeal = repository.get(id); - if (chekedMeal.getUserID() == userID) { - return chekedMeal; - } else { - return null; + Meal chekedMeal = null; + if (repository.containsKey(id)) { + chekedMeal = repository.get(id); + if (chekedMeal.getUserID() == userID) { + return chekedMeal; + } } + return chekedMeal; } @Override diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java index 002c079..c2a43b8 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java @@ -6,9 +6,11 @@ import ru.javawebinar.topjava.model.User; import ru.javawebinar.topjava.repository.UserRepository; import ru.javawebinar.topjava.util.UsersUtil; +import ru.javawebinar.topjava.util.exception.NotFoundException; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -56,14 +58,16 @@ public User get(int id) { @Override public List getAll() { LOG.info("getAll"); - return repository.entrySet().stream() - .map((val) -> val.getValue()) + return repository.values().stream() + .sorted() .collect(Collectors.toList()); } @Override public User getByEmail(String email){ LOG.info("getByEmail " + email); - return getAll().stream().filter( user -> user.getEmail().equals(email)).findFirst().orElse(null); +// return getAll().stream().filter( user -> user.getEmail().equals(email)).findFirst().orElse(null); + + return repository.values().stream().filter(user -> email.equals(user.getEmail())).findFirst().orElse(new User()); } } diff --git a/src/main/java/ru/javawebinar/topjava/service/UserService.java b/src/main/java/ru/javawebinar/topjava/service/UserService.java index b48ae66..be5c3ad 100644 --- a/src/main/java/ru/javawebinar/topjava/service/UserService.java +++ b/src/main/java/ru/javawebinar/topjava/service/UserService.java @@ -5,6 +5,7 @@ import ru.javawebinar.topjava.util.exception.NotFoundException; import java.util.List; +import java.util.Optional; public interface UserService { diff --git a/src/main/java/ru/javawebinar/topjava/service/UserServiceImpl.java b/src/main/java/ru/javawebinar/topjava/service/UserServiceImpl.java index e4dd5ce..ec86fb0 100644 --- a/src/main/java/ru/javawebinar/topjava/service/UserServiceImpl.java +++ b/src/main/java/ru/javawebinar/topjava/service/UserServiceImpl.java @@ -7,6 +7,7 @@ import ru.javawebinar.topjava.util.exception.NotFoundException; import java.util.List; +import java.util.Optional; import static ru.javawebinar.topjava.util.ValidationUtil.checkNotFound; import static ru.javawebinar.topjava.util.ValidationUtil.checkNotFoundWithId; diff --git a/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java b/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java index afdf7c5..ecbc3be 100644 --- a/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java +++ b/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java @@ -8,26 +8,22 @@ import java.util.Collection; @Controller -public class MealRestController implements MealService{ +public class MealRestController { @Autowired private MealService service; - - @Override + public Meal save(Meal meal, int userID) { return service.save(meal,userID); } - @Override public void delete(int id, int userID) { service.delete(id,userID); } - @Override public Meal get(int id, int userID) { return service.get(id,userID); } - @Override public Collection getAll(int userID) { return service.getAll(userID); } From f8907ad4e252fd450ffc1727fdb1f2ad3ec286f5 Mon Sep 17 00:00:00 2001 From: Ivan Romanov Date: Wed, 5 Apr 2017 21:33:24 +0200 Subject: [PATCH 9/9] Bug fixing --- .../topjava/repository/MealRepository.java | 2 +- .../mock/InMemoryMealRepositoryImpl.java | 19 ++++++++++--------- .../mock/InMemoryUserRepositoryImpl.java | 2 +- .../topjava/service/MealServiceImpl.java | 9 ++------- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java index ebc208a..45f640f 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java +++ b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java @@ -15,5 +15,5 @@ public interface MealRepository { Meal get(int id, int userID); - List getAll(int userID); + List getAll(int userID); } diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java index bcc9128..f2fe7e1 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryMealRepositoryImpl.java @@ -5,13 +5,13 @@ import ru.javawebinar.topjava.repository.MealRepository; import ru.javawebinar.topjava.util.MealsUtil; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import static java.util.Collections.EMPTY_LIST; - /** * GKislin * 15.09.2015. @@ -32,7 +32,7 @@ public Meal save(Meal meal, int userID) { meal.setId(counter.incrementAndGet()); meal.setUserID(userID); } - if (meal.getUserID() == userID){ + if (meal.getUserID() == userID) { repository.put(meal.getId(), meal); } return meal; @@ -40,10 +40,11 @@ public Meal save(Meal meal, int userID) { @Override public void delete(int id, int userID) { - if (repository.containsKey(id)){ + try { if (repository.get(id).getUserID() == userID) { repository.remove(id); } + } catch (NullPointerException e) { } } @@ -62,10 +63,10 @@ public Meal get(int id, int userID) { @Override public List getAll(int userID) { List meallist = repository.values().stream() - .filter((val) -> val.getUserID() == userID) - .collect(Collectors.toList()); + .filter((val) -> val.getUserID() == userID) + .sorted((o1, o2) -> o2.getDateTime().compareTo(o1.getDateTime())) + .collect(Collectors.toList()); - meallist.sort((o1, o2) -> o2.getDateTime().compareTo(o1.getDateTime())); - return meallist.isEmpty()? Collections.EMPTY_LIST : meallist; + return meallist.isEmpty() ? Collections.EMPTY_LIST : meallist; } } \ No newline at end of file diff --git a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java index c2a43b8..bc6d47f 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java @@ -68,6 +68,6 @@ public User getByEmail(String email){ LOG.info("getByEmail " + email); // return getAll().stream().filter( user -> user.getEmail().equals(email)).findFirst().orElse(null); - return repository.values().stream().filter(user -> email.equals(user.getEmail())).findFirst().orElse(new User()); + return repository.values().stream().filter(user -> email.equals(user.getEmail())).findFirst().orElse(null); } } diff --git a/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java b/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java index b8dbc40..8b34feb 100644 --- a/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java +++ b/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java @@ -4,8 +4,7 @@ import org.springframework.stereotype.Service; import ru.javawebinar.topjava.model.Meal; import ru.javawebinar.topjava.repository.MealRepository; -import ru.javawebinar.topjava.util.exception.NotFoundException; - +import ru.javawebinar.topjava.util.ValidationUtil; import java.util.Collection; @Service @@ -26,11 +25,7 @@ public void delete(int id, int userID) { @Override public Meal get(int id, int userID) { - Meal result = repository.get(id, userID); - - if (result == null) throw new NotFoundException("Not found Meal with id:"+id); - - return result; + return ValidationUtil.checkNotFoundWithId(repository.get(id, userID), userID); }