Merge branch 'RED-9760-anyheadline-4.1' into 'release/4.348.x'

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

See merge request redactmanager/redaction-service!473
This commit is contained in:
Dominique Eifländer 2024-08-07 15:17:33 +02:00
commit 0ef4087b36

View File

@ -1,10 +1,12 @@
package com.iqser.red.service.redaction.v1.server.model.document.nodes; package com.iqser.red.service.redaction.v1.server.model.document.nodes;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; 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.entity.TextEntity;
import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; 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) @EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true)
public class Section extends AbstractSemanticNode { public class Section extends AbstractSemanticNode {
@Override @Override
public NodeType getType() { public NodeType getType() {
@ -60,7 +61,6 @@ public class Section extends AbstractSemanticNode {
} }
@Override @Override
public String toString() { public String toString() {
@ -85,7 +85,14 @@ public class Section extends AbstractSemanticNode {
*/ */
public boolean anyHeadlineContainsString(String value) { 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) { 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);
}
}
} }