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/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/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 d243414..4c179c6 100644 --- a/src/main/java/ru/javawebinar/topjava/model/Meal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -8,42 +8,37 @@ * GKislin * 11.01.2015. */ -public class Meal { - private Integer id; - +public class Meal extends NamedEntity{ private final LocalDateTime dateTime; - private final String description; - 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 name, int calories/*, int userID*/) { + this(null, dateTime, name, calories/*, userID*/); } - public Meal(Integer id, LocalDateTime dateTime, String description, int calories) { + 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 int getUserID() { + return userID; } - public void setId(Integer id) { - this.id = id; + public void setUserID(int userID) { + this.userID = userID; } public LocalDateTime getDateTime() { return dateTime; } - public String getDescription() { - return description; - } - public int getCalories() { return calories; } @@ -56,16 +51,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/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 f80eec9..45f640f 100644 --- a/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java +++ b/src/main/java/ru/javawebinar/topjava/repository/MealRepository.java @@ -2,18 +2,18 @@ import ru.javawebinar.topjava.model.Meal; -import java.util.Collection; +import java.util.List; /** * GKislin * 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(); + List getAll(int 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 f6ead51..f2fe7e1 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,72 @@ 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.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; /** * 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); + } + if (meal.getUserID() == userID) { + repository.put(meal.getId(), meal); } - repository.put(meal.getId(), meal); return meal; } @Override - public void delete(int id) { - repository.remove(id); + public void delete(int id, int userID) { + try { + if (repository.get(id).getUserID() == userID) { + repository.remove(id); + } + } catch (NullPointerException e) { + } } @Override - public Meal get(int id) { - return repository.get(id); + public Meal get(int id, int userID) { + Meal chekedMeal = null; + if (repository.containsKey(id)) { + chekedMeal = repository.get(id); + if (chekedMeal.getUserID() == userID) { + return chekedMeal; + } + } + return chekedMeal; } @Override - public Collection getAll() { - return repository.values(); - } -} + public List getAll(int userID) { + List meallist = repository.values().stream() + .filter((val) -> val.getUserID() == userID) + .sorted((o1, o2) -> o2.getDateTime().compareTo(o1.getDateTime())) + .collect(Collectors.toList()); + 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 new file mode 100644 index 0000000..bc6d47f --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/repository/mock/InMemoryUserRepositoryImpl.java @@ -0,0 +1,73 @@ +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 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; + +@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.remove(id) == null) { + return false; + } else { + return true; + } + } + + @Override + public User save(User user) { + LOG.info("save " + user); + if (!repository.containsValue(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.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 repository.values().stream().filter(user -> email.equals(user.getEmail())).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..8b34feb 100644 --- a/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java +++ b/src/main/java/ru/javawebinar/topjava/service/MealServiceImpl.java @@ -1,9 +1,36 @@ 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.ValidationUtil; +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) { + return ValidationUtil.checkNotFoundWithId(repository.get(id, userID), userID); + + } + + @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/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/model/MealWithExceed.java b/src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java similarity index 76% rename from src/main/java/ru/javawebinar/topjava/model/MealWithExceed.java rename to src/main/java/ru/javawebinar/topjava/to/MealWithExceed.java index 204c177..36bd046 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; @@ -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/util/MealsUtil.java b/src/main/java/ru/javawebinar/topjava/util/MealsUtil.java index bceab4d..9883969 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; @@ -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/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..7c40af3 100644 --- a/src/main/java/ru/javawebinar/topjava/web/MealServlet.java +++ b/src/main/java/ru/javawebinar/topjava/web/MealServlet.java @@ -2,10 +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; @@ -15,6 +22,7 @@ import java.io.IOException; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; +import java.util.Arrays; import java.util.Objects; /** @@ -24,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 @@ -40,10 +57,10 @@ 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); + mealRestController.save(meal, AuthorizedUser.id()); response.sendRedirect("meals"); } @@ -55,14 +72,14 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t case "delete": int id = getId(request); LOG.info("Delete {}", id); - repository.delete(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)); + mealRestController.get(getId(request), AuthorizedUser.id()); request.setAttribute("meal", meal); request.getRequestDispatcher("/meal.jsp").forward(request, response); break; @@ -70,7 +87,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(mealRestController.getAll(AuthorizedUser.id()), MealsUtil.DEFAULT_CALORIES_PER_DAY)); request.getRequestDispatcher("/meals.jsp").forward(request, response); break; } @@ -78,6 +95,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 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..ecbc3be 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,30 @@ 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; +import java.util.Collection; + +@Controller public class MealRestController { + @Autowired private MealService service; + + public Meal save(Meal meal, int userID) { + return service.save(meal,userID); + } + + public void delete(int id, int userID) { + service.delete(id,userID); + } + + public Meal get(int id, int userID) { + return service.get(id,userID); + } + public Collection getAll(int userID) { + return service.getAll(userID); + } } \ 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 45b4709..c08322a 100644 --- a/src/main/webapp/meals.jsp +++ b/src/main/webapp/meals.jsp @@ -32,14 +32,14 @@ - + <%--${meal.dateTime.toLocalDate()} ${meal.dateTime.toLocalTime()}--%> <%--<%=TimeUtil.toString(meal.getDateTime())%>--%> ${fn:formatDateTime(meal.dateTime)} - ${meal.description} + ${meal.name} ${meal.calories} Update Delete