Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9da51fe

Browse filesBrowse files
author
Marianna Dorokhova
committed
зфеср 3_04
1 parent f8b4a96 commit 9da51fe
Copy full SHA for 9da51fe

File tree

Expand file treeCollapse file tree

3 files changed

+51
-50
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+51
-50
lines changed
Open diff view settings
Collapse file
+36Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package ru.javawebinar.topjava.repository.inmemory;
2+
3+
import ru.javawebinar.topjava.model.AbstractBaseEntity;
4+
5+
import java.util.Collection;
6+
import java.util.Map;
7+
import java.util.concurrent.ConcurrentHashMap;
8+
import java.util.concurrent.atomic.AtomicInteger;
9+
10+
public class InMemoryBaseRepository<T extends AbstractBaseEntity> {
11+
12+
private static final AtomicInteger counter = new AtomicInteger(0);
13+
14+
private final Map<Integer, T> map = new ConcurrentHashMap<>();
15+
16+
public T save(T entity) {
17+
if (entity.isNew()) {
18+
entity.setId(counter.incrementAndGet());
19+
map.put(entity.getId(), entity);
20+
return entity;
21+
}
22+
return map.computeIfPresent(entity.getId(), (id, oldT) -> entity);
23+
}
24+
25+
public boolean delete(int id) {
26+
return map.remove(id) != null;
27+
}
28+
29+
public T get(int id) {
30+
return map.get(id);
31+
}
32+
33+
Collection<T> getCollection() {
34+
return map.values();
35+
}
36+
}
Collapse file

‎src/main/java/ru/javawebinar/topjava/repository/inmemory/InMemoryMealRepository.java‎

Copy file name to clipboardExpand all lines: src/main/java/ru/javawebinar/topjava/repository/inmemory/InMemoryMealRepository.java
+10-19Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package ru.javawebinar.topjava.repository.inmemory;
22

33
import org.springframework.stereotype.Repository;
4-
import org.springframework.util.CollectionUtils;
54
import ru.javawebinar.topjava.model.Meal;
65
import ru.javawebinar.topjava.repository.MealRepository;
76
import ru.javawebinar.topjava.util.MealsUtil;
@@ -14,7 +13,6 @@
1413
import java.util.List;
1514
import java.util.Map;
1615
import java.util.concurrent.ConcurrentHashMap;
17-
import java.util.concurrent.atomic.AtomicInteger;
1816
import java.util.function.Predicate;
1917
import java.util.stream.Collectors;
2018

@@ -24,9 +22,8 @@
2422
@Repository
2523
public class InMemoryMealRepository implements MealRepository {
2624

27-
// Map userId -> (mealId-> meal)
28-
private final Map<Integer, Map<Integer, Meal>> usersMealsMap = new ConcurrentHashMap<>();
29-
private final AtomicInteger counter = new AtomicInteger(0);
25+
// Map userId -> mealRepository
26+
private final Map<Integer, InMemoryBaseRepository<Meal>> usersMealsMap = new ConcurrentHashMap<>();
3027

3128
{
3229
MealsUtil.meals.forEach(meal -> save(meal, USER_ID));
@@ -37,27 +34,21 @@ public class InMemoryMealRepository implements MealRepository {
3734

3835
@Override
3936
public Meal save(Meal meal, int userId) {
40-
// We cannot use method reference "ConcurrentHashMap::new" here. It will be equivalent wrong "new ConcurrentHashMap<>(userId)"
41-
Map<Integer, Meal> meals = usersMealsMap.computeIfAbsent(userId, uId -> new ConcurrentHashMap<>());
42-
if (meal.isNew()) {
43-
meal.setId(counter.incrementAndGet());
44-
meals.put(meal.getId(), meal);
45-
return meal;
46-
}
47-
return meals.computeIfPresent(meal.getId(), (id, oldMeal) -> meal);
37+
InMemoryBaseRepository<Meal> meals = usersMealsMap.computeIfAbsent(userId, uId -> new InMemoryBaseRepository<>());
38+
return meals.save(meal);
4839
}
4940

5041
@Override
5142
public boolean delete(int id, int userId) {
52-
Map<Integer, Meal> meals = usersMealsMap.get(userId);
53-
return meals != null && meals.remove(id) != null;
43+
InMemoryBaseRepository<Meal> meals = usersMealsMap.get(userId);
44+
return meals != null && meals.delete(id);
5445
}
5546

5647

5748

5849
@Override
5950
public Meal get(int id, int userId) {
60-
Map<Integer, Meal> meals = usersMealsMap.get(userId);
51+
InMemoryBaseRepository<Meal> meals = usersMealsMap.get(userId);
6152
return meals == null ? null : meals.get(id);
6253
}
6354

@@ -72,9 +63,9 @@ public List<Meal> getAll(int userId) {
7263
}
7364

7465
private List<Meal> filterByPredicate(int userId, Predicate<Meal> filter) {
75-
Map<Integer, Meal> meals = usersMealsMap.get(userId);
76-
return CollectionUtils.isEmpty(meals) ? Collections.emptyList() :
77-
meals.values().stream()
66+
InMemoryBaseRepository<Meal> meals = usersMealsMap.get(userId);
67+
return meals == null ? Collections.emptyList() :
68+
meals.getCollection().stream()
7869
.filter(filter)
7970
.sorted(Comparator.comparing(Meal::getDateTime).reversed())
8071
.collect(Collectors.toList());
Collapse file

‎src/main/java/ru/javawebinar/topjava/repository/inmemory/InMemoryUserRepository.java‎

Copy file name to clipboardExpand all lines: src/main/java/ru/javawebinar/topjava/repository/inmemory/InMemoryUserRepository.java
+5-31Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,50 +6,24 @@
66

77
import java.util.Comparator;
88
import java.util.List;
9-
import java.util.Map;
10-
import java.util.concurrent.ConcurrentHashMap;
11-
import java.util.concurrent.atomic.AtomicInteger;
129
import java.util.stream.Collectors;
1310

1411
@Repository
15-
public class InMemoryUserRepository implements UserRepository {
12+
public class InMemoryUserRepository extends InMemoryBaseRepository<User> implements UserRepository {
1613

17-
public static final int USER_ID = 1;
18-
public static final int ADMIN_ID = 2;
19-
20-
private final Map<Integer, User> usersMap = new ConcurrentHashMap<>();
21-
private final AtomicInteger counter = new AtomicInteger(0);
22-
23-
@Override
24-
public User save(User user) {
25-
if (user.isNew()) {
26-
user.setId(counter.incrementAndGet());
27-
usersMap.put(user.getId(), user);
28-
return user;
29-
}
30-
return usersMap.computeIfPresent(user.getId(), (id, oldUser) -> user);
31-
}
32-
33-
@Override
34-
public boolean delete(int id) {
35-
return usersMap.remove(id) != null;
36-
}
37-
38-
@Override
39-
public User get(int id) {
40-
return usersMap.get(id);
41-
}
14+
static final int USER_ID = 1;
15+
static final int ADMIN_ID = 2;
4216

4317
@Override
4418
public List<User> getAll() {
45-
return usersMap.values().stream()
19+
return getCollection().stream()
4620
.sorted(Comparator.comparing(User::getName).thenComparing(User::getEmail))
4721
.collect(Collectors.toList());
4822
}
4923

5024
@Override
5125
public User getByEmail(String email) {
52-
return usersMap.values().stream()
26+
return getCollection().stream()
5327
.filter(u -> email.equals(u.getEmail()))
5428
.findFirst()
5529
.orElse(null);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.