import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.annotations.Beta;
import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
import java.util.Arrays;
import java.util.Iterator;
+import java.util.Map;
+import javax.annotation.Nonnull;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@Beta
public final class NormalizedNodes {
private static final int STRINGTREE_INDENT = 4;
+ private static final Predicate<DuplicateEntry> DUPLICATES_ONLY = new Predicate<DuplicateEntry>() {
+ @Override
+ public boolean apply(final DuplicateEntry input) {
+ return !input.getDuplicates().isEmpty();
+ }
+ };
private NormalizedNodes() {
throw new UnsupportedOperationException("Utility class should not be instantiated");
private static String toStringTree(final PathArgument identifier) {
if (identifier instanceof NodeIdentifierWithPredicates) {
- StringBuilder builder = new StringBuilder();
- builder.append(identifier.getNodeType().getLocalName());
- builder.append(((NodeIdentifierWithPredicates) identifier).getKeyValues().values());
- return builder.toString();
+ return identifier.getNodeType().getLocalName() +
+ ((NodeIdentifierWithPredicates) identifier).getKeyValues().values();
} else if (identifier instanceof AugmentationIdentifier) {
return "augmentation";
} else {
return identifier.getNodeType().getLocalName();
}
}
+
+ /**
+ * Find duplicate NormalizedNode instances within a subtree. Duplicates are those, which compare
+ * as equal, but do not refer to the same object.
+ *
+ * @param node A normalized node subtree, may not be null
+ * @return A Map of NormalizedNode/DuplicateEntry relationships.
+ */
+ public static Map<NormalizedNode<?, ?>, DuplicateEntry> findDuplicates(@Nonnull final NormalizedNode<?, ?> node) {
+ return Maps.filterValues(DuplicateFinder.findDuplicates(node), DUPLICATES_ONLY);
+ }
}