/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.elasticsearch.schema.impl.json; import com.google.gson.JsonArray; import com.google.gson.JsonElement; /** * An {@link AnalysisJsonElementEquivalence} that considers that arrays are unordered containers. * * @author Yoann Rodiere */ public class AnalysisJsonElementUnorderedArrayEquivalence extends AnalysisJsonElementEquivalence { public AnalysisJsonElementUnorderedArrayEquivalence(AnalysisJsonElementEquivalence nestedEquivalence) { super( nestedEquivalence ); } @Override protected boolean isArrayEquivalent(JsonArray left, JsonArray right) { return containsAll( left, right ) && containsAll( right, left ); } private boolean containsAll(JsonArray containerToTest, JsonArray elementsToFind) { for ( JsonElement elementToFind : elementsToFind ) { boolean found = false; for ( JsonElement candidate : containerToTest ) { if ( isNestedEquivalent( elementToFind, candidate ) ) { found = true; break; } } if ( !found ) { return false; } } return true; } }