Convert yanglib to new web API 60/71760/1
authorTom Pantelis <tompantelis@gmail.com>
Thu, 3 May 2018 14:44:55 +0000 (10:44 -0400)
committerTom Pantelis <tompantelis@gmail.com>
Thu, 3 May 2018 14:44:55 +0000 (10:44 -0400)
Change-Id: I10b287d2aa2cb44ad11c30b69dbccc7fc725e815
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
netconf/yanglib/pom.xml
netconf/yanglib/src/main/java/org/opendaylight/yanglib/api/YangLibRestAppService.java [deleted file]
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/WebInitializer.java [new file with mode: 0644]
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibRestApp.java
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java
netconf/yanglib/src/main/resources/WEB-INF/web.xml [deleted file]
netconf/yanglib/src/main/resources/org/opendaylight/blueprint/yanglib.xml
netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java
netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibRestAppTest.java [deleted file]
netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibServiceImplTest.java

index 1bcc7b371c627217a14c1895dbbc50019242988a..787d901cfba2c5f8fd11222704ffaab1af2bfb0a 100644 (file)
                 <configuration>
                     <instructions>
                         <Bundle-Name>YangLib</Bundle-Name>
-                        <Import-Package>
-                            com.sun.jersey.spi.container.servlet,
-                            org.eclipse.jetty.servlets,
-                            !javax.annotation,
-                            javax.ws.rs.*;version="[1.1.0,2.0.0)",
-                            *
-                        </Import-Package>
-                        <Web-ContextPath>/yanglib</Web-ContextPath>
                     </instructions>
                 </configuration>
             </plugin>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.aaa.web</groupId>
+            <artifactId>web-api</artifactId>
+            </dependency>
+        <dependency>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-servlet</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
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 (file)
index cf60e05..0000000
+++ /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 (file)
index 0000000..b91791b
--- /dev/null
@@ -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();
+    }
+}
index d969f0b40fddfeaa1713daccc36104efd8967a7e..8e9b378a167168cbca982254df0e0a1620a82b5f 100644 (file)
@@ -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<YangTextSchemaSource> 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);
     }
index 308e9bb7a3cab77da49d663737d8a42678c0a39f..ff3541bbe2a6c2eda9d8447377ae3007b4326bc3 100644 (file)
@@ -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<Object> getSingletons() {
-        return Collections.<Object>singleton(this.yangLibService);
+    public YangLibRestApp(YangLibService yangLibService) {
+        this.yangLibService = yangLibService;
     }
 
     @Override
-    public YangLibServiceImpl getYangLibService() {
-        return yangLibService;
+    public Set<Object> getSingletons() {
+        return Collections.<Object>singleton(this.yangLibService);
     }
 }
index 949d8f577393c35baaf747ae4a1b51266d3aa0fb..d856ac7bdb5f62b083602d4a449d8cbbea4a46f6 100644 (file)
@@ -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 (file)
index 73f005f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
-         version="3.0">
-
-    <servlet>
-        <servlet-name>JAXRSYanglib</servlet-name>
-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
-        <init-param>
-            <param-name>javax.ws.rs.Application</param-name>
-            <param-value>org.opendaylight.yanglib.impl.YangLibRestApp</param-value>
-        </init-param>
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>JAXRSYanglib</servlet-name>
-        <url-pattern>/*</url-pattern>
-    </servlet-mapping>
-</web-app>
index d16f601db647caf1f0bf5dc1027d07dbb9cb333f..2b4fa600040de9c2a63fbc3e9736e13f29adac42 100644 (file)
       binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.yanglib.impl.rev141210.YanglibConfig"/>
 
   <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"/>
+  <reference id="webServer" interface="org.opendaylight.aaa.web.WebServer"/>
+  <reference id="webContextSecurer" interface="org.opendaylight.aaa.web.WebContextSecurer"/>
+
+  <bean id="schemaRepository" class="org.opendaylight.yangtools.yang.parser.repo.SharedSchemaRepository">
+    <argument value="yang-library"/>
+  </bean>
+
+  <bean id="yangLibService" class="org.opendaylight.yanglib.impl.YangLibServiceImpl">
+    <argument ref="schemaRepository"/>
+  </bean>
+
+  <bean id="yangLibRestApp" class="org.opendaylight.yanglib.impl.YangLibRestApp">
+    <argument ref="yangLibService"/>
+  </bean>
 
   <bean id="yangLibProvider" class="org.opendaylight.yanglib.impl.YangLibProvider"
           init-method="init" destroy-method="close">
     <argument ref="yanglibConfig"/>
     <argument ref="dataBroker"/>
+    <argument ref="schemaRepository"/>
   </bean>
 
+  <bean id="webInitializer" class="org.opendaylight.yanglib.impl.WebInitializer"
+      destroy-method="close">
+    <argument ref="webServer"/>
+    <argument ref="webContextSecurer"/>
+    <argument ref="yangLibRestApp"/>
+  </bean>
 </blueprint>
index 36db57aa783c2e2e9206a7c43315aab8e9bf8669..440174efa6193f60110cf9bab6f6ae8544d9ab86 100644 (file)
@@ -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 (file)
index c72366d..0000000
+++ /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()));
-    }
-}
index 4c9338e1e7b8bc2ef77de8bfa5de71ac5488f991..c6848102d7ffe58d165a5e6eda8bd82786b8e0f2 100644 (file)
@@ -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"));