package org.vertexium.cypher.executor.models.match; import com.google.common.collect.Lists; import java.util.*; import java.util.stream.Collectors; public class PatternPartMatchConstraint { private final Map<String, List<MatchConstraint>> namedPaths; private final LinkedHashSet<MatchConstraint> matchConstraints; public PatternPartMatchConstraint( Map<String, List<MatchConstraint>> namedMatchConstraints, LinkedHashSet<MatchConstraint> matchConstraints ) { this.namedPaths = namedMatchConstraints; this.matchConstraints = matchConstraints; } public PatternPartMatchConstraint(String pathName, LinkedHashSet<MatchConstraint> matchConstraints) { namedPaths = new HashMap<>(); if (pathName != null) { namedPaths.put(pathName, Lists.newArrayList(matchConstraints)); } this.matchConstraints = matchConstraints; } public Map<String, List<MatchConstraint>> getNamedPaths() { return namedPaths; } public LinkedHashSet<MatchConstraint> getMatchConstraints() { return matchConstraints; } public Set<String> getPartNames() { return getMatchConstraints().stream() .map(MatchConstraint::getName) .filter(Objects::nonNull) .collect(Collectors.toSet()); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } PatternPartMatchConstraint that = (PatternPartMatchConstraint) o; if (namedPaths != null ? !namedPaths.equals(that.namedPaths) : that.namedPaths != null) { return false; } return matchConstraints != null ? matchConstraints.equals(that.matchConstraints) : that.matchConstraints == null; } @Override public int hashCode() { int result = namedPaths != null ? namedPaths.hashCode() : 0; result = 31 * result + (matchConstraints != null ? matchConstraints.hashCode() : 0); return result; } }