Skip to content

Commit c88d3b2

Browse files
committed
GroupByParent.transformCategories(): extract method from CategoryServiceImpl.
Also rename original method. Addressed to #592 No functional changes.
1 parent 0644433 commit c88d3b2

File tree

4 files changed

+52
-44
lines changed

4 files changed

+52
-44
lines changed

src/main/java/ru/mystamps/web/controller/SeriesController.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import ru.mystamps.web.controller.dto.AddSeriesSalesForm;
6464
import ru.mystamps.web.controller.dto.NullableImageUrl;
6565
import ru.mystamps.web.controller.interceptor.DownloadImageInterceptor;
66+
import ru.mystamps.web.dao.dto.CategoryDto;
6667
import ru.mystamps.web.dao.dto.LinkEntityDto;
6768
import ru.mystamps.web.dao.dto.PurchaseAndSaleDto;
6869
import ru.mystamps.web.dao.dto.SeriesInfoDto;
@@ -137,8 +138,11 @@ public void showForm(
137138

138139
String lang = LocaleUtils.getLanguageOrNull(userLocale);
139140

140-
List<FirstLevelCategoryDto> categories = categoryService.findFirstLevelCategories(lang);
141-
model.addAttribute("categories", categories);
141+
List<CategoryDto> categories =
142+
categoryService.findCategoriesWithParents(lang);
143+
List<FirstLevelCategoryDto> groupedCategories =
144+
GroupByParent.transformCategories(categories);
145+
model.addAttribute("categories", groupedCategories);
142146

143147
List<LinkEntityDto> countries = countryService.findAllAsLinkEntities(lang);
144148
model.addAttribute("countries", countries);
@@ -229,8 +233,11 @@ public String processInput(
229233
if (result.hasErrors()) {
230234
String lang = LocaleUtils.getLanguageOrNull(userLocale);
231235

232-
List<FirstLevelCategoryDto> categories = categoryService.findFirstLevelCategories(lang);
233-
model.addAttribute("categories", categories);
236+
List<CategoryDto> categories =
237+
categoryService.findCategoriesWithParents(lang);
238+
List<FirstLevelCategoryDto> groupedCategories =
239+
GroupByParent.transformCategories(categories);
240+
model.addAttribute("categories", groupedCategories);
234241

235242
List<LinkEntityDto> countries = countryService.findAllAsLinkEntities(lang);
236243
model.addAttribute("countries", countries);

src/main/java/ru/mystamps/web/service/CategoryService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@
2121
import java.util.List;
2222
import java.util.Set;
2323

24+
import ru.mystamps.web.dao.dto.CategoryDto;
2425
import ru.mystamps.web.dao.dto.LinkEntityDto;
2526
import ru.mystamps.web.service.dto.AddCategoryDto;
26-
import ru.mystamps.web.service.dto.FirstLevelCategoryDto;
2727

2828
@SuppressWarnings("PMD.TooManyMethods")
2929
public interface CategoryService {
3030
String add(AddCategoryDto dto, Integer userId);
3131
List<Integer> findIdsByNames(Set<String> names);
3232
List<Integer> findIdsWhenNameStartsWith(String name);
3333
List<LinkEntityDto> findAllAsLinkEntities(String lang);
34-
List<FirstLevelCategoryDto> findFirstLevelCategories(String lang);
34+
List<CategoryDto> findCategoriesWithParents(String lang);
3535
LinkEntityDto findOneAsLinkEntity(String slug, String lang);
3636
long countAll();
3737
long countCategoriesOf(Integer collectionId);

src/main/java/ru/mystamps/web/service/CategoryServiceImpl.java

+2-38
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
package ru.mystamps.web.service;
1919

20-
import java.util.ArrayList;
2120
import java.util.Collections;
2221
import java.util.Date;
2322
import java.util.List;
@@ -40,7 +39,6 @@
4039
import ru.mystamps.web.dao.dto.CategoryDto;
4140
import ru.mystamps.web.dao.dto.LinkEntityDto;
4241
import ru.mystamps.web.service.dto.AddCategoryDto;
43-
import ru.mystamps.web.service.dto.FirstLevelCategoryDto;
4442
import ru.mystamps.web.support.spring.security.HasAuthority;
4543
import ru.mystamps.web.util.LocaleUtils;
4644
import ru.mystamps.web.util.SlugUtils;
@@ -117,42 +115,8 @@ public List<LinkEntityDto> findAllAsLinkEntities(String lang) {
117115
@Override
118116
@Transactional(readOnly = true)
119117
@PreAuthorize(HasAuthority.CREATE_SERIES)
120-
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
121-
public List<FirstLevelCategoryDto> findFirstLevelCategories(String lang) {
122-
List<CategoryDto> categories = categoryDao.findCategoriesWithParents(lang);
123-
if (categories.isEmpty()) {
124-
return Collections.emptyList();
125-
}
126-
127-
// Because of Thymeleaf's restrictions we can't return categories as-is and need this
128-
// transformation
129-
List<FirstLevelCategoryDto> items = new ArrayList<>();
130-
String lastParent = null;
131-
FirstLevelCategoryDto lastItem = null;
132-
133-
for (CategoryDto category : categories) {
134-
String name = category.getName();
135-
String slug = category.getSlug();
136-
String parent = category.getParentName();
137-
138-
boolean categoryWithoutParent = parent == null;
139-
boolean createNewItem = categoryWithoutParent || !parent.equals(lastParent);
140-
141-
if (createNewItem) {
142-
lastParent = parent;
143-
if (categoryWithoutParent) {
144-
lastItem = new FirstLevelCategoryDto(slug, name);
145-
} else {
146-
lastItem = new FirstLevelCategoryDto(parent);
147-
lastItem.addChild(slug, name);
148-
}
149-
items.add(lastItem);
150-
} else {
151-
lastItem.addChild(slug, name);
152-
}
153-
}
154-
155-
return items;
118+
public List<CategoryDto> findCategoriesWithParents(String lang) {
119+
return categoryDao.findCategoriesWithParents(lang);
156120
}
157121

158122
@Override

src/main/java/ru/mystamps/web/support/thymeleaf/GroupByParent.java

+37
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import java.util.Collections;
2222
import java.util.List;
2323

24+
import ru.mystamps.web.dao.dto.CategoryDto;
2425
import ru.mystamps.web.dao.dto.TransactionParticipantDto;
26+
import ru.mystamps.web.service.dto.FirstLevelCategoryDto;
2527
import ru.mystamps.web.service.dto.GroupedTransactionParticipantDto;
2628

2729
/**
@@ -72,4 +74,39 @@ public static List<GroupedTransactionParticipantDto> transformParticipants(
7274
return items;
7375
}
7476

77+
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
78+
public static List<FirstLevelCategoryDto> transformCategories(List<CategoryDto> categories) {
79+
if (categories.isEmpty()) {
80+
return Collections.emptyList();
81+
}
82+
83+
List<FirstLevelCategoryDto> items = new ArrayList<>();
84+
String lastParent = null;
85+
FirstLevelCategoryDto lastItem = null;
86+
87+
for (CategoryDto category : categories) {
88+
String name = category.getName();
89+
String slug = category.getSlug();
90+
String parent = category.getParentName();
91+
92+
boolean categoryWithoutParent = parent == null;
93+
boolean createNewItem = categoryWithoutParent || !parent.equals(lastParent);
94+
95+
if (createNewItem) {
96+
lastParent = parent;
97+
if (categoryWithoutParent) {
98+
lastItem = new FirstLevelCategoryDto(slug, name);
99+
} else {
100+
lastItem = new FirstLevelCategoryDto(parent);
101+
lastItem.addChild(slug, name);
102+
}
103+
items.add(lastItem);
104+
} else {
105+
lastItem.addChild(slug, name);
106+
}
107+
}
108+
109+
return items;
110+
}
111+
75112
}

0 commit comments

Comments
 (0)