Skip to content

Commit 19362c3

Browse files
committed
feat: separate lccn and canceledLccn options (#825)
(cherry picked from commit eae1766)
1 parent 5c76897 commit 19362c3

24 files changed

+276
-81
lines changed

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## v5.0.5 YYYY-mm-DD
22
### Features
33
* Refactor Sub-Resource Saving to Background Job to Prevent DB Deadlocks ([MSEARCH-1056](https://folio-org.atlassian.net/browse/MSEARCH-1056))
4+
* Separate LCCN and Canceled LCCN identifiers search to lccn and canceledLccn options ([MSEARCH-1065](https://folio-org.atlassian.net/browse/MSEARCH-1065))
45

56
### Bug fixes
67
* Indexing: proper handling of delete item events ([MSEARCH-1064](https://folio-org.atlassian.net/browse/MSEARCH-1064))

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,7 @@ does not produce any values, so the following search options will return an empt
719719
| `issn` | term | `issn="1234*"` | Matches instances that have an ISSN identifier with the given value |
720720
| `oclc` | term | `oclc="1234*"` | Matches instances that have an OCLC identifier with the given value |
721721
| `lccn` | term | `lccn = "LCCN"` | Matches instances with the given lccn |
722+
| `canceledLccn` | term | `canceledLccn = "LCCN-OLD"` | Matches instances with the given canceled lccn |
722723
| `normalizedClassificationNumber` | term | `normalizedClassificationNumber == "LCCN"` | Matches instances with the given classification number (normalizes case, whitespaces, special characters, supports leading and trailing wildcard) |
723724
| `normalizedDate1` | term | `normalizedDate1>=1990` | Matches instances with the given Date1 (normalizes alpha 'u' characters) |
724725

@@ -787,6 +788,7 @@ does not produce any values, so the following search options will return an empt
787788
| `isTitleHeadingRef` | term | `isTitleHeadingRef == true` | Matches authorities with `personalNameTitle`, `sftPersonalNameTitle`, `saftPersonalNameTitle`, `corporateNameTitle`, `sftCorporateNameTitle`, `saftCorporateNameTitle`, `meetingNameTitle`, `sftMeetingNameTitle`, `saftMeetingNameTitle` |
788789
| `authRefType` | term | `authRefType == "Authorized"` | Matches authorities with `Authorized` auth/ref type |
789790
| `lccn` | term | `lccn = "LCCN"` | Matches authorities with the given lccn |
791+
| `canceledLccn` | term | `canceledLccn = "LCCN-OLD"` | Matches authorities with the given canceled lccn |
790792
| `identifiers.value` | term | `identifiers.value = "1023*"` | Matches authorities with the given identifier value |
791793
| `identifiers.identifierTypeId` | term | `identifiers.identifierTypeId=="123"` | Matches authorities that the given identifier type id |
792794
| `metadata.createdDate` | term | `metadata.createdDate > "2020-12-12"` | Matches authorities that were created after `2020-12-12` |

src/main/java/org/folio/search/service/setter/AbstractIdentifierProcessor.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.util.List;
99
import java.util.Objects;
1010
import java.util.Set;
11-
import lombok.Getter;
11+
import java.util.stream.Stream;
1212
import lombok.RequiredArgsConstructor;
1313
import lombok.extern.log4j.Log4j2;
1414
import org.folio.search.domain.dto.Identifier;
@@ -20,8 +20,18 @@
2020
public abstract class AbstractIdentifierProcessor<T> implements FieldProcessor<T, Set<String>> {
2121

2222
private final ReferenceDataService referenceDataService;
23-
@Getter
24-
private final List<String> identifierNames;
23+
24+
public abstract List<String> getIdentifierNames();
25+
26+
protected Set<String> getIdentifierValues(T entity) {
27+
return filterIdentifiersValue(getIdentifiers(entity));
28+
}
29+
30+
protected Stream<String> getIdentifierValuesStream(T entity) {
31+
return getIdentifierValues(entity).stream();
32+
}
33+
34+
protected abstract List<Identifier> getIdentifiers(T entity);
2535

2636
/**
2737
* Returns set of filtered identifiers value from event body by specified set of types.

src/main/java/org/folio/search/service/setter/AbstractLccnProcessor.java

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.folio.search.service.setter.authority;
2+
3+
import java.util.Collections;
4+
import java.util.List;
5+
import java.util.Optional;
6+
import org.folio.search.domain.dto.Authority;
7+
import org.folio.search.domain.dto.Identifier;
8+
import org.folio.search.integration.folio.ReferenceDataService;
9+
import org.folio.search.service.setter.AbstractIdentifierProcessor;
10+
11+
public abstract class AbstractAuthorityIdentifierProcessor extends AbstractIdentifierProcessor<Authority> {
12+
13+
protected AbstractAuthorityIdentifierProcessor(ReferenceDataService referenceDataService) {
14+
super(referenceDataService);
15+
}
16+
17+
@Override
18+
protected List<Identifier> getIdentifiers(Authority entity) {
19+
return Optional.ofNullable(entity)
20+
.map(Authority::getIdentifiers)
21+
.orElse(Collections.emptyList());
22+
}
23+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.folio.search.service.setter.authority;
2+
3+
import java.util.LinkedHashSet;
4+
import java.util.Objects;
5+
import java.util.Optional;
6+
import java.util.Set;
7+
import java.util.stream.Collectors;
8+
import org.folio.search.domain.dto.Authority;
9+
import org.folio.search.integration.folio.ReferenceDataService;
10+
import org.folio.search.service.lccn.LccnNormalizer;
11+
12+
public abstract class AbstractAuthorityLccnProcessor extends AbstractAuthorityIdentifierProcessor {
13+
14+
private final LccnNormalizer stringNormalizer;
15+
16+
protected AbstractAuthorityLccnProcessor(ReferenceDataService referenceDataService,
17+
LccnNormalizer stringNormalizer) {
18+
super(referenceDataService);
19+
this.stringNormalizer = stringNormalizer;
20+
}
21+
22+
@Override
23+
public Set<String> getFieldValue(Authority entity) {
24+
return getIdentifierValuesStream(entity)
25+
.map(stringNormalizer)
26+
.flatMap(Optional::stream)
27+
.filter(Objects::nonNull)
28+
.collect(Collectors.toCollection(LinkedHashSet::new));
29+
}
30+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.folio.search.service.setter.authority;
2+
3+
import java.util.List;
4+
import org.folio.search.integration.folio.ReferenceDataService;
5+
import org.folio.search.service.lccn.LccnNormalizer;
6+
import org.springframework.stereotype.Component;
7+
8+
@Component
9+
public class CanceledLccnAuthorityProcessor extends AbstractAuthorityLccnProcessor {
10+
11+
private static final List<String> IDENTIFIER_NAMES = List.of("Canceled LCCN");
12+
13+
/**
14+
* Used by dependency injection.
15+
*
16+
* @param referenceDataService {@link ReferenceDataService} bean
17+
* @param stringNormalizer {@link LccnNormalizer} bean
18+
*/
19+
public CanceledLccnAuthorityProcessor(ReferenceDataService referenceDataService, LccnNormalizer stringNormalizer) {
20+
super(referenceDataService, stringNormalizer);
21+
}
22+
23+
@Override
24+
public List<String> getIdentifierNames() {
25+
return IDENTIFIER_NAMES;
26+
}
27+
}
Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,27 @@
11
package org.folio.search.service.setter.authority;
22

3-
import java.util.Collections;
43
import java.util.List;
5-
import java.util.Optional;
6-
import org.folio.search.domain.dto.Authority;
7-
import org.folio.search.domain.dto.Identifier;
84
import org.folio.search.integration.folio.ReferenceDataService;
95
import org.folio.search.service.lccn.LccnNormalizer;
10-
import org.folio.search.service.setter.AbstractLccnProcessor;
116
import org.springframework.stereotype.Component;
127

138
@Component
14-
public class LccnAuthorityProcessor extends AbstractLccnProcessor<Authority> {
9+
public class LccnAuthorityProcessor extends AbstractAuthorityLccnProcessor {
10+
11+
private static final List<String> IDENTIFIER_NAMES = List.of("LCCN");
1512

1613
/**
1714
* Used by dependency injection.
1815
*
1916
* @param referenceDataService {@link ReferenceDataService} bean
20-
* @param lccnNormalizer {@link LccnNormalizer} bean
17+
* @param stringNormalizer {@link LccnNormalizer} bean
2118
*/
22-
public LccnAuthorityProcessor(ReferenceDataService referenceDataService, LccnNormalizer lccnNormalizer) {
23-
super(referenceDataService, lccnNormalizer);
19+
public LccnAuthorityProcessor(ReferenceDataService referenceDataService, LccnNormalizer stringNormalizer) {
20+
super(referenceDataService, stringNormalizer);
2421
}
2522

2623
@Override
27-
protected List<Identifier> getIdentifiers(Authority authority) {
28-
return Optional.ofNullable(authority)
29-
.map(Authority::getIdentifiers)
30-
.orElse(Collections.emptyList());
24+
public List<String> getIdentifierNames() {
25+
return IDENTIFIER_NAMES;
3126
}
3227
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.folio.search.service.setter.instance;
2+
3+
import java.util.Collections;
4+
import java.util.List;
5+
import java.util.Optional;
6+
import org.folio.search.domain.dto.Identifier;
7+
import org.folio.search.domain.dto.Instance;
8+
import org.folio.search.integration.folio.ReferenceDataService;
9+
import org.folio.search.service.setter.AbstractIdentifierProcessor;
10+
11+
public abstract class AbstractInstanceIdentifierProcessor extends AbstractIdentifierProcessor<Instance> {
12+
13+
protected AbstractInstanceIdentifierProcessor(ReferenceDataService referenceDataService) {
14+
super(referenceDataService);
15+
}
16+
17+
@Override
18+
protected List<Identifier> getIdentifiers(Instance entity) {
19+
return Optional.ofNullable(entity)
20+
.map(Instance::getIdentifiers)
21+
.orElse(Collections.emptyList());
22+
}
23+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.folio.search.service.setter.instance;
2+
3+
import java.util.LinkedHashSet;
4+
import java.util.Objects;
5+
import java.util.Optional;
6+
import java.util.Set;
7+
import java.util.stream.Collectors;
8+
import org.folio.search.domain.dto.Instance;
9+
import org.folio.search.integration.folio.ReferenceDataService;
10+
import org.folio.search.service.lccn.LccnNormalizer;
11+
12+
public abstract class AbstractInstanceLccnProcessor extends AbstractInstanceIdentifierProcessor {
13+
14+
private final LccnNormalizer stringNormalizer;
15+
16+
protected AbstractInstanceLccnProcessor(ReferenceDataService referenceDataService,
17+
LccnNormalizer stringNormalizer) {
18+
super(referenceDataService);
19+
this.stringNormalizer = stringNormalizer;
20+
}
21+
22+
@Override
23+
public Set<String> getFieldValue(Instance entity) {
24+
return getIdentifierValuesStream(entity)
25+
.map(stringNormalizer)
26+
.flatMap(Optional::stream)
27+
.filter(Objects::nonNull)
28+
.collect(Collectors.toCollection(LinkedHashSet::new));
29+
}
30+
}

0 commit comments

Comments
 (0)