RED-9760: Changed anyHeadlineContains to act like in the previous version #473
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user