--- /dev/null
+/*
+ * Copyright (c) 2018 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.dom.adapter;
+
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+
+@NonNullByDefault
+abstract class AbstractBindingLoadingAdapter<D, K, V> extends AbstractBindingAdapter<D> {
+ private final LoadingCache<K, V> proxies = CacheBuilder.newBuilder().weakKeys().build(new CacheLoader<K, V>() {
+ @Override
+ public V load(final K key) {
+ return loadAdapter(key);
+ }
+ });
+
+ AbstractBindingLoadingAdapter(final BindingToNormalizedNodeCodec codec, final D delegate) {
+ super(codec, delegate);
+ }
+
+ final V getAdapter(final K key) {
+ return proxies.getUnchecked(key);
+ }
+
+ abstract V loadAdapter(K key);
+}
package org.opendaylight.mdsal.binding.dom.adapter;
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 org.opendaylight.mdsal.binding.api.MountPoint;
import org.opendaylight.mdsal.binding.api.MountPointService;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class BindingDOMMountPointServiceAdapter extends AbstractBindingAdapter<DOMMountPointService>
+public class BindingDOMMountPointServiceAdapter
+ extends AbstractBindingLoadingAdapter<DOMMountPointService, DOMMountPoint, BindingMountPointAdapter>
implements MountPointService {
// FIXME: this really should be hidden
static final Logger LOG = LoggerFactory.getLogger(BindingDOMMountPointServiceAdapter.class);
- private final LoadingCache<DOMMountPoint, BindingMountPointAdapter> bindingMountpoints = CacheBuilder.newBuilder()
- .weakKeys().build(new CacheLoader<DOMMountPoint, BindingMountPointAdapter>() {
-
- @Override
- public BindingMountPointAdapter load(final DOMMountPoint key) {
- return new BindingMountPointAdapter(getCodec(), key);
- }
- });
-
public BindingDOMMountPointServiceAdapter(final DOMMountPointService mountService,
final BindingToNormalizedNodeCodec codec) {
super(codec, mountService);
public Optional<MountPoint> getMountPoint(final InstanceIdentifier<?> mountPoint) {
YangInstanceIdentifier domPath = getCodec().toYangInstanceIdentifierBlocking(mountPoint);
Optional<DOMMountPoint> domMount = getDelegate().getMountPoint(domPath);
- if (domMount.isPresent()) {
- return Optional.fromNullable(bindingMountpoints.getUnchecked(domMount.get()));
- }
- return Optional.absent();
+ return domMount.transform(this::getAdapter);
}
@Override
final T listener) {
return new BindingDOMMountPointListenerAdapter<>(listener, getCodec(), getDelegate());
}
+
+ @Override
+ BindingMountPointAdapter loadAdapter(final DOMMountPoint key) {
+ return new BindingMountPointAdapter(getCodec(), key);
+ }
}
*/
package org.opendaylight.mdsal.binding.dom.adapter;
-import com.google.common.base.Preconditions;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
+import static com.google.common.base.Preconditions.checkArgument;
+
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.ImmutableSet;
import java.util.Set;
import org.opendaylight.yangtools.yang.binding.RpcService;
import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
-public class BindingDOMRpcServiceAdapter extends AbstractBindingAdapter<DOMRpcService> implements RpcConsumerRegistry {
+public class BindingDOMRpcServiceAdapter
+ extends AbstractBindingLoadingAdapter<DOMRpcService, Class<? extends RpcService>, RpcServiceAdapter>
+ implements RpcConsumerRegistry {
protected static final Factory<RpcConsumerRegistry> BUILDER_FACTORY = Builder::new;
- private final LoadingCache<Class<? extends RpcService>, RpcServiceAdapter> proxies = CacheBuilder.newBuilder()
- .weakKeys()
- .build(new CacheLoader<Class<? extends RpcService>, RpcServiceAdapter>() {
- @Override
- public RpcServiceAdapter load(final Class<? extends RpcService> key) throws Exception {
- Preconditions.checkArgument(BindingReflections.isBindingClass(key));
- Preconditions.checkArgument(key.isInterface(), "Supplied RPC service type must be interface.");
- return new RpcServiceAdapter(key, getCodec(), getDelegate());
- }
- });
-
public BindingDOMRpcServiceAdapter(final DOMRpcService domService, final BindingToNormalizedNodeCodec codec) {
super(codec, domService);
}
@SuppressWarnings("unchecked")
@Override
public <T extends RpcService> T getRpcService(final Class<T> rpcService) {
- Preconditions.checkArgument(rpcService != null, "Rpc Service needs to be specied.");
- return (T) proxies.getUnchecked(rpcService).getProxy();
+ checkArgument(rpcService != null, "Rpc Service needs to be specied.");
+ return (T) getAdapter(rpcService).getProxy();
+ }
+
+ @Override
+ RpcServiceAdapter loadAdapter(final Class<? extends RpcService> key) {
+ checkArgument(BindingReflections.isBindingClass(key));
+ checkArgument(key.isInterface(), "Supplied RPC service type must be interface.");
+ return new RpcServiceAdapter(key, getCodec(), getDelegate());
}
private static final class Builder extends BindingDOMAdapterBuilder<RpcConsumerRegistry> {
@Override
protected RpcConsumerRegistry createInstance(final BindingToNormalizedNodeCodec codec,
final ClassToInstanceMap<DOMService> delegates) {
- final DOMRpcService domRpc = delegates.getInstance(DOMRpcService.class);
+ final DOMRpcService domRpc = delegates.getInstance(DOMRpcService.class);
return new BindingDOMRpcServiceAdapter(domRpc , codec);
}