package org.opendaylight.mdsal.binding.javav2.api;
import com.google.common.annotations.Beta;
-import java.util.Optional;
+import com.google.common.base.Optional;
import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
import org.opendaylight.yangtools.concepts.Identifiable;
package org.opendaylight.mdsal.binding.javav2.api;
import com.google.common.annotations.Beta;
-import java.util.Optional;
+import com.google.common.base.Optional;
import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
--- /dev/null
+/*
+ * Copyright (c) 2017 Pantheon Technologies 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.javav2.dom.adapter.impl.mountpoint;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Optional;
+import javax.annotation.Nonnull;
+import org.opendaylight.mdsal.binding.javav2.api.MountPointListener;
+import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
+import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
+import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
+import org.opendaylight.mdsal.dom.api.DOMMountPointListener;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
+
+/**
+ * Mount point listener adapter.
+ *
+ * @param <T>
+ * - {@link MountPointListener} type
+ */
+@Beta
+public final class BindingDOMMountPointListenerAdapter<T extends MountPointListener>
+ implements ListenerRegistration<T>, DOMMountPointListener {
+
+ private final T listener;
+ private final ListenerRegistration<DOMMountPointListener> registration;
+ private final BindingToNormalizedNodeCodec codec;
+
+ public BindingDOMMountPointListenerAdapter(final T listener, final BindingToNormalizedNodeCodec codec,
+ final DOMMountPointService mountService) {
+ this.listener = listener;
+ this.codec = codec;
+ this.registration = mountService.registerProvisionListener(this);
+ }
+
+ @Nonnull
+ @Override
+ public T getInstance() {
+ return listener;
+ }
+
+ @Override
+ public void close() {
+ registration.close();
+ }
+
+ @Override
+ public void onMountPointCreated(final YangInstanceIdentifier path) {
+ try {
+ final InstanceIdentifier<? extends TreeNode> bindingPath = toBinding(path);
+ listener.onMountPointCreated(bindingPath);
+ } catch (final DeserializationException e) {
+ BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}." + " Omitting event.",
+ path, e);
+ }
+ }
+
+ private InstanceIdentifier<? extends TreeNode> toBinding(final YangInstanceIdentifier path)
+ throws DeserializationException {
+ final Optional<InstanceIdentifier<? extends TreeNode>> instanceIdentifierOptional = codec.toBinding(path);
+ if (instanceIdentifierOptional.isPresent()) {
+ return instanceIdentifierOptional.get();
+ } else {
+ throw new DeserializationException("Deserialization unsuccessful, " + instanceIdentifierOptional);
+ }
+ }
+
+ @Override
+ public void onMountPointRemoved(final YangInstanceIdentifier path) {
+ try {
+ final InstanceIdentifier<? extends TreeNode> bindingPath = toBinding(path);
+ listener.onMountPointRemoved(bindingPath);
+ } catch (final DeserializationException e) {
+ BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}." + " Omitting event.",
+ path, e);
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Pantheon Technologies 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.javav2.dom.adapter.impl.mountpoint;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Optional;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import javax.annotation.Nonnull;
+import org.opendaylight.mdsal.binding.javav2.api.MountPoint;
+import org.opendaylight.mdsal.binding.javav2.api.MountPointListener;
+import org.opendaylight.mdsal.binding.javav2.api.MountPointService;
+import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
+import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Mount point service adapter.
+ */
+@Beta
+public class BindingDOMMountPointServiceAdapter implements MountPointService {
+
+ public static final Logger LOG = LoggerFactory.getLogger(BindingDOMMountPointServiceAdapter.class);
+
+ private final BindingToNormalizedNodeCodec codec;
+ private final DOMMountPointService mountService;
+ private final LoadingCache<DOMMountPoint, BindingMountPointAdapter> bindingMountpoints =
+ CacheBuilder.newBuilder().weakKeys().build(new CacheLoader<DOMMountPoint, BindingMountPointAdapter>() {
+
+ @Nonnull
+ @Override
+ public BindingMountPointAdapter load(@Nonnull final DOMMountPoint key) throws Exception {
+ return new BindingMountPointAdapter(codec, key);
+ }
+ });
+
+ public BindingDOMMountPointServiceAdapter(final DOMMountPointService mountService,
+ final BindingToNormalizedNodeCodec codec) {
+ this.codec = codec;
+ this.mountService = mountService;
+ }
+
+ @Override
+ public Optional<MountPoint> getMountPoint(final InstanceIdentifier<?> mountPoint) {
+
+ final YangInstanceIdentifier domPath = codec.toYangInstanceIdentifierBlocking(mountPoint);
+ final Optional<DOMMountPoint> domMount = mountService.getMountPoint(domPath);
+ if (domMount.isPresent()) {
+ return Optional.fromNullable(bindingMountpoints.getUnchecked(domMount.get()));
+ }
+ return Optional.absent();
+ }
+
+ @Override
+ public <T extends MountPointListener> ListenerRegistration<T> registerListener(final InstanceIdentifier<?> path,
+ final T listener) {
+ return new BindingDOMMountPointListenerAdapter<>(listener, codec, mountService);
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2017 Pantheon Technologies 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.javav2.dom.adapter.impl.mountpoint;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Optional;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.LoadingCache;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import org.opendaylight.mdsal.binding.javav2.api.BindingService;
+import org.opendaylight.mdsal.binding.javav2.api.MountPoint;
+import org.opendaylight.mdsal.binding.javav2.dom.adapter.spi.loader.BindingDOMAdapterLoader;
+import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
+import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMService;
+
+/**
+ * Binding mount point adapter.
+ */
+@Beta
+public class BindingMountPointAdapter implements MountPoint {
+
+ private final InstanceIdentifier<?> identifier;
+ private LoadingCache<Class<? extends BindingService>, Optional<BindingService>> services;
+
+ public BindingMountPointAdapter(final BindingToNormalizedNodeCodec codec, final DOMMountPoint domMountPoint) {
+ identifier = codec.getCodecRegistry().fromYangInstanceIdentifier(domMountPoint.getIdentifier());
+ services = CacheBuilder.newBuilder().build(new BindingDOMAdapterLoader(codec) {
+
+ @Nullable
+ @Override
+ protected DOMService getDelegate(final Class<? extends DOMService> reqDeleg) {
+ return domMountPoint.getService(reqDeleg).orNull();
+ }
+ });
+ }
+
+ @Nonnull
+ @Override
+ public InstanceIdentifier<?> getIdentifier() {
+ return identifier;
+ }
+
+ @Override
+ public <T extends BindingService> Optional<T> getService(final Class<T> service) {
+ final Optional<BindingService> potential = services.getUnchecked(service);
+ if (potential.isPresent()) {
+ return Optional.of(service.cast(potential.get()));
+ }
+ return Optional.absent();
+ }
+}
\ No newline at end of file