Revize fb55e8e9
Přidáno uživatelem Jakub Šmíd před asi 2 roky(ů)
backend/src/main/java/cz/zcu/kiv/backendapi/catalog/CatalogItemServiceImpl.java | ||
---|---|---|
1 | 1 |
package cz.zcu.kiv.backendapi.catalog; |
2 | 2 |
|
3 |
import cz.zcu.kiv.backendapi.alternativename.AlternativeName;
|
|
3 |
import cz.zcu.kiv.backendapi.alternativename.CatalogItemName;
|
|
4 | 4 |
import cz.zcu.kiv.backendapi.bibliography.Bibliography; |
5 | 5 |
import cz.zcu.kiv.backendapi.country.Country; |
6 | 6 |
import cz.zcu.kiv.backendapi.exception.ApiRequestException; |
... | ... | |
10 | 10 |
import cz.zcu.kiv.backendapi.writtenform.WrittenForm; |
11 | 11 |
import lombok.RequiredArgsConstructor; |
12 | 12 |
import lombok.extern.slf4j.Slf4j; |
13 |
import org.apache.commons.lang3.StringUtils; |
|
13 | 14 |
import org.springframework.http.HttpStatus; |
14 | 15 |
import org.springframework.stereotype.Service; |
15 | 16 |
import org.springframework.transaction.annotation.Transactional; |
16 | 17 |
|
17 |
import java.util.ArrayList; |
|
18 |
import java.util.List; |
|
19 |
import java.util.Set; |
|
20 |
import java.util.UUID; |
|
18 |
import java.util.*; |
|
19 |
import java.util.concurrent.atomic.AtomicInteger; |
|
21 | 20 |
import java.util.function.Predicate; |
22 | 21 |
import java.util.regex.Matcher; |
23 | 22 |
import java.util.regex.Pattern; |
... | ... | |
140 | 139 |
|
141 | 140 |
Set<String> types = typeService.getAllTypesAsString(); |
142 | 141 |
|
143 |
String[] tokens = text.split("\\s+");
|
|
142 |
String[] tokens = text.split("((?<=\\s)|(?=\\s+))");
|
|
144 | 143 |
for (String token : tokens) { |
144 |
if (StringUtils.isBlank(token)) { |
|
145 |
highlightedText.append(token); |
|
146 |
continue; |
|
147 |
} |
|
145 | 148 |
Matcher matcherStart = START_PUNCTUATION_PATTERN.matcher(token); |
146 | 149 |
Matcher matcherEnd = END_PUNCTUATION_PATTERN.matcher(token); |
147 | 150 |
String prefix = ""; |
... | ... | |
162 | 165 |
} |
163 | 166 |
|
164 | 167 |
if (endTextIndex < startTextIndex) { |
165 |
highlightedText.append(prefix).append(" ");
|
|
168 |
highlightedText.append(prefix); |
|
166 | 169 |
continue; |
167 | 170 |
} |
168 | 171 |
|
... | ... | |
181 | 184 |
foundCatalogItems.add(foundItems.stream().map(this::convertEntityToDto).collect(Collectors.toList())); |
182 | 185 |
} |
183 | 186 |
} |
184 |
highlightedText.append(prefix).append(textToFind).append(suffix).append(" ");
|
|
187 |
highlightedText.append(prefix).append(textToFind).append(suffix); |
|
185 | 188 |
} |
186 |
highlightedText.setLength(highlightedText.length() - 1); |
|
187 | 189 |
|
188 | 190 |
pathDto.setText(highlightedText.toString()); |
189 | 191 |
pathDto.setFoundCatalogItems(foundCatalogItems); |
... | ... | |
207 | 209 |
|
208 | 210 |
Predicate<CatalogItem> predicateType = i -> finalType.equals("") || i.getTypes().stream().anyMatch(t -> patternType.matcher(t.getType()).matches()); |
209 | 211 |
Predicate<CatalogItem> predicateCountry = i -> finalCountry.equals("") || i.getCountries().stream().anyMatch(t -> patternCountry.matcher(t.getName()).matches()); |
210 |
Predicate<CatalogItem> predicateName = i -> finalName.equals("") || patternName.matcher(i.getName()).matches() || i.getAlternativeNames().stream().anyMatch(t -> patternName.matcher(t.getName()).matches());
|
|
212 |
Predicate<CatalogItem> predicateName = i -> finalName.equals("") || patternName.matcher(i.getName()).matches() || i.getAllNames().stream().anyMatch(t -> patternName.matcher(t.getName()).matches());
|
|
211 | 213 |
Predicate<CatalogItem> predicateWrittenForm = i -> finalWrittenForm.equals("") || i.getWrittenForms().stream().anyMatch(t -> patternWrittenForm.matcher(t.getForm()).matches()); |
212 | 214 |
|
213 | 215 |
catalogItems = catalogItems.stream().filter(predicateName.and(predicateCountry).and(predicateType).and(predicateWrittenForm)).collect(Collectors.toList()); |
... | ... | |
215 | 217 |
} |
216 | 218 |
|
217 | 219 |
/** |
218 |
* Saves catalog entity to database
|
|
220 |
* Saves catalog item to database
|
|
219 | 221 |
* |
220 |
* @param catalogItem catalog entity
|
|
222 |
* @param catalogItem catalog item
|
|
221 | 223 |
*/ |
222 | 224 |
private void saveCatalogEntity(CatalogItem catalogItem) { |
223 | 225 |
for (Type type : catalogItem.getTypes()) { |
... | ... | |
235 | 237 |
* @param catalogItem catalog item entity |
236 | 238 |
*/ |
237 | 239 |
private void convertDtoToEntity(CatalogItemDto catalogItemDto, CatalogItem catalogItem) { |
240 |
AtomicInteger counter = new AtomicInteger(1); |
|
241 |
|
|
238 | 242 |
catalogItem.setName(catalogItemDto.getName()); |
239 | 243 |
catalogItem.setCertainty(catalogItemDto.getCertainty()); |
240 | 244 |
catalogItem.setLatitude(catalogItemDto.getLatitude()); |
... | ... | |
242 | 246 |
|
243 | 247 |
catalogItem.getBibliography().clear(); |
244 | 248 |
catalogItem.getBibliography().addAll(catalogItemDto.getBibliography() |
245 |
.stream().map(s -> new Bibliography(s, catalogItem)).collect(Collectors.toSet()));
|
|
249 |
.stream().map(s -> new Bibliography(s, catalogItem, counter.getAndIncrement())).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
246 | 250 |
|
247 | 251 |
catalogItem.getTypes().clear(); |
248 | 252 |
catalogItem.getTypes().addAll(catalogItemDto.getTypes() |
249 |
.stream().map(Type::new).collect(Collectors.toSet()));
|
|
253 |
.stream().map(Type::new).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
250 | 254 |
|
251 | 255 |
catalogItem.getCountries().clear(); |
256 |
counter.set(1); |
|
252 | 257 |
catalogItem.getCountries().addAll(catalogItemDto.getCountries() |
253 |
.stream().map(s -> new Country(s, catalogItem)).collect(Collectors.toSet()));
|
|
258 |
.stream().map(s -> new Country(s, catalogItem, counter.getAndIncrement())).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
254 | 259 |
|
255 |
catalogItemDto.getAlternativeNames().add(catalogItemDto.getName()); |
|
256 |
catalogItem.getAlternativeNames().clear(); |
|
257 |
catalogItem.getAlternativeNames().addAll(catalogItemDto.getAlternativeNames() |
|
258 |
.stream().map(s -> new AlternativeName(s, catalogItem)).collect(Collectors.toSet())); |
|
260 |
catalogItem.getAllNames().clear(); |
|
261 |
counter.set(1); |
|
262 |
Set<String> allNames = new LinkedHashSet<>(); |
|
263 |
allNames.add(catalogItemDto.getName()); |
|
264 |
allNames.addAll(catalogItemDto.getAllNames()); |
|
265 |
catalogItem.getAllNames().addAll(allNames |
|
266 |
.stream().map(s -> new CatalogItemName(s, catalogItem, counter.getAndIncrement())).collect(Collectors.toCollection(LinkedHashSet::new))); |
|
259 | 267 |
|
260 | 268 |
catalogItem.getWrittenForms().clear(); |
269 |
counter.set(1); |
|
261 | 270 |
catalogItem.getWrittenForms().addAll(catalogItemDto.getWrittenForms() |
262 |
.stream().map(s -> new WrittenForm(s, catalogItem)).collect(Collectors.toSet()));
|
|
271 |
.stream().map(s -> new WrittenForm(s, catalogItem, counter.getAndIncrement())).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
263 | 272 |
|
264 | 273 |
catalogItem.setDescription(catalogItemDto.getDescription()); |
265 | 274 |
} |
... | ... | |
278 | 287 |
catalogItemDto.setLongitude(catalogItem.getLongitude()); |
279 | 288 |
catalogItemDto.setCertainty(catalogItem.getCertainty()); |
280 | 289 |
catalogItemDto.setBibliography(catalogItem.getBibliography() |
281 |
.stream().map(Bibliography::getSource).collect(Collectors.toSet()));
|
|
290 |
.stream().map(Bibliography::getSource).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
282 | 291 |
catalogItemDto.setTypes(catalogItem.getTypes() |
283 |
.stream().map(Type::getType).collect(Collectors.toSet()));
|
|
292 |
.stream().map(Type::getType).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
284 | 293 |
catalogItemDto.setCountries(catalogItem.getCountries() |
285 |
.stream().map(Country::getName).collect(Collectors.toSet()));
|
|
286 |
catalogItemDto.setAlternativeNames(catalogItem.getAlternativeNames()
|
|
287 |
.stream().map(AlternativeName::getName).collect(Collectors.toSet()));
|
|
294 |
.stream().map(Country::getName).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
295 |
catalogItemDto.setAllNames(catalogItem.getAllNames()
|
|
296 |
.stream().map(CatalogItemName::getName).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
288 | 297 |
catalogItemDto.setWrittenForms(catalogItem.getWrittenForms() |
289 |
.stream().map(WrittenForm::getForm).collect(Collectors.toSet()));
|
|
298 |
.stream().map(WrittenForm::getForm).collect(Collectors.toCollection(LinkedHashSet::new)));
|
|
290 | 299 |
catalogItemDto.setDescription(catalogItem.getDescription()); |
291 | 300 |
return catalogItemDto; |
292 | 301 |
} |
Také k dispozici: Unified diff
Catalog change
- one-to-many associations now persist order
- text for search persists separators
re #9751
re #9754