From: Tom Pantelis Date: Thu, 3 May 2018 14:44:55 +0000 (-0400) Subject: Convert yanglib to new web API X-Git-Tag: release/fluorine~80^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=a1d28abf688f9e6839b11cce5433e179c9c85169;hp=d05ba245057351f7a13d98d4f834501c995cf27b;p=netconf.git Convert yanglib to new web API Change-Id: I10b287d2aa2cb44ad11c30b69dbccc7fc725e815 Signed-off-by: Tom Pantelis --- diff --git a/netconf/yanglib/pom.xml b/netconf/yanglib/pom.xml index 1bcc7b371c..787d901cfb 100644 --- a/netconf/yanglib/pom.xml +++ b/netconf/yanglib/pom.xml @@ -31,14 +31,6 @@ YangLib - - com.sun.jersey.spi.container.servlet, - org.eclipse.jetty.servlets, - !javax.annotation, - javax.ws.rs.*;version="[1.1.0,2.0.0)", - * - - /yanglib @@ -80,6 +72,14 @@ org.opendaylight.yangtools yang-model-api + + org.opendaylight.aaa.web + web-api + + + com.sun.jersey + jersey-servlet + org.slf4j slf4j-api diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/api/YangLibRestAppService.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/api/YangLibRestAppService.java deleted file mode 100644 index cf60e053e9..0000000000 --- a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/api/YangLibRestAppService.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2016 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.yanglib.api; - -import org.opendaylight.yanglib.impl.YangLibServiceImpl; -import org.osgi.framework.BundleContext; - -/** - * Interface for register YangLibRestApp service via {@link BundleContext}. - */ -public interface YangLibRestAppService { - - /** - * Get {@link YangLibServiceImpl} via service. - * @return YangLibServiceImpl - */ - YangLibServiceImpl getYangLibService(); -} diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/WebInitializer.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/WebInitializer.java new file mode 100644 index 0000000000..b91791bee8 --- /dev/null +++ b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/WebInitializer.java @@ -0,0 +1,42 @@ +/* + * 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.yanglib.impl; + +import javax.servlet.ServletException; +import javax.ws.rs.core.Application; +import org.opendaylight.aaa.web.ServletDetails; +import org.opendaylight.aaa.web.WebContext; +import org.opendaylight.aaa.web.WebContextBuilder; +import org.opendaylight.aaa.web.WebContextRegistration; +import org.opendaylight.aaa.web.WebContextSecurer; +import org.opendaylight.aaa.web.WebServer; + +/** + * Initializes the wep app. + * + * @author Thomas Pantelis + */ +public class WebInitializer { + private final WebContextRegistration registration; + + public WebInitializer(WebServer webServer, WebContextSecurer webContextSecurer, Application webApp) + throws ServletException { + WebContextBuilder webContextBuilder = WebContext.builder().contextPath("yanglib").supportsSessions(true) + .addServlet(ServletDetails.builder().servlet( + new com.sun.jersey.spi.container.servlet.ServletContainer(webApp)) + .addUrlPattern("/*").build()); + + webContextSecurer.requireAuthentication(webContextBuilder, "/*"); + + registration = webServer.registerWebContext(webContextBuilder.build()); + } + + public void close() { + registration.close(); + } +} diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java index d969f0b40f..8e9b378a16 100644 --- a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java +++ b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java @@ -59,17 +59,18 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener { private final DataBroker dataBroker; private final YanglibConfig yanglibConfig; + private final SharedSchemaRepository schemaRepository; private SchemaListenerRegistration schemaListenerRegistration; - private SharedSchemaRepository schemaRepository; - public YangLibProvider(final YanglibConfig yanglibConfig, final DataBroker dataBroker) { + public YangLibProvider(final YanglibConfig yanglibConfig, final DataBroker dataBroker, + final SharedSchemaRepository schemaRepository) { this.yanglibConfig = Preconditions.checkNotNull(yanglibConfig); this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.schemaRepository = Preconditions.checkNotNull(schemaRepository); } @Override public void close() { - YangLibServiceImpl.setSchemaRepository(null); if (schemaListenerRegistration != null) { schemaListenerRegistration.close(); } @@ -86,13 +87,11 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener { Preconditions.checkArgument(cacheFolderFile.isDirectory(), "cache-folder %s is not a directory", cacheFolderFile); - schemaRepository = new SharedSchemaRepository("yang-library"); final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(schemaRepository, YangTextSchemaSource.class, cacheFolderFile); schemaRepository.registerSchemaSourceListener(cache); schemaListenerRegistration = schemaRepository.registerSchemaSourceListener(this); - YangLibServiceImpl.setSchemaRepository(schemaRepository); LOG.info("Started yang library with sources from {}", cacheFolderFile); } diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibRestApp.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibRestApp.java index 308e9bb7a3..ff3541bbe2 100644 --- a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibRestApp.java +++ b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibRestApp.java @@ -11,18 +11,17 @@ package org.opendaylight.yanglib.impl; import java.util.Collections; import java.util.Set; import javax.ws.rs.core.Application; -import org.opendaylight.yanglib.api.YangLibRestAppService; +import org.opendaylight.yanglib.api.YangLibService; -public class YangLibRestApp extends Application implements YangLibRestAppService { - private final YangLibServiceImpl yangLibService = new YangLibServiceImpl(); +public class YangLibRestApp extends Application { + private final YangLibService yangLibService; - @Override - public Set getSingletons() { - return Collections.singleton(this.yangLibService); + public YangLibRestApp(YangLibService yangLibService) { + this.yangLibService = yangLibService; } @Override - public YangLibServiceImpl getYangLibService() { - return yangLibService; + public Set getSingletons() { + return Collections.singleton(this.yangLibService); } } diff --git a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java index 949d8f5773..d856ac7bdb 100644 --- a/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java +++ b/netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java @@ -29,15 +29,10 @@ import org.slf4j.LoggerFactory; public class YangLibServiceImpl implements YangLibService { private static final Logger LOG = LoggerFactory.getLogger(YangLibServiceImpl.class); - private static volatile SchemaRepository schemaRepository; + private final SchemaRepository schemaRepository; - public YangLibServiceImpl() { - - } - - public static void setSchemaRepository(final SchemaRepository schemaRepository) { - LOG.debug("Setting schema repository {}", schemaRepository); - YangLibServiceImpl.schemaRepository = schemaRepository; + public YangLibServiceImpl(final SchemaRepository schemaRepository) { + this.schemaRepository = schemaRepository; } @Override diff --git a/netconf/yanglib/src/main/resources/WEB-INF/web.xml b/netconf/yanglib/src/main/resources/WEB-INF/web.xml deleted file mode 100644 index 73f005fcfc..0000000000 --- a/netconf/yanglib/src/main/resources/WEB-INF/web.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - JAXRSYanglib - com.sun.jersey.spi.container.servlet.ServletContainer - - javax.ws.rs.Application - org.opendaylight.yanglib.impl.YangLibRestApp - - 1 - - - - JAXRSYanglib - /* - - diff --git a/netconf/yanglib/src/main/resources/org/opendaylight/blueprint/yanglib.xml b/netconf/yanglib/src/main/resources/org/opendaylight/blueprint/yanglib.xml index d16f601db6..2b4fa60004 100644 --- a/netconf/yanglib/src/main/resources/org/opendaylight/blueprint/yanglib.xml +++ b/netconf/yanglib/src/main/resources/org/opendaylight/blueprint/yanglib.xml @@ -14,11 +14,32 @@ binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.yanglib.impl.rev141210.YanglibConfig"/> + + + + + + + + + + + + + + + + + + + + diff --git a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java index 36db57aa78..440174efa6 100644 --- a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java +++ b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java @@ -50,6 +50,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.api.YinSchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; +import org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.ASTSchemaSource; public class YangLibProviderTest { @@ -89,7 +90,7 @@ public class YangLibProviderTest { final YanglibConfig yanglibConfig = new YanglibConfigBuilder().setBindingAddr("www.fake.com") .setBindingPort(300L).setCacheFolder(CACHE_DIR.getAbsolutePath()).build(); - yangLibProvider = new YangLibProvider(yanglibConfig, dataBroker); + yangLibProvider = new YangLibProvider(yanglibConfig, dataBroker, new SharedSchemaRepository("yang-library")); } @Test diff --git a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibRestAppTest.java b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibRestAppTest.java deleted file mode 100644 index c72366d6f8..0000000000 --- a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibRestAppTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2016 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.yanglib.impl; - -import static junit.framework.TestCase.assertTrue; - -import java.util.Set; -import org.junit.Test; - -public class YangLibRestAppTest { - - @Test - public void testYangLibRestApp() { - final YangLibRestApp yangLibRestApp = new YangLibRestApp(); - final Set singleton = yangLibRestApp.getSingletons(); - - assertTrue(singleton.contains(yangLibRestApp.getYangLibService())); - } -} diff --git a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java index 4c9338e1e7..c6848102d7 100644 --- a/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java +++ b/netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java @@ -36,8 +36,7 @@ public class YangLibServiceImplTest { public void testSchema() throws SchemaSourceException { final SchemaRepository schemaRepository = mock(SchemaRepository.class); - final YangLibServiceImpl yangLibService = new YangLibServiceImpl(); - yangLibService.setSchemaRepository(schemaRepository); + final YangLibServiceImpl yangLibService = new YangLibServiceImpl(schemaRepository); final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("name", Revision.of("2016-01-01"));