Projekt

Obecné

Profil

« Předchozí | Další » 

Revize cf12d561

Přidáno uživatelem Jakub Šmíd před asi 2 roky(ů)

Catalog change
- one-to-many associations now persist order
- text for search persists separators

re #9751
re #9754

Zobrazit rozdíly:

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