import com.google.common.annotations.Beta;
import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
import org.eclipse.jdt.annotation.NonNull;
/**
public interface DOMExtensibleService<T extends DOMExtensibleService<T, E>,
E extends DOMServiceExtension<T, E>> extends DOMService {
/**
- * Return a map of currently-supported extensions, along with accessor services
- * which provide access to the specific functionality bound to this service.
+ * Return a map of currently-supported extensions, along with accessor services which provide access to the specific
+ * functionality bound to this service. Default implementation reports no extensions.
*
* @return A map of supported functionality.
*/
- // FIXME: make this a default method returning empty
- @NonNull ClassToInstanceMap<E> getExtensions();
+ default @NonNull ClassToInstanceMap<E> getExtensions() {
+ return ImmutableClassToInstanceMap.of();
+ }
}
import org.opendaylight.mdsal.dom.api.DOMActionInstance;
import org.opendaylight.mdsal.dom.api.DOMActionNotAvailableException;
import org.opendaylight.mdsal.dom.api.DOMActionProviderService;
-import org.opendaylight.mdsal.dom.api.DOMActionProviderServiceExtension;
import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMActionServiceExtension;
@NonNullByDefault
private final class ActionProviderServiceFacade implements DOMActionProviderService {
- @Override
- public ClassToInstanceMap<DOMActionProviderServiceExtension> getExtensions() {
- return ImmutableClassToInstanceMap.of();
- }
-
@Override
public <T extends DOMActionImplementation> ObjectRegistration<T> registerActionImplementation(
final T implementation, final Set<DOMActionInstance> instances) {
*/
package org.opendaylight.mdsal.dom.broker;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ImmutableClassToInstanceMap;
import java.util.concurrent.atomic.AtomicLong;
-import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
import org.opendaylight.mdsal.dom.spi.PingPongMergingDOMDataBroker;
public class ShardedDOMDataBrokerAdapter implements PingPongMergingDOMDataBroker {
-
- private final DOMDataTreeService service;
- private final AtomicLong txNum = new AtomicLong();
private final AtomicLong chainNum = new AtomicLong();
+ private final AtomicLong txNum = new AtomicLong();
+ private final DOMDataTreeService service;
public ShardedDOMDataBrokerAdapter(final DOMDataTreeService service) {
this.service = service;
}
- @Override
- public ClassToInstanceMap<DOMDataBrokerExtension> getExtensions() {
- return ImmutableClassToInstanceMap.of();
- }
-
@Override
public DOMDataTreeReadTransaction newReadOnlyTransaction() {
return new ShardedDOMReadTransactionAdapter(newTransactionIdentifier(), service);
import static com.google.common.base.Preconditions.checkState;
import static java.util.Objects.requireNonNull;
-import com.google.common.collect.ClassToInstanceMap;
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.MoreExecutors;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeLoopException;
import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.mdsal.dom.spi.ForwardingDOMDataTreeService;
public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
finished = true;
}
- private static class CachedDataTreeService implements DOMDataTreeService {
-
- private final DOMDataTreeService delegateTreeService;
+ private static final class CachedDataTreeService extends ForwardingDOMDataTreeService {
private final Map<LogicalDatastoreType, NoopCloseDataProducer> producersMap =
- new EnumMap<>(LogicalDatastoreType.class);
-
- CachedDataTreeService(final DOMDataTreeService delegateTreeService) {
- this.delegateTreeService = delegateTreeService;
- }
-
- void closeProducers() {
- producersMap.values().forEach(NoopCloseDataProducer::closeDelegate);
- }
-
- @Override
- public <T extends DOMDataTreeListener> ListenerRegistration<T> registerListener(final T listener,
- final Collection<DOMDataTreeIdentifier> subtrees, final boolean allowRxMerges,
- final Collection<DOMDataTreeProducer> producers) throws DOMDataTreeLoopException {
- return delegateTreeService.registerListener(listener, subtrees, allowRxMerges, producers);
- }
+ new EnumMap<>(LogicalDatastoreType.class);
+ private final DOMDataTreeService delegate;
- @Override
- public ClassToInstanceMap<DOMDataTreeServiceExtension> getExtensions() {
- return delegateTreeService.getExtensions();
+ CachedDataTreeService(final DOMDataTreeService delegate) {
+ this.delegate = requireNonNull(delegate);
}
@Override
public DOMDataTreeProducer createProducer(final Collection<DOMDataTreeIdentifier> subtrees) {
checkState(subtrees.size() == 1);
DOMDataTreeIdentifier treeId = subtrees.iterator().next();
- NoopCloseDataProducer producer = new NoopCloseDataProducer(delegateTreeService.createProducer(
+ NoopCloseDataProducer producer = new NoopCloseDataProducer(delegate.createProducer(
Collections.singleton(treeId)));
producersMap.putIfAbsent(treeId.getDatastoreType(), producer);
return producer;
}
+
+ @Override
+ protected DOMDataTreeService delegate() {
+ return delegate;
+ }
+
+ void closeProducers() {
+ producersMap.values().forEach(NoopCloseDataProducer::closeDelegate);
+ }
}
private static final class NoopCloseDataProducer implements DOMDataTreeProducer {
// This method should not be implemented
throw new UnsupportedOperationException();
}
-
- @Override
- public ClassToInstanceMap<DOMSchemaServiceExtension> getExtensions() {
- return ImmutableClassToInstanceMap.of();
- }
}
package org.opendaylight.mdsal.dom.spi;
import com.google.common.annotations.Beta;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ForwardingObject;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMActionImplementation;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
@Beta
-public abstract class ForwardingDOMActionProviderService extends ForwardingObject implements DOMActionProviderService {
- @Override
- public ClassToInstanceMap<DOMActionProviderServiceExtension> getExtensions() {
- return delegate().getExtensions();
- }
-
+public abstract class ForwardingDOMActionProviderService
+ extends ForwardingDOMExtensibleService<DOMActionProviderService, DOMActionProviderServiceExtension>
+ implements DOMActionProviderService {
@Override
public <T extends @NonNull DOMActionImplementation> ObjectRegistration<T> registerActionImplementation(
final T implementation, final Set<@NonNull DOMActionInstance> instances) {
return delegate().registerActionImplementation(implementation, instances);
}
-
- @Override
- protected abstract @NonNull DOMActionProviderService delegate();
}
package org.opendaylight.mdsal.dom.spi;
import com.google.common.annotations.Beta;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ForwardingObject;
import com.google.common.util.concurrent.ListenableFuture;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMActionServiceExtension;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
@Beta
-public abstract class ForwardingDOMActionService extends ForwardingObject implements DOMActionService {
- @Override
- public ClassToInstanceMap<DOMActionServiceExtension> getExtensions() {
- return delegate().getExtensions();
- }
-
+public abstract class ForwardingDOMActionService
+ extends ForwardingDOMExtensibleService<DOMActionService, DOMActionServiceExtension>
+ implements DOMActionService {
@Override
public ListenableFuture<? extends DOMActionResult> invokeAction(final Absolute type,
final DOMDataTreeIdentifier path, final ContainerNode input) {
return delegate().invokeAction(type, path, input);
}
-
- @Override
- protected abstract @NonNull DOMActionService delegate();
}
*/
package org.opendaylight.mdsal.dom.spi;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ForwardingObject;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
* Utility {@link DOMDataBroker} implementation which forwards all interface
* method invocation to a delegate instance.
*/
-public abstract class ForwardingDOMDataBroker extends ForwardingObject implements DOMDataBroker {
-
- @Override
- protected abstract @NonNull DOMDataBroker delegate();
-
+public abstract class ForwardingDOMDataBroker
+ extends ForwardingDOMExtensibleService<DOMDataBroker, DOMDataBrokerExtension>
+ implements DOMDataBroker {
@Override
public DOMDataTreeReadTransaction newReadOnlyTransaction() {
return delegate().newReadOnlyTransaction();
public DOMTransactionChain createMergingTransactionChain(final DOMTransactionChainListener listener) {
return delegate().createMergingTransactionChain(listener);
}
-
- @Override
- public ClassToInstanceMap<DOMDataBrokerExtension> getExtensions() {
- return delegate().getExtensions();
- }
}
--- /dev/null
+/*
+ * 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.dom.spi;
+
+import com.google.common.annotations.Beta;
+import java.util.Collection;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeLoopException;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+
+@Beta
+public abstract class ForwardingDOMDataTreeService
+ extends ForwardingDOMExtensibleService<DOMDataTreeService, DOMDataTreeServiceExtension>
+ implements DOMDataTreeService {
+ @Override
+ public DOMDataTreeProducer createProducer(final Collection<DOMDataTreeIdentifier> subtrees) {
+ return delegate().createProducer(subtrees);
+ }
+
+ @Override
+ public <T extends DOMDataTreeListener> ListenerRegistration<T> registerListener(final T listener,
+ final Collection<DOMDataTreeIdentifier> subtrees, final boolean allowRxMerges,
+ final Collection<DOMDataTreeProducer> producers) throws DOMDataTreeLoopException {
+ return delegate().registerListener(listener, subtrees, allowRxMerges, producers);
+ }
+}
--- /dev/null
+/*
+ * 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.dom.spi;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ForwardingObject;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.dom.api.DOMExtensibleService;
+import org.opendaylight.mdsal.dom.api.DOMServiceExtension;
+
+@Beta
+public abstract class ForwardingDOMExtensibleService<T extends DOMExtensibleService<T, E>,
+ E extends DOMServiceExtension<T, E>> extends ForwardingObject
+ implements DOMExtensibleService<T, E> {
+ @Override
+ public ClassToInstanceMap<E> getExtensions() {
+ return delegate().getExtensions();
+ }
+
+ @Override
+ protected abstract @NonNull T delegate();
+}