From 14f04995729708e2ac192df2bdfce6fe6a5a9aaf Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 28 Apr 2017 14:05:21 +0200 Subject: [PATCH] BUG-8327: Introduce DOMYangTextSourceProvider and implement it Migration requires that DOMSchemaService provides the capability to access underlying sources in YANG text. Rather than modifying the base DOMSchemaService, make it an DOMExtensibleService and define the appropriate extension, DOMYangTextSourceProvider. Update OsgiBundleScanningSchemaService to implement the new extension. Change-Id: I4c75d8abdf850c42fe69a08201f976271a2cbc8f Signed-off-by: Robert Varga (cherry picked from commit 985c0859e1ad4a1c2dd734e75a4249ddd6b1e2a8) --- .../mdsal/dom/api/DOMSchemaService.java | 10 ++++++-- .../dom/api/DOMSchemaServiceExtension.java | 16 ++++++++++++ .../mdsal/dom/api/DOMServiceExtension.java | 2 +- .../dom/api/DOMYangTextSourceProvider.java | 22 ++++++++++++++++ .../osgi/OsgiBundleScanningSchemaService.java | 25 +++++++++++++++++-- .../broker/osgi/SchemaServiceActivator.java | 6 ++--- 6 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaServiceExtension.java create mode 100644 dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java index b6946c9552..caf7e33f33 100644 --- a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaService.java @@ -7,12 +7,13 @@ */ package org.opendaylight.mdsal.dom.api; +import com.google.common.collect.ImmutableMap; +import java.util.Map; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; -public interface DOMSchemaService extends DOMService { - +public interface DOMSchemaService extends DOMExtensibleService { /** * Returns session specific YANG schema context * @return @@ -33,4 +34,9 @@ public interface DOMSchemaService extends DOMService { * @return Listener registration handle */ ListenerRegistration registerSchemaContextListener(SchemaContextListener listener); + + @Override + default Map, DOMSchemaServiceExtension> getSupportedExtensions() { + return ImmutableMap.of(); + } } diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaServiceExtension.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaServiceExtension.java new file mode 100644 index 0000000000..609d8b6af8 --- /dev/null +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMSchemaServiceExtension.java @@ -0,0 +1,16 @@ +/* + * 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.dom.api; + +/** + * Type capture of a {@link DOMServiceExtension} applicable to {@link DOMSchemaService} + * implementations. + */ +public interface DOMSchemaServiceExtension extends DOMServiceExtension { + +} diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMServiceExtension.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMServiceExtension.java index d790c3acc2..63687aa549 100644 --- a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMServiceExtension.java +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMServiceExtension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2017 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, diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java new file mode 100644 index 0000000000..5544e1dc69 --- /dev/null +++ b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMYangTextSourceProvider.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2017 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.dom.api; + +import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; + +/** + * A DOMSchemaServiceExtension exposing access to {@link YangTextSchemaSource}. Instances of this method should be + * acquired from {@link DOMSchemaService}. + */ +@Beta +public interface DOMYangTextSourceProvider extends DOMSchemaServiceExtension, + SchemaSourceProvider { + +} diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/OsgiBundleScanningSchemaService.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/OsgiBundleScanningSchemaService.java index 98cd8544cc..87e5c4d23e 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/OsgiBundleScanningSchemaService.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/OsgiBundleScanningSchemaService.java @@ -13,21 +13,30 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; +import com.google.common.util.concurrent.CheckedFuture; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicReference; +import javax.annotation.Nonnull; import javax.annotation.concurrent.GuardedBy; import org.opendaylight.mdsal.dom.api.DOMSchemaService; +import org.opendaylight.mdsal.dom.api.DOMSchemaServiceExtension; +import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.util.ListenerRegistry; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; +import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.repo.YangTextSchemaContextResolver; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; @@ -41,7 +50,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class OsgiBundleScanningSchemaService implements SchemaContextProvider, DOMSchemaService, - ServiceTrackerCustomizer, AutoCloseable { + ServiceTrackerCustomizer, DOMYangTextSourceProvider, + AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(OsgiBundleScanningSchemaService.class); private static final AtomicReference GLOBAL_INSTANCE = new AtomicReference<>(); @@ -65,7 +75,7 @@ public class OsgiBundleScanningSchemaService implements SchemaContextProvider, D this.context = Preconditions.checkNotNull(context); } - public static OsgiBundleScanningSchemaService createInstance(final BundleContext ctx) { + public static @Nonnull OsgiBundleScanningSchemaService createInstance(final BundleContext ctx) { OsgiBundleScanningSchemaService instance = new OsgiBundleScanningSchemaService(ctx); Preconditions.checkState(GLOBAL_INSTANCE.compareAndSet(null, instance)); instance.start(); @@ -296,4 +306,15 @@ public class OsgiBundleScanningSchemaService implements SchemaContextProvider, D final SchemaContextListener service) { context.ungetService(reference); } + + @Override + public Map, DOMSchemaServiceExtension> getSupportedExtensions() { + return ImmutableMap.of(DOMYangTextSourceProvider.class, this); + } + + @Override + public CheckedFuture getSource( + final SourceIdentifier sourceIdentifier) { + return contextResolver.getSource(sourceIdentifier); + } } diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/SchemaServiceActivator.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/SchemaServiceActivator.java index 52af5814fa..97370baf38 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/SchemaServiceActivator.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/osgi/SchemaServiceActivator.java @@ -14,8 +14,6 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; public class SchemaServiceActivator implements BundleActivator { - - private ServiceRegistration schemaServiceReg; private OsgiBundleScanningSchemaService schemaService; @@ -23,11 +21,11 @@ public class SchemaServiceActivator implements BundleActivator { public void start(final BundleContext context) { schemaService = OsgiBundleScanningSchemaService.createInstance(context); schemaServiceReg = context.registerService(DOMSchemaService.class, - schemaService, new Hashtable()); + schemaService, new Hashtable<>()); } @Override - public void stop(final BundleContext context) throws Exception { + public void stop(final BundleContext context) { schemaServiceReg.unregister(); schemaService.close(); } -- 2.36.6