/* * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.mdsal.binding.dom.adapter.query; import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.api.query.ComparableMatchBuilder; import org.opendaylight.mdsal.binding.api.query.MatchBuilderPath; import org.opendaylight.mdsal.binding.api.query.StringMatchBuilder; import org.opendaylight.mdsal.binding.api.query.ValueMatchBuilder; import org.opendaylight.yangtools.yang.binding.BaseIdentity; import org.opendaylight.yangtools.yang.binding.ChildOf; import org.opendaylight.yangtools.yang.binding.ChoiceIn; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.opendaylight.yangtools.yang.binding.TypeObject; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint64; import org.opendaylight.yangtools.yang.common.Uint8; final class DefaultMatchBuilderPath implements MatchBuilderPath { private final QueryBuilderState builder; private final InstanceIdentifier select; private final InstanceIdentifierBuilder target; DefaultMatchBuilderPath(final QueryBuilderState builder, final InstanceIdentifier select, final InstanceIdentifierBuilder target) { this.builder = requireNonNull(builder); this.select = requireNonNull(select); this.target = requireNonNull(target); } @Override @SuppressWarnings("unchecked") public > MatchBuilderPath childObject(final Class childClass) { target.child(childClass); return (MatchBuilderPath) this; } @Override @SuppressWarnings("unchecked") public & DataObject, N extends ChildOf> MatchBuilderPath extractChild(final Class caseClass, final Class childClass) { target.child(caseClass, childClass); return (MatchBuilderPath) this; } @Override public ValueMatchBuilder leaf(final EmptyLeafReference methodRef) { return defaultFor(methodRef); } @Override public StringMatchBuilder leaf(final StringLeafReference methodRef) { return new DefaultStringMatchBuilder<>(builder, select, builder.bindMethod(target.build(), methodRef)); } @Override public ComparableMatchBuilder leaf(final Int8LeafReference methodRef) { return comparableFor(methodRef); } @Override public ComparableMatchBuilder leaf(final Int16LeafReference methodRef) { return comparableFor(methodRef); } @Override public ComparableMatchBuilder leaf(final Int32LeafReference methodRef) { return comparableFor(methodRef); } @Override public ComparableMatchBuilder leaf(final Int64LeafReference methodRef) { return comparableFor(methodRef); } @Override public ComparableMatchBuilder leaf(final Uint8LeafReference methodRef) { return comparableFor(methodRef); } @Override public ComparableMatchBuilder leaf(final Uint16LeafReference methodRef) { return comparableFor(methodRef); } @Override public ComparableMatchBuilder leaf(final Uint32LeafReference methodRef) { return comparableFor(methodRef); } @Override public ComparableMatchBuilder leaf(final Uint64LeafReference methodRef) { return comparableFor(methodRef); } @Override public ValueMatchBuilder leaf(final IdentityLeafReference methodRef) { return defaultFor(methodRef); } @Override public ValueMatchBuilder leaf(final TypeObjectLeafReference methodRef) { return defaultFor(methodRef); } private @NonNull ValueMatchBuilder defaultFor(final LeafReference ref) { return new DefaultValueMatchBuilder<>(builder, select, builder.bindMethod(target.build(), ref)); } private > @NonNull ComparableMatchBuilder comparableFor( final LeafReference ref) { return new DefaultComparableMatchBuilder<>(builder, select, builder.bindMethod(target.build(), ref)); } }