<instructions>
<Import-Package>
org.opendaylight.controller.md.sal.trace.api,
- org.opendaylight.mdsal.binding.generator.api,
org.opendaylight.controller.md.sal.dom.api,
org.opendaylight.controller.md.sal.binding.api,
- org.opendaylight.controller.md.sal.binding.impl,
+ org.opendaylight.controller.md.sal.binding.spi,
org.opendaylight.controller.sal.core.api.model,
*
</Import-Package>
interface="org.opendaylight.controller.md.sal.trace.api.TracingDOMDataBroker"
odl:type="default" />
- <odl:static-reference id="mappingCodec" interface="org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec"/>
+ <reference id="adapterFactory" interface="org.opendaylight.controller.md.sal.binding.spi.AdapterFactory"/>
- <bean id="tracingBindingDataBroker" class="org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter">
+ <bean id="tracingBindingDataBroker" factory-ref="adapterFactory" factory-method="createDataBroker">
<argument ref="tracingDefaultDOMBroker"/>
- <argument ref="mappingCodec"/>
</bean>
<service id="tracingBindingDataBrokerSvc" ref="tracingBindingDataBroker"
interface="org.opendaylight.controller.md.sal.trace.api.TracingDOMDataBroker"
odl:type="pingpong"/>
- <bean id="bindingTracingPingPongDataBroker" class="org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter">
+ <bean id="bindingTracingPingPongDataBroker" factory-ref="adapterFactory" factory-method="createDataBroker">
<argument ref="tracingPingPongDOMDataBroker"/>
- <argument ref="mappingCodec"/>
</bean>
<service ref="bindingTracingPingPongDataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
--- /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.controller.md.sal.binding.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.spi.AdapterFactory;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+
+@Beta
+@NonNullByDefault
+public final class BindingToDOMAdapterFactory implements AdapterFactory {
+ private final BindingToNormalizedNodeCodec codec;
+
+ public BindingToDOMAdapterFactory(final BindingToNormalizedNodeCodec codec) {
+ this.codec = requireNonNull(codec);
+ }
+
+ @Override
+ public DataBroker createDataBroker(final DOMDataBroker domBroker) {
+ return new BindingDOMDataBrokerAdapter(requireNonNull(domBroker), codec);
+ }
+}
--- /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.controller.md.sal.binding.spi;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+
+@Beta
+@NonNullByDefault
+public interface AdapterFactory {
+ /**
+ * Return a {@link DataBroker} implementation backed by the specified {@link DOMDataBroker}.
+ *
+ * @param domBroker Backing DOMDataBroker
+ * @return A DataBroker instance.
+ * @throws NullPointerException if {@code domBroker} is null.
+ */
+ DataBroker createDataBroker(DOMDataBroker domBroker);
+}
</interfaces>
</service>
+ <!-- TODO: remove this service as it is referring to a class. To do that we need to migrate everyone over to 'factory' -->
<service id="codec" ref="mappingCodec" interface="org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec"/>
+ <!-- Adapter service -->
+ <bean id="adapterFactory" class="org.opendaylight.controller.md.sal.binding.impl.BindingToDOMAdapterFactory">
+ <argument ref="mappingCodec"/>
+ </bean>
+
+ <service id="factory" ref="adapterFactory">
+ <interfaces>
+ <value>org.opendaylight.controller.md.sal.binding.spi.AdapterFactory</value>
+ </interfaces>
+ </service>
+
<!-- Binding RPC Registry Service -->
<reference id="domRpcService" interface="org.opendaylight.controller.md.sal.dom.api.DOMRpcService"/>
<reference id="domDefaultDataBroker" interface="org.opendaylight.controller.md.sal.dom.api.DOMDataBroker"
odl:type="default"/>
- <bean id="bindingDataBroker" class="org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter">
+ <bean id="bindingDataBroker" factory-ref="adapterFactory" factory-method="createDataBroker">
<argument ref="domDefaultDataBroker"/>
- <argument ref="mappingCodec"/>
</bean>
<service ref="bindingDataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
<reference id="domPingPongDataBroker" interface="org.opendaylight.controller.md.sal.dom.api.DOMDataBroker"
odl:type="pingpong"/>
- <bean id="bindingPingPongDataBroker" class="org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter">
+ <bean id="bindingPingPongDataBroker" factory-ref="adapterFactory" factory-method="createDataBroker">
<argument ref="domPingPongDataBroker"/>
- <argument ref="mappingCodec"/>
</bean>
<service ref="bindingPingPongDataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"