import static java.util.Objects.requireNonNull;
-import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.collect.ImmutableMap;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.VarHandle;
-import java.util.Map;
import java.util.Optional;
import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.dom.codec.util.AugmentationReader;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
import org.opendaylight.yangtools.yang.binding.Augmentable;
import org.opendaylight.yangtools.yang.binding.Augmentation;
-import org.opendaylight.yangtools.yang.binding.AugmentationHolder;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
* @param <T> DataObject type
*/
public abstract class AugmentableCodecDataObject<T extends DataObject & Augmentable<T>>
- extends CodecDataObject<T> implements Augmentable<T>, AugmentationHolder<T> {
+ extends CodecDataObject<T> implements Augmentable<T> {
private static final VarHandle CACHED_AUGMENTATIONS;
static {
return local != null ? local : loadAugmentations();
}
- @Override
- final int codecAugmentedHashCode() {
- return 31 * super.codecAugmentedHashCode() + augmentations().hashCode();
- }
-
- @Override
- final boolean codecAugmentedEquals(final T other) {
- return super.codecAugmentedEquals(other) && augmentations().equals(getAllAugmentations(other));
- }
-
- @Override
- final ToStringHelper codecAugmentedFillToString(final ToStringHelper helper) {
- return super.codecAugmentedFillToString(helper).add("augmentation", augmentations().values());
- }
-
private ImmutableMap<Class<? extends Augmentation<T>>, Augmentation<T>> acquireAugmentations() {
return (ImmutableMap<Class<? extends Augmentation<T>>, Augmentation<T>>) CACHED_AUGMENTATIONS.getAcquire(this);
}
final Object witness = CACHED_AUGMENTATIONS.compareAndExchangeRelease(this, null, ret);
return witness == null ? ret : (ImmutableMap<Class<? extends Augmentation<T>>, Augmentation<T>>) witness;
}
-
- private static Map<Class<? extends Augmentation<?>>, Augmentation<?>> getAllAugmentations(
- final Augmentable<?> dataObject) {
- return dataObject instanceof AugmentationReader ? ((AugmentationReader) dataObject).getAugmentations(dataObject)
- : BindingReflections.getAugmentations(dataObject);
- }
}