org.opendaylight.mdsal.binding.dom.adapter.BindingMountPointAdapter Maven / Gradle / Ivy
/*
* Copyright (c) 2015 Cisco Systems, Inc. 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.LoadingCache;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.api.BindingService;
import org.opendaylight.mdsal.binding.api.MountPoint;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.opendaylight.mdsal.dom.api.DOMService;
import org.opendaylight.yangtools.binding.DataObjectIdentifier;
final class BindingMountPointAdapter implements MountPoint {
private final @NonNull DataObjectIdentifier identifier;
private final LoadingCache, Optional> services;
BindingMountPointAdapter(final AdapterContext codec, final DOMMountPoint domMountPoint) {
identifier = codec.currentSerializer().fromYangInstanceIdentifier(domMountPoint.getIdentifier()).toIdentifier();
services = CacheBuilder.newBuilder().build(new BindingDOMAdapterLoader(codec) {
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
protected DOMService getDelegate(final Class> reqDeleg) {
return reqDeleg.cast(domMountPoint.getService((Class) reqDeleg).orElse(null));
}
});
}
@Override
public DataObjectIdentifier getIdentifier() {
return identifier;
}
@Override
public Optional getService(final Class service) {
return services.getUnchecked(service).map(service::cast);
}
}