--- /dev/null
+/*
+ * Copyright (c) 2018 Inocybe Technologies 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.cluster.datastore;
+
+import com.google.common.annotations.VisibleForTesting;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.distributed.datastore.provider.rev140612.DataStorePropertiesContainer;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
+
+abstract class AbstractDatastoreContextIntrospectorFactory implements DatastoreContextIntrospectorFactory {
+ @Override
+ public final DatastoreContextIntrospector newInstance(final LogicalDatastoreType datastoreType) {
+ return newInstance(DatastoreContext.newBuilder()
+ .logicalStoreType(datastoreType)
+ .tempFileDirectory("./data")
+ .build());
+ }
+
+ @VisibleForTesting
+ final @NonNull DatastoreContextIntrospector newInstance(final DatastoreContext context) {
+ final DataStorePropertiesContainer defaultPropsContainer = (DataStorePropertiesContainer)
+ serializer().fromNormalizedNode(YangInstanceIdentifier.of(DataStorePropertiesContainer.QNAME),
+ ImmutableNodes.containerNode(DataStorePropertiesContainer.QNAME)).getValue();
+
+ return new DatastoreContextIntrospector(context, defaultPropsContainer);
+ }
+
+ abstract BindingNormalizedNodeSerializer serializer();
+}
import org.apache.commons.text.WordUtils;
import org.checkerframework.checker.lock.qual.GuardedBy;
import org.opendaylight.controller.cluster.datastore.DatastoreContext.Builder;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.distributed.datastore.provider.rev140612.DataStoreProperties;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.distributed.datastore.provider.rev140612.DataStorePropertiesContainer;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.opendaylight.yangtools.yang.common.Uint64;
import org.opendaylight.yangtools.yang.common.Uint8;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private Map<String, Object> currentProperties;
public DatastoreContextIntrospector(final DatastoreContext context,
- final BindingNormalizedNodeSerializer bindingSerializer) {
- final DataStorePropertiesContainer defaultPropsContainer = (DataStorePropertiesContainer)
- bindingSerializer.fromNormalizedNode(YangInstanceIdentifier.of(DataStorePropertiesContainer.QNAME),
- ImmutableNodes.containerNode(DataStorePropertiesContainer.QNAME)).getValue();
+ final DataStorePropertiesContainer defaultPropsContainer) {
final Builder builder = DatastoreContext.newBuilderFrom(context);
for (Entry<String, Entry<Class<?>, Method>> entry: DATA_STORE_PROP_INFO.entrySet()) {
*/
package org.opendaylight.controller.cluster.datastore;
-import static java.util.Objects.requireNonNull;
-
-import com.google.common.annotations.VisibleForTesting;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
/**
*
* @author Thomas Pantelis
*/
-public class DatastoreContextIntrospectorFactory {
- private final BindingNormalizedNodeSerializer serializer;
-
- public DatastoreContextIntrospectorFactory(final BindingNormalizedNodeSerializer serializer) {
- this.serializer = requireNonNull(serializer);
- }
-
- public DatastoreContextIntrospector newInstance(final LogicalDatastoreType datastoreType) {
- return newInstance(DatastoreContext.newBuilder()
- .logicalStoreType(datastoreType)
- .tempFileDirectory("./data")
- .build());
- }
-
- @VisibleForTesting
- DatastoreContextIntrospector newInstance(final DatastoreContext context) {
- return new DatastoreContextIntrospector(context, serializer);
- }
+public interface DatastoreContextIntrospectorFactory {
+ @NonNull DatastoreContextIntrospector newInstance(LogicalDatastoreType datastoreType);
}
--- /dev/null
+/*
+ * Copyright (c) 2018 Inocybe Technologies 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.cluster.datastore;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+
+@Beta
+public final class DefaultDatastoreContextIntrospectorFactory extends AbstractDatastoreContextIntrospectorFactory {
+ private final BindingNormalizedNodeSerializer serializer;
+
+ public DefaultDatastoreContextIntrospectorFactory(final BindingNormalizedNodeSerializer serializer) {
+ this.serializer = requireNonNull(serializer);
+ }
+
+ @Override
+ BindingNormalizedNodeSerializer serializer() {
+ return serializer;
+ }
+}
--- /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.controller.cluster.datastore;
+
+import static com.google.common.base.Verify.verifyNotNull;
+
+import com.google.common.annotations.Beta;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Beta
+@Component(immediate = true, service = DatastoreContextIntrospectorFactory.class)
+public final class OSGiDatastoreContextIntrospectorFactory extends AbstractDatastoreContextIntrospectorFactory {
+ private static final Logger LOG = LoggerFactory.getLogger(OSGiDatastoreContextIntrospectorFactory.class);
+
+ @Reference
+ volatile BindingNormalizedNodeSerializer serializer = null;
+
+ @Override
+ BindingNormalizedNodeSerializer serializer() {
+ return verifyNotNull(serializer);
+ }
+
+ @Activate
+ @SuppressWarnings("static-method")
+ void activate() {
+ LOG.info("Datastore Context Introspector activated");
+ }
+
+ @Deactivate
+ @SuppressWarnings("static-method")
+ void deactivate() {
+ LOG.info("Datastore Context Introspector deactivated");
+ }
+}
<odl:static-reference id="schemaService" interface="org.opendaylight.mdsal.dom.api.DOMSchemaService" />
- <reference id="bindingSerializer" interface="org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer"/>
-
- <bean id="introspectorFactory" class="org.opendaylight.controller.cluster.datastore.DatastoreContextIntrospectorFactory">
- <argument ref="bindingSerializer"/>
- </bean>
-
<!-- Datastore properties -->
<reference id="actorSystemProvider" interface="org.opendaylight.controller.cluster.ActorSystemProvider"/>
+ <reference id="introspectorFactory" interface="org.opendaylight.controller.cluster.datastore.DatastoreContextIntrospectorFactory"/>
<cm:cm-properties id="datastoreProps" persistent-id="org.opendaylight.controller.cluster.datastore"/>
* @author Thomas Pantelis
*/
public class DatastoreContextIntrospectorTest {
- static final DatastoreContextIntrospectorFactory INTROSPECTOR_FACTORY = new DatastoreContextIntrospectorFactory(
- new BindingCodecContext(BindingRuntimeHelpers.createRuntimeContext(DataStorePropertiesContainer.class)));
+ static final AbstractDatastoreContextIntrospectorFactory INTROSPECTOR_FACTORY =
+ new DefaultDatastoreContextIntrospectorFactory(new BindingCodecContext(
+ BindingRuntimeHelpers.createRuntimeContext(DataStorePropertiesContainer.class)));
@Test
public void testYangDefaults() {