RED-9760: Changed anyHeadlineContains to act like in the previous version #473

Merged
dominique.eiflaender1 merged 1 commits from RED-9760-anyheadline-4.1 into release/4.348.x 2024-08-07 15:17:34 +02:00

View File

@ -1,10 +1,12 @@
package com.iqser.red.service.redaction.v1.server.model.document.nodes;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity;
import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree;
@ -33,7 +35,6 @@ import lombok.extern.slf4j.Slf4j;
@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true)
public class Section extends AbstractSemanticNode {
@Override
public NodeType getType() {
@ -60,7 +61,6 @@ public class Section extends AbstractSemanticNode {
}
@Override
public String toString() {
@ -85,7 +85,14 @@ public class Section extends AbstractSemanticNode {
*/
public boolean anyHeadlineContainsString(String value) {
return streamAllSubNodesOfType(NodeType.HEADLINE).anyMatch(h -> h.containsString(value)) || getHeadline().containsString(value);
boolean found = streamAllSubNodesOfType(NodeType.HEADLINE).anyMatch(h -> h.containsString(value)) || getHeadline().containsString(value);
if (!found) {
List<Headline> previousHeadlines = new ArrayList<>();
headlinesByPreviousSibling(this, previousHeadlines);
return previousHeadlines.stream()
.anyMatch(headline -> headline.containsString(value));
}
return true;
}
@ -97,8 +104,37 @@ public class Section extends AbstractSemanticNode {
*/
public boolean anyHeadlineContainsStringIgnoreCase(String value) {
return streamAllSubNodesOfType(NodeType.HEADLINE).anyMatch(h -> h.containsStringIgnoreCase(value)) || getHeadline().containsStringIgnoreCase(value);
boolean found = streamAllSubNodesOfType(NodeType.HEADLINE).anyMatch(h -> h.containsStringIgnoreCase(value)) || getHeadline().containsStringIgnoreCase(value);
if (!found) {
List<Headline> previousHeadlines = new ArrayList<>();
headlinesByPreviousSibling(this, previousHeadlines);
return previousHeadlines.stream()
.anyMatch(headline -> headline.containsStringIgnoreCase(value));
}
return true;
}
private void headlinesByPreviousSibling(SemanticNode section, List<Headline> found) {
if (section.getPreviousSibling()
.isPresent() && section.getPreviousSibling()
.get() instanceof Section previousSection) {
var subnodes = previousSection.streamAllSubNodes()
.toList();
if (subnodes.size() == 1 && subnodes.get(0) instanceof Headline previousHeadline) {
found.add(previousHeadline);
headlinesByPreviousSibling(previousSection, found);
}
}
if (section.getPreviousSibling()
.isPresent() && section.getPreviousSibling()
.get() instanceof Headline previousHeadline) {
found.add(previousHeadline);
headlinesByPreviousSibling(previousHeadline, found);
}
}
}