Merge "Activate Swagger for Lighty"
authorGilles Thouenon <gilles.thouenon@orange.com>
Mon, 3 Apr 2023 10:50:10 +0000 (10:50 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 3 Apr 2023 10:50:10 +0000 (10:50 +0000)
70 files changed:
api/pom.xml
artifacts/pom.xml
common/pom.xml
dmaap-client/pom.xml
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/impl/DmaapClientProvider.java
dmaap-client/src/main/resources/OSGI-INF/blueprint/dmaap-blueprint.xml [deleted file]
dmaap-client/src/test/java/org/opendaylight/transportpce/dmaap/client/impl/DmaapClientProviderTest.java
docs/developer-guide.rst
features/features-transportpce/pom.xml
features/odl-transportpce-dmaap-client/pom.xml
features/odl-transportpce-inventory/pom.xml
features/odl-transportpce-nbinotifications/pom.xml
features/odl-transportpce-swagger/pom.xml
features/odl-transportpce-tapi/pom.xml
features/odl-transportpce/pom.xml
features/pom.xml
inventory/pom.xml
inventory/src/main/java/org/opendaylight/transportpce/inventory/DeviceInventory.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/INode.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/ListenerProvider.java
inventory/src/main/resources/OSGI-INF/blueprint/inventory-blueprint.xml [deleted file]
karaf/pom.xml
lighty/pom.xml
lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java
nbinotifications/pom.xml
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsProvider.java
nbinotifications/src/main/resources/OSGI-INF/blueprint/nobinotifications-blueprint.xml [deleted file]
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsProviderTest.java
networkmodel/pom.xml
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java
olm/pom.xml
pce/pom.xml
pom.xml
renderer/pom.xml
renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/TransportPCEServicePathRPCImpl.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/RendererProviderTest.java
servicehandler/pom.xml
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProvider.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkListener.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceListener.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceListenerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListener.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/ServiceListener.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImpl.java
servicehandler/src/main/resources/OSGI-INF/blueprint/servicehandler-blueprint.xml [deleted file]
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImplTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProviderTest.java
tapi/pom.xml
tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelListenerImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkUtilsImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLink.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java [new file with mode: 0644]
tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml [deleted file]
tapi/src/test/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImplTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/provider/TapiProviderTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToFullTapiTopoTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopoTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java
test-common/pom.xml
tests/transportpce_tests/common/test_utils.py

index cdc83b8a16c020adc20e1b1143db658d783864bc..f0031c9ba5ab8e1a708401637bd3e4744798a8c7 100644 (file)
@@ -18,11 +18,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-api</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
index 5ec56e62f5d9a05c5a3628dfd10e63dc39b42352..42639cadd447aea440f895357216cf9bb7c8a9d6 100644 (file)
@@ -19,7 +19,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-artifacts</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <dependencyManagement>
index 4ff0ba28455225441f517706fc12593c6eda21a5..878e1feeacb9969d8bc8370c715d2a8552c0fa83 100644 (file)
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-common</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -35,7 +35,7 @@
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.3</version>
+        <version>5.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
index 67692df587f060fd20009eab38897c3350aa0aca..7834390a5d3842d884c0c8935e1584a71f1f1464 100644 (file)
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-dmaap-client</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
   <description>client to send message to Dmaap message router</description>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
 
       <groupId>jakarta.ws.rs</groupId>
       <artifactId>jakarta.ws.rs-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component.annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.metatype.annotations</artifactId>
+    </dependency>
 
     <!-- Testing dependencies -->
     <dependency>
index 482a46b782716ca3c826f92349ba48f43e6972bb..51742f2c82eeac1acbc93bbf947ec819cb828fd0 100644 (file)
@@ -11,32 +11,40 @@ import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.transportpce.dmaap.client.listener.NbiNotificationsListenerImpl;
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component(configurationPid = "org.opendaylight.transportpce.dmaap")
 public class DmaapClientProvider {
+
+    @ObjectClassDefinition
+    public @interface Configuration {
+        @AttributeDefinition
+        String dmaapBaseUrl() default "http://localhost:8080";
+        @AttributeDefinition
+        String dmaapUsername() default "";
+        @AttributeDefinition
+        String dmaapPassword() default "";
+    }
+
     private static final Logger LOG = LoggerFactory.getLogger(DmaapClientProvider.class);
     private ListenerRegistration<NbiNotificationsListener> listenerRegistration;
-    private NotificationService notificationService;
-    private final String baseUrl;
-    private final String username;
-    private final String password;
 
-    public DmaapClientProvider(NotificationService notificationService, String baseUrl,
-            String username, String password) {
-        this.notificationService = notificationService;
-        this.baseUrl = baseUrl;
-        this.username = username;
-        this.password = password;
+    @Activate
+    public DmaapClientProvider(@Reference NotificationService notificationService, Configuration config) {
+        this(notificationService, config.dmaapBaseUrl(), config.dmaapUsername(), config.dmaapPassword());
     }
 
-    /**
-     * Method called when the blueprint container is created.
-     */
-    public void init() {
-        LOG.info("DmaapClientProvider Session Initiated");
+    public DmaapClientProvider(NotificationService notificationService, String baseUrl,
+            String username, String password) {
         listenerRegistration = notificationService.registerNotificationListener(
                 new NbiNotificationsListenerImpl(baseUrl, username, password));
+        LOG.info("DmaapClientProvider Session Initiated");
     }
 
     /**
@@ -46,5 +54,4 @@ public class DmaapClientProvider {
         listenerRegistration.close();
         LOG.info("DmaapClientProvider Closed");
     }
-
 }
diff --git a/dmaap-client/src/main/resources/OSGI-INF/blueprint/dmaap-blueprint.xml b/dmaap-client/src/main/resources/OSGI-INF/blueprint/dmaap-blueprint.xml
deleted file mode 100644 (file)
index ece6f21..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!-- Copyright © 2021 Orange 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 -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0">
-    <cm:property-placeholder persistent-id="org.opendaylight.transportpce.dmaap" update-strategy="reload">
-        <cm:default-properties>
-            <cm:property name="dmaap.baseUrl" value="http://localhost:8080" />
-            <cm:property name="dmaap.username" value="" />
-             <cm:property name="dmaap.password" value="" />
-        </cm:default-properties>
-    </cm:property-placeholder>
-    <reference id="notificationService" interface="org.opendaylight.mdsal.binding.api.NotificationService"/>
-
-    <bean id="provider"
-          class="org.opendaylight.transportpce.dmaap.client.impl.DmaapClientProvider"
-          init-method="init" destroy-method="close">
-        <argument ref="notificationService" />
-        <argument value="${dmaap.baseUrl}" />
-        <argument value="${dmaap.username}" />
-        <argument value="${dmaap.password}" />
-    </bean>
-</blueprint>
index 6c66201aa12683e556cd99b01e2c75af07e2525a..79f7edcf3ee0b9a4164dd08a73e7e9295c041652 100644 (file)
@@ -31,11 +31,9 @@ public class DmaapClientProviderTest {
 
     @Test
     void testInitRegisterNbiNotificationsToRpcRegistry() {
-        DmaapClientProvider provider =
-            new DmaapClientProvider(notificationService, "http://localhost", "username", "password");
-        provider.init();
-        (verify(notificationService, times(1)))
-                .registerNotificationListener(Mockito.any(NbiNotificationsListenerImpl.class));
+        new DmaapClientProvider(notificationService, "http://localhost", "username", "password");
+        verify(notificationService, times(1))
+            .registerNotificationListener(Mockito.any(NbiNotificationsListenerImpl.class));
     }
 
 }
index c34bd9ad8f45a52134d5a8c0a75f942f66c3fbe7..4da5cb4e591f46bc09b550436dde8fe8f26bf992 100644 (file)
@@ -66,7 +66,7 @@ Bus of ONAP.
 
 Phosphorus consolidates end to end support for high rate services (ODUC4, OTUC4),
 allowing service creation and deletion from the NBI. The support of path
-computation for high rate services (OTUC4) will be added through the different P
+computation for high rate services (OTUC4) has been added through the different P
 releases, relying on GNPy for impairment aware path computation. An experimental
 support of T-API is provided allowing service-create/delete from a T-API version
 2.1.1 compliant NBI. A T-API network topology, with different levels of abstraction
@@ -74,14 +74,25 @@ and service context are maintained in the MDSAL. Service state is managed,
 monitoring device port state changes. Associated notifications are handled through
 Kafka and  DMaaP clients.
 
-The chlorine release brings structural changes to the project. indeed, all the official
+Sulfur is introducing OpenROADM service and network models 10.1, which include the
+operational-modes catalog, needed for future support of Alien Wavelength use cases.
+It also offers T-API notification support, handling the RPC associated with the
+notification subscription service.
+
+The Chlorine release brings structural changes to the project. indeed, all the official
 yang models of the OpenROADM and ONF-TAPI communities are no longer managed directly
 in the TransportPCE project but in a dedicated sub-project: transportpce/models.
 Also, the implementation of these models which is made in TransportPCE now imports
 the models already compiled by maven dependency.
 From a functional point of view, Chlorine supports the autonomous reroute of WDM services
 terminated on 100G or 400G Transponders, as well as the beginning of developments around
-the OpenROAM catalog management that will allow to support Alien Wavelength use cases.
+the OpenROAM catalog management.
+
+The Argon release provides autonomous impairment aware path computation, relying on
+OpenROADM operational-modes catalog. It is used in a first step of the path validation,
+to evaluate the Optical Signal to Noise Ratio as well as the penalty associated with the
+signal across the calculated pass. Validation of the optical path by GNPy is still
+triggered, in a second step, leveraging advanced calculation of non linear contribution.
 
 
 Module description
@@ -113,8 +124,8 @@ interfaces.
 In Silicon release, the management of TopologyUpdateNotification coming from the *Topology Management*
 module was implemented. This functionality enables the controller to update the information of existing
 services according to the online status of the network infrastructure. If any service is affected by
-the topology update and the *odl-transportpce-nbi* feature is installed, the Service Handler will send a
-notification to a Kafka server with the service update information.
+the topology update and the *odl-transportpce-nbinotifications* feature is installed, the Service
+Handler will send a notification to a Kafka server with the service update information.
 
 PCE
 ^^^
@@ -130,39 +141,68 @@ allows keeping PCE aligned with the latest changes in the topology. Information
 about current and planned services is available in the MD-SAL data store.
 
 Current implementation of PCE allows finding the shortest path, minimizing either the hop
-count (default) or the propagation delay. Central wavelength is assigned considering a fixed
-grid of 96 wavelengths 50 GHz spaced. The assignment of wavelengths according to a flexible
-grid considering 768 subsequent slots of 6,25 GHz (total spectrum of 4.8 Thz), and their
-occupation by existing services is planned for later releases.
-In Neon SR0, the PCE calculates the OSNR, on the base of incremental noise specifications
-provided in Open ROADM MSA. The support of unidirectional ports is also added.
+count (default) or the propagation delay. The support of a flexible grid was introduced in Aluminium.
+The central wavelength assignment depends on the  capabilities of the different devices on the path.
+If one of the elements only supports a fixed grid, the wavelength is assigned considering a grid of
+96 wavelengths 50 GHz spaced. If  all the devices on the path support a flexible grid, the assignment
+of wavelengths is done according to a flexible grid considering 768 subsequent slots of 6,25 GHz
+(total spectrum of 4.8 Thz).
 
-PCE handles the following constraints as hard constraints:
+The PCE module handles the following constraints as hard constraints:
 
 -   **Node exclusion**
 -   **SRLG exclusion**
 -   **Maximum latency**
 
-In Magnesium SR0, the interconnection of the PCE with GNPY (Gaussian Noise Python), an
-open-source library developed in the scope of the Telecom Infra Project for building route
-planning and optimizing performance in optical mesh networks, is fully supported. Impairment
-aware path computation for service of higher rates (Beyond 100G) is planned across Phoshorus
-releases. It implies to make B100G OpenROADM specifications available in GNPy libraries.
-
-If the OSNR calculated by the PCE is too close to the limit defined in OpenROADM
-specifications, the PCE forwards through a REST interface to GNPY external tool the topology
-and the pre-computed path translated in routing constraints. GNPy calculates a set of Quality of
-Transmission metrics for this path using its own library which includes models for OpenROADM.
-The result is sent back to the PCE. If the path is validated, the PCE sends back a response to
-the service handler. In case of invalidation of the path by GNPY, the PCE sends a new request to
-GNPY, including only the constraints expressed in the path-computation-request initiated by the
-Service Handler. GNPy then tries to calculate a path based on these relaxed constraints. The
-result of the path computation is provided to the PCE which translates the path according to the
-topology handled in transportPCE and forwards the results to the Service Handler.
-
-GNPy relies on SNR and takes into account the linear and non-linear impairments
-to check feasibility. In the related tests, GNPy module runs externally in a
-docker and the communication with T-PCE is ensured via HTTPs.
+In Neon SR0, the PCE calculates the OSNR, on the base of incremental noise specifications provided
+in Open ROADM MSA. The support of unidirectional ports is also added. The interconnection of the PCE
+with GNPY (Gaussian Noise Python), an open-source library developed in the scope of the Telecom Infra
+Project for building route planning and optimizing performance in optical mesh networks, is supported
+since Magnesium SR0. This allowed introducing impairment aware path computation for (Beyond 100G)
+services across Phoshorus releases.
+
+In Argon, we introduce autonomous impairment aware path computation, leveraging OpenROADM yang
+specification catalog (R10.1), which translates the optical specifications provided in the MSA into
+models understandable by the controller. To each disaggregated element crossed along the path
+(Transponders, ROADM add/drop modules and degrees), is associated an operational mode, for which each
+physical parameters is described in the catalog. This allows evaluating the degradations that each
+element, whether it is a device of fiber span, brings to the signal transmission. The resulting
+Optical Signal to Noise Ratio is calculated, as well as the penalties associated with the cumulated
+chromatic dispersion, Polarisation Mode Dispersion (PMD), Polarization Dependant Loss (PDL)… and the
+non-linear contribution is evaluated.
+
+All of this is done in accordance with OpenROADM optical specifications. Handling OpenROADM specification
+catalogs improves the upgradability of the code, since the future evolution of the specifications only
+implies to add new operational modes to the catalog while the associated code remains unchanged.
+
+In Argon SR0, to benefit from this new functionality, the specification catalog must be manually loaded
+into the data store.  The catalog includes 2 different parts, the first being dedicated to the
+translation of OpenROADM specifications, the second (optional) being dedicated to specific operational
+modes for transponders used in “bookended” mode (same transponders on both ends of the path). The
+automatic filling of the first part of the catalog is planned in Ar SR1. In this release will also be
+supported the 2 RPCs used to fill the different parts of the catalog :
+-   **add-openroadm-operational-mode-to-catalog**
+-   **add-specific-operational-mode-to-catalog**
+
+Autonomous impairment aware path computation is triggered in Argon for any path at the WDM layer,
+whatever is the service rate. The transmission margin is evaluated in both direction and the result is
+provided in INFO Logs. GNPy is used in a second step to enforce path validation. Indeed, it gives
+complementary information to the calculation made from OpenROADM specifications, with a finer assessment
+of non-linear contribution, and potentially a consideration of the interaction with other channels
+already provisioned on the network. This last capability will be added across Argon releases.
+The PCE forwards through a REST interface to GNPY external tool the topology and the pre-computed path
+translated in routing constraints. GNPy calculates a set of Quality of Transmission metrics for this path
+using its own library which includes models for OpenROADM. The result is sent back to the PCE. If the
+path is validated, the PCE sends back a response to the service handler. In case of invalidation of the
+path by GNPY, the PCE sends a new request to GNPY, including only the constraints expressed in the
+path-computation-request initiated by the Service Handler. GNPy then tries to calculate a path based on
+these relaxed constraints. The result of the path computation is provided to the PCE which translates
+the path according to the topology handled in transportPCE and forwards the results to the Service
+Handler.
+
+GNPy relies on SNR and takes into account the linear and non-linear impairments to check feasibility.
+In the related tests, GNPy module runs externally in a docker and the communication with T-PCE is
+ensured via HTTPs.
 
 Topology Management
 ^^^^^^^^^^^^^^^^^^^
index 3ccdb2a3d1b2914f9329b95f4d2fa6a1600696e8..7b7e4f3b113541bfb94d26887d85b1eb5daba3bc 100644 (file)
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>features-transportpce</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: TransportPCE :: Features</name>
 
index 002edacdb29ba183f8eb06ce01b56752a487875e..8f298fc49465421d31b5ca4459b8ab01087ecbd3 100644 (file)
@@ -17,7 +17,7 @@
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-dmaap-client</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: dmaap-client</name>
 
index 49a102f515368d934a986ff331f10a140ff952cc..42fbf3e8bbf21f0dd7666390d8ebe8bf05acaaa2 100644 (file)
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-inventory</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: Inventory</name>
 
   <properties>
     <mdsal.version>11.0.7</mdsal.version>
-    <netconf.version>5.0.3</netconf.version>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <netconf.version>5.0.4</netconf.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
     <transportpce.db.host>localhost:3306</transportpce.db.host>
     <transportpce.db.database>transportpce</transportpce.db.database>
     <transportpce.db.username>root</transportpce.db.username>
index 026b455dd1a3ec28de4f9a5182986f349b784a81..998399b699d39843d9ee964c50e9e3a231480b45 100644 (file)
@@ -17,7 +17,7 @@
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-nbinotifications</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: nbinotifications</name>
 
index 97681c0f94e3482304419a425f95602622abf771..55ebfb34220d7a4c0d8e9eede6f22a378ae38143 100644 (file)
@@ -18,12 +18,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-swagger</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: swagger</name>
 
   <properties>
-    <netconf.version>5.0.3</netconf.version>
+    <netconf.version>5.0.4</netconf.version>
     <configfile.directory>etc/opendaylight/karaf</configfile.directory>
     <skip.karaf.featureTest>false</skip.karaf.featureTest>
   </properties>
index 5ed933095b0abcaf4dbcc7ff2161115cb9de9bcb..0234f02ca0eca1ab1e9bf75ffc842fffd430bb8d 100644 (file)
@@ -18,14 +18,14 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-tapi</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: tapi</name>
 
   <properties>
     <mdsal.version>11.0.7</mdsal.version>
-    <netconf.version>5.0.3</netconf.version>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <netconf.version>5.0.4</netconf.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
     <skip.karaf.featureTest>false</skip.karaf.featureTest>
   </properties>
 
index 829abac2a633cf24e0cb0e16d7d53260a9164581..8e8c1dbc7ab6fb63c82c86daff99cc6896287fab 100644 (file)
@@ -18,13 +18,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce</name>
 
   <properties>
-    <netconf.version>5.0.3</netconf.version>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <netconf.version>5.0.4</netconf.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
     <configfile.directory>etc/opendaylight/karaf</configfile.directory>
     <skip.karaf.featureTest>false</skip.karaf.featureTest>
   </properties>
index 24e8f7748958d50286409800817b178a28bf5f10..800bcae9f67850c3aa190e9377c1b577d89fc139 100644 (file)
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>features-aggregator</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <name>${project.artifactId}</name>
   <packaging>pom</packaging>
 
index 77a53c696fe65b64b339ce2247140da5af115ac6..3e8d3b9ae76c289677a568e9364ec186c3477d06 100644 (file)
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-inventory</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -35,7 +35,7 @@
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.3</version>
+        <version>5.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
       <groupId>org.opendaylight.netconf</groupId>
       <artifactId>sal-netconf-connector</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component.annotations</artifactId>
+    </dependency>
   </dependencies>
 
   <build>
index 2b6a2f9e99fd2c14135000d00023a3d5fb8225b4..dee864b3b96925a025899aff90d4386c78a671c3 100644 (file)
@@ -15,7 +15,6 @@ import java.util.Date;
 import java.util.concurrent.ExecutionException;
 import java.util.regex.Pattern;
 import javax.sql.DataSource;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -30,13 +29,10 @@ public class DeviceInventory {
 
     private final DataSource dataSource;
     private final INode inode;
-    private final DeviceTransactionManager deviceTransactionManager;
 
-    public DeviceInventory(DataSource dataSource, INode inode,
-                           DeviceTransactionManager deviceTransactionManager) {
+    public DeviceInventory(DataSource dataSource, INode inode) {
         this.dataSource = dataSource;
         this.inode = inode;
-        this.deviceTransactionManager = deviceTransactionManager;
     }
 
     public void init() {
index c7299c835b230c05d60ca0d7e821627c3b159407..368f4020301ce6061a0f02fa9c94434a4e91dde2 100644 (file)
@@ -13,7 +13,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import javax.sql.DataSource;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -24,16 +23,13 @@ public class INode {
     private static final Logger LOG = LoggerFactory.getLogger(INode.class);
 
     private final DataSource dataSource;
-    private final DeviceTransactionManager deviceTransactionManager;
     //private final INode221 inode221;
     private final INode121 inode121;
 
-    public INode(DataSource dataSource, DeviceTransactionManager deviceTransactionManager,
-        INode121 inode121
+    public INode(DataSource dataSource, INode121 inode121
         //, INode221 inode221
     ) {
         this.dataSource = dataSource;
-        this.deviceTransactionManager = deviceTransactionManager;
         this.inode121 = inode121;
         //this.inode221 = inode221;
     }
index 0e1227d29ab0b10798100c3b2db3c97811272aad..651621aa59151146af8493cfa9cf08a60bb64c40 100644 (file)
@@ -7,81 +7,84 @@
  */
 package org.opendaylight.transportpce.inventory;
 
+import java.util.ArrayList;
+import java.util.List;
+import javax.sql.DataSource;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.InstanceIdentifiers;
+import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.inventory.listener.ClliNetworkChangeListener;
 import org.opendaylight.transportpce.inventory.listener.DeviceConfigListener;
 import org.opendaylight.transportpce.inventory.listener.DeviceListener;
 import org.opendaylight.transportpce.inventory.listener.OverlayNetworkChangeListener;
 import org.opendaylight.transportpce.inventory.listener.UnderlayNetworkChangeListener;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.concepts.Registration;
+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;
 
 /**
  * {@link ListenerProvider} registers {@link DataTreeChangeListener} for each network layer.
  */
+@Component
 public class ListenerProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(ListenerProvider.class);
-
-    private final DataBroker dataBroker;
-    private final OverlayNetworkChangeListener overlayNetworkListener;
-    private final UnderlayNetworkChangeListener underlayNetworkListener;
-    private final ClliNetworkChangeListener clliNetworkChangeListener;
-    private final DeviceListener deviceListener;
-    private final DeviceConfigListener deviceConfigListener;
+    private List<Registration> listeners = new ArrayList<>();
 
     /**
      * Constructor invoked by blueprint injects all dependencies.
      *
      * @param dataBroker dataBroker
-     * @param overlayNetworkListener  overlay-network Listener
-     * @param underlayNetworkListener underlay-network Listener
-     * @param clliNetworkChangeListener clli Network change Listener
-     * @param deviceListener device listener
-     * @param deviceConfigListener device config listener
+     * @param dataSource dataSource
+     * @param deviceTransactionManager deviceTransactionManager
      */
-    public ListenerProvider(DataBroker dataBroker, OverlayNetworkChangeListener overlayNetworkListener,
-        UnderlayNetworkChangeListener underlayNetworkListener, ClliNetworkChangeListener clliNetworkChangeListener,
-        DeviceListener deviceListener, DeviceConfigListener deviceConfigListener) {
-
-        this.dataBroker = dataBroker;
-        this.overlayNetworkListener = overlayNetworkListener;
-        this.underlayNetworkListener = underlayNetworkListener;
-        this.clliNetworkChangeListener = clliNetworkChangeListener;
-        this.deviceListener = deviceListener;
-        this.deviceConfigListener = deviceConfigListener;
-    }
+    @Activate
+    public ListenerProvider(@Reference DataBroker dataBroker,
+            @Reference DataSource dataSource,
+            @Reference DeviceTransactionManager deviceTransactionManager) {
 
-    /**
-     * Invoked by blueprint, registers the listeners.
-     */
-    public void initialize() {
         LOG.debug("Registering listeners...");
-        dataBroker.registerDataTreeChangeListener(
+        OverlayNetworkChangeListener overlayNetworkListener = new OverlayNetworkChangeListener();
+        listeners.add(dataBroker.registerDataTreeChangeListener(
                 DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, InstanceIdentifiers.OVERLAY_NETWORK_II),
-                overlayNetworkListener);
+                overlayNetworkListener));
         LOG.info("Overlay network change listener was successfully registered");
-        dataBroker.registerDataTreeChangeListener(
+        UnderlayNetworkChangeListener underlayNetworkListener = new UnderlayNetworkChangeListener();
+        listeners.add(dataBroker.registerDataTreeChangeListener(
                 DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, InstanceIdentifiers.UNDERLAY_NETWORK_II),
-                underlayNetworkListener);
+                underlayNetworkListener));
         LOG.info("Underlay network change listener was successfully registered");
-        dataBroker.registerDataTreeChangeListener(
+        ClliNetworkChangeListener clliNetworkChangeListener = new ClliNetworkChangeListener();
+        listeners.add(dataBroker.registerDataTreeChangeListener(
                 DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, InstanceIdentifiers.CLLI_NETWORK_II),
-                clliNetworkChangeListener);
+                clliNetworkChangeListener));
         LOG.info("CLLI network change listener was successfully registered");
-        dataBroker.registerDataTreeChangeListener(
+        INode121 inode121 = new INode121(dataSource, deviceTransactionManager);
+        INode inode = new INode(dataSource, inode121);
+        DeviceInventory deviceInventory = new DeviceInventory(dataSource, inode);
+        DeviceListener deviceListener = new DeviceListener(deviceInventory);
+        listeners.add(dataBroker.registerDataTreeChangeListener(
                 DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), deviceListener);
+                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), deviceListener));
         LOG.info("Device change listener was successfully registered");
-        dataBroker.registerDataTreeChangeListener(
+        DeviceConfigListener deviceConfigListener = new DeviceConfigListener(deviceInventory);
+        listeners.add(dataBroker.registerDataTreeChangeListener(
                 DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), deviceConfigListener);
+                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), deviceConfigListener));
         LOG.info("Device config change listener was successfully registered");
     }
 
+    @Deactivate
+    public void close() {
+        listeners.forEach(lis -> lis.close());
+        listeners.clear();
+    }
 }
diff --git a/inventory/src/main/resources/OSGI-INF/blueprint/inventory-blueprint.xml b/inventory/src/main/resources/OSGI-INF/blueprint/inventory-blueprint.xml
deleted file mode 100644 (file)
index d242a7c..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!-- Copyright © 2016 Orange 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 -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <reference id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-    <reference id="dataSource" interface="javax.sql.DataSource"/>
-    <reference id="deviceTransactionManager"
-               interface="org.opendaylight.transportpce.common.device.DeviceTransactionManager"/>
-
-    <bean id="deviceInventory" class="org.opendaylight.transportpce.inventory.DeviceInventory">
-        <argument ref="dataSource"/>
-        <argument ref="iNodeImpl"/>
-        <argument ref="deviceTransactionManager"/>
-    </bean>
-
-    <bean id="iNode121" class="org.opendaylight.transportpce.inventory.INode121">
-        <argument ref="dataSource"/>
-        <argument ref="deviceTransactionManager"/>
-    </bean>
-
-    <bean id="iNodeImpl" class="org.opendaylight.transportpce.inventory.INode">
-        <argument ref="dataSource"/>
-        <argument ref="deviceTransactionManager"/>
-        <argument ref="iNode121"/>
-
-    </bean>
-
-    <bean id="overlayNetworkChangeListener"
-          class="org.opendaylight.transportpce.inventory.listener.OverlayNetworkChangeListener"/>
-    <bean id="underlayNetworkChangeListener"
-          class="org.opendaylight.transportpce.inventory.listener.UnderlayNetworkChangeListener"/>
-    <bean id="clliNetworkChangeListener"
-          class="org.opendaylight.transportpce.inventory.listener.ClliNetworkChangeListener"/>
-
-    <bean id="deviceListener" class="org.opendaylight.transportpce.inventory.listener.DeviceListener">
-        <argument ref="deviceInventory"/>
-    </bean>
-
-    <bean id="deviceConfigListener" class="org.opendaylight.transportpce.inventory.listener.DeviceConfigListener">
-        <argument ref="deviceInventory"/>
-    </bean>
-
-    <bean id="listenerProvider" class="org.opendaylight.transportpce.inventory.ListenerProvider"
-          init-method="initialize">
-        <argument ref="dataBroker"/>
-        <argument ref="overlayNetworkChangeListener"/>
-        <argument ref="underlayNetworkChangeListener"/>
-        <argument ref="clliNetworkChangeListener"/>
-        <argument ref="deviceListener"/>
-        <argument ref="deviceConfigListener"/>
-    </bean>
-
-</blueprint>
index 28ad85a63f2073539320949768143484da6ae014..e74a7a02f28c8becd6ef2e82ae428d198af573ce 100644 (file)
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-karaf</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>${project.artifactId}</name>
 
index 9f5fd0e634f2ac5b772d7e20f9e4fc6a1c757b20..6ae7b33b4a885963ecbc3f6f89276b1d190beafd 100644 (file)
 
   <groupId>io.lighty.controllers</groupId>
   <artifactId>tpce</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>
 
   <properties>
     <application.main.class>io.lighty.controllers.tpce.Main</application.main.class>
     <application.attach.zip>true</application.attach.zip>
     <maven.deploy.skip>true</maven.deploy.skip>
-    <transportpce.version>7.0.0-SNAPSHOT</transportpce.version>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.version>7.0.1-SNAPSHOT</transportpce.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
index 7b9c99c6b2f16b2714f0ee917687a1dfe449fe71..8eb97e47f498e416f48af8e48a883ceca1e5594c 100644 (file)
@@ -9,9 +9,6 @@ package io.lighty.controllers.tpce.module;
 
 import io.lighty.core.controller.api.AbstractLightyModule;
 import io.lighty.core.controller.api.LightyServices;
-import java.util.Arrays;
-import java.util.List;
-import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
@@ -35,8 +32,6 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
-import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
-import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
@@ -64,6 +59,7 @@ import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererS
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
+import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
@@ -72,22 +68,14 @@ import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerIm
 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
-import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
-import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
-import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
-import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.transportpce.tapi.utils.TapiListener;
+import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
 import org.slf4j.Logger;
@@ -116,12 +104,6 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
     private TapiProvider tapiProvider;
     // nbi-notifications beans
     private NbiNotificationsProvider nbiNotificationsProvider;
-    /**
-     * List of publisher topics.
-     */
-    private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
-            "ServiceHandler", "RendererListener");
-    private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
 
     public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
                             String olmtimer1, String olmtimer2) {
@@ -131,8 +113,6 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
         networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
 
         LOG.info("Creating network-model beans ...");
-        R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
-                deviceTransactionManager, networkTransaction);
         PortMapping portMapping = initPortMapping(lightyServices);
         NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
                 deviceTransactionManager, networkTransaction, portMapping,
@@ -191,48 +171,33 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
             lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
         NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
                 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
-        ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
-            pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
-            pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
+        ServicehandlerImpl servicehandler = new ServicehandlerImpl(pathComputationService, rendererServiceOperations,
+                lightyServices.getBindingNotificationPublishService(), pceListenerImpl, rendererListenerImpl,
+                networkModelListenerImpl, serviceDataStoreOperations);
         ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
                 lightyServices.getBindingNotificationPublishService());
         servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
                 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
-                serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
-                networkModelListenerImpl, servicehandler);
+                serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
+                lightyServices.getBindingNotificationPublishService(), servicehandler, serviceListener);
         if (activateTapi) {
             LOG.info("Creating tapi beans ...");
-            TapiLink tapiLink = new TapiLink(networkTransaction);
-            R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
-                    deviceTransactionManager, tapiLink);
-            TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
-                    .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
-            TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
-            TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
-                    lightyServices.getBindingDataBroker());
-            TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
-                    networkTransaction, tapiLink);
-            TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
-                    tapilinkDiscoveryImpl, networkTransaction, tapiLink,
-                    lightyServices.getBindingNotificationPublishService());
-            TapiNetconfTopologyListener tapiNetConfTopologyListener =
-                    new TapiNetconfTopologyListener(tapiNetworkModelService);
-            TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
-            TapiPortMappingListener tapiPortMappingListener =
-                    new TapiPortMappingListener(tapiNetworkModelService);
+            TapiLink tapiLink = new TapiLinkImpl(networkTransaction);
+            new TapiNetworkUtilsImpl(networkTransaction, tapiLink);
+            TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(networkTransaction,
+                    deviceTransactionManager, tapiLink, lightyServices.getBindingNotificationPublishService());
             TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
                     new TapiNetworkModelListenerImpl(networkTransaction,
                             lightyServices.getBindingNotificationPublishService());
 
             tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
-                    tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
-                    tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
-                    lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
+                    tapiNetworkModelListenerImpl, tapiLink, tapiNetworkModelService);
+
         }
         if (activateNbiNotification) {
             LOG.info("Creating nbi-notifications beans ...");
             nbiNotificationsProvider = new NbiNotificationsProvider(
-                    publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
+                    null, null, lightyServices.getRpcProviderService(),
                     lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
                     networkTransaction);
         }
@@ -240,15 +205,11 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
 
     @Override
     protected boolean initProcedure() {
-        LOG.info("Initializing service-handler provider ...");
-        servicehandlerProvider.init();
         if (tapiProvider != null) {
             LOG.info("Initializing tapi provider ...");
-            tapiProvider.init();
         }
         if (nbiNotificationsProvider != null) {
             LOG.info("Initializing nbi-notifications provider ...");
-            nbiNotificationsProvider.init();
         }
         LOG.info("Init done.");
         return true;
@@ -282,18 +243,14 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
                                   NetworkTransactionService networkTransactionService,
                                   ServiceDataStoreOperations serviceDataStoreOperations,
-                                  TapiNetconfTopologyListener tapiNetConfTopologyListener,
-                                  TapiPortMappingListener tapiPortMappingListener,
-                                  TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
-                                  TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
-                                  TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
-                                  NotificationService notificationService, TapiOrLinkListener orLinkListener,
-                                  TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
+                                  TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl,
+                                  TapiLink tapiLink, TapiNetworkModelService tapiNetworkModelService) {
+        TransportpceTapinetworkutilsService tapiNetworkUtils = new TapiNetworkUtilsImpl(networkTransactionService,
+            tapiLink);
         return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
-            servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
-            tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
-            rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
-            tapiNetworkModelListenerImpl);
+            lightyServices.getNotificationService(), lightyServices.getBindingNotificationPublishService(),
+            networkTransactionService, servicehandler, serviceDataStoreOperations, tapiNetworkUtils,
+            tapiNetworkModelListenerImpl, tapiNetworkModelService);
     }
 
     private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
@@ -306,7 +263,8 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
                 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
                 portMapping);
         return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererService,
-                otnDeviceRendererService, rendererServiceOperations);
+                otnDeviceRendererService, deviceRendererRPC,
+                new TransportPCEServicePathRPCImpl(rendererServiceOperations));
     }
 
     private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
index 27e201bbe6579c2eaea2e8346531d8e08d7ce4eb..344e249910f8203375d73e2b00714e16db11446b 100644 (file)
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-nbinotifications</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
     <kafka.version>3.0.0</kafka.version>
   </properties>
 
       <artifactId>kafka-clients</artifactId>
       <version>${kafka.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component.annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.metatype.annotations</artifactId>
+    </dependency>
 
     <!-- Testing Dependencies -->
     <dependency>
index 863d689a3af8db038276ca6435902caf1f8b2c2d..ac4c6ef8e61660e4d9b4e32a496e9185fa2c98dc 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.nbinotifications.impl;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -26,72 +27,84 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapi
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationService;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
+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.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component(configurationPid = "org.opendaylight.transportpce.nbinotifications")
 public class NbiNotificationsProvider {
 
+    @ObjectClassDefinition
+    public @interface Configuration {
+        @AttributeDefinition
+        String suscriberServer() default "";
+        @AttributeDefinition
+        String publisherServer() default "";
+    }
+
     private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsProvider.class);
     private static Map<String, Publisher<NotificationProcessService>> publishersServiceMap =  new HashMap<>();
     private static Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap =  new HashMap<>();
-    private final RpcProviderService rpcService;
-    private final NotificationService notificationService;
-    private final JsonStringConverter<NotificationProcessService> converterService;
-    private final JsonStringConverter<NotificationAlarmService> converterAlarmService;
-    private final JsonStringConverter<NotificationTapiService> converterTapiService;
-    private final String subscriberServer;
-    private ObjectRegistration<NbiNotificationsService> rpcRegistration;
     private ListenerRegistration<NbiNotificationsListener> listenerRegistration;
-    private TopicManager topicManager = TopicManager.getInstance();
-    private final NetworkTransactionService networkTransactionService;
+    private List<ObjectRegistration<NbiNotificationsImpl>> rpcRegistrations = new ArrayList<>();
 
+    @Activate
+    public NbiNotificationsProvider(@Reference RpcProviderService rpcProviderService,
+            @Reference NotificationService notificationService,
+            @Reference BindingDOMCodecServices bindingDOMCodecServices,
+            @Reference NetworkTransactionService networkTransactionService,
+            final Configuration configuration) {
+        this(configuration.suscriberServer(), configuration.publisherServer(), rpcProviderService, notificationService,
+                bindingDOMCodecServices, networkTransactionService);
+    }
 
-    public NbiNotificationsProvider(List<String> publishersService, List<String> publishersAlarm,
-                                    String subscriberServer, String publisherServer,
-                                    RpcProviderService rpcProviderService, NotificationService notificationService,
-                                    BindingDOMCodecServices bindingDOMCodecServices,
-                                    NetworkTransactionService networkTransactionService) {
-        this.rpcService = rpcProviderService;
-        this.notificationService = notificationService;
-        this.topicManager.setPublisherServer(publisherServer);
-        converterService =  new JsonStringConverter<>(bindingDOMCodecServices);
-        this.topicManager.setProcessConverter(converterService);
-        for (String publisherService: publishersService) {
+    public NbiNotificationsProvider(String subscriberServer, String publisherServer,
+            RpcProviderService rpcProviderService, NotificationService notificationService,
+            BindingDOMCodecServices bindingDOMCodecServices, NetworkTransactionService networkTransactionService) {
+        List<String> publishersServiceList = List.of("PceListener", "ServiceHandlerOperations", "ServiceHandler",
+                "RendererListener");
+        TopicManager topicManager = TopicManager.getInstance();
+        topicManager.setPublisherServer(publisherServer);
+        JsonStringConverter<NotificationProcessService> converterService =
+            new JsonStringConverter<>(bindingDOMCodecServices);
+        topicManager.setProcessConverter(converterService);
+        for (String publisherService: publishersServiceList) {
             LOG.info("Creating publisher for the following class {}", publisherService);
-            this.topicManager.addProcessTopic(publisherService);
+            topicManager.addProcessTopic(publisherService);
         }
-        converterAlarmService = new JsonStringConverter<>(bindingDOMCodecServices);
-        this.topicManager.setAlarmConverter(converterAlarmService);
-        for (String publisherAlarm: publishersAlarm) {
+        JsonStringConverter<NotificationAlarmService> converterAlarmService =
+                new JsonStringConverter<>(bindingDOMCodecServices);
+        topicManager.setAlarmConverter(converterAlarmService);
+        List<String> publishersAlarmList = List.of("ServiceListener");
+        for (String publisherAlarm: publishersAlarmList) {
             LOG.info("Creating publisher for the following class {}", publisherAlarm);
-            this.topicManager.addAlarmTopic(publisherAlarm);
+            topicManager.addAlarmTopic(publisherAlarm);
         }
-        this.subscriberServer = subscriberServer;
-        converterTapiService = new JsonStringConverter<>(bindingDOMCodecServices);
+        JsonStringConverter<NotificationTapiService> converterTapiService =
+                new JsonStringConverter<>(bindingDOMCodecServices);
         LOG.info("baozhi tapi converter: {}", converterTapiService);
-        this.topicManager.setTapiConverter(converterTapiService);
-        this.networkTransactionService = networkTransactionService;
-    }
+        topicManager.setTapiConverter(converterTapiService);
 
-    /**
-     * Method called when the blueprint container is created.
-     */
-    public void init() {
-        LOG.info("NbiNotificationsProvider Session Initiated");
         NbiNotificationsImpl nbiImpl = new NbiNotificationsImpl(converterService, converterAlarmService,
-            converterTapiService, subscriberServer, this.networkTransactionService, this.topicManager);
-        rpcRegistration = rpcService.registerRpcImplementation(NbiNotificationsService.class, nbiImpl);
-        rpcService.registerRpcImplementation(TapiNotificationService.class, nbiImpl);
-        NbiNotificationsListenerImpl nbiNotificationsListener =
-                new NbiNotificationsListenerImpl(this.topicManager.getProcessTopicMap(),
-                        this.topicManager.getAlarmTopicMap(), this.topicManager.getTapiTopicMap());
+            converterTapiService, subscriberServer, networkTransactionService, topicManager);
+        rpcRegistrations.add(rpcProviderService.registerRpcImplementation(NbiNotificationsService.class, nbiImpl));
+        rpcRegistrations.add(rpcProviderService.registerRpcImplementation(TapiNotificationService.class, nbiImpl));
+        NbiNotificationsListenerImpl nbiNotificationsListener = new NbiNotificationsListenerImpl(
+                topicManager.getProcessTopicMap(), topicManager.getAlarmTopicMap(), topicManager.getTapiTopicMap());
         listenerRegistration = notificationService.registerNotificationListener(nbiNotificationsListener);
-        this.topicManager.setNbiNotificationsListener(nbiNotificationsListener);
+        topicManager.setNbiNotificationsListener(nbiNotificationsListener);
+        LOG.info("NbiNotificationsProvider Session Initiated");
     }
 
     /**
      * Method called when the blueprint container is destroyed.
      */
+    @Deactivate
     public void close() {
         for (Publisher<NotificationProcessService> publisher : publishersServiceMap.values()) {
             publisher.close();
@@ -99,9 +112,8 @@ public class NbiNotificationsProvider {
         for (Publisher<NotificationAlarmService> publisherAlarm : publishersAlarmMap.values()) {
             publisherAlarm.close();
         }
-        rpcRegistration.close();
+        rpcRegistrations.forEach(reg -> reg.close());
         listenerRegistration.close();
         LOG.info("NbiNotificationsProvider Closed");
     }
-
 }
diff --git a/nbinotifications/src/main/resources/OSGI-INF/blueprint/nobinotifications-blueprint.xml b/nbinotifications/src/main/resources/OSGI-INF/blueprint/nobinotifications-blueprint.xml
deleted file mode 100644 (file)
index 5b0176c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!-- Copyright © 2020 Orange 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 -->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0">
-    <cm:property-placeholder persistent-id="org.opendaylight.transportpce.nbinotifications" update-strategy="reload">
-        <cm:default-properties>
-            <cm:property name="suscriber.server" value="" />
-            <cm:property name="publisher.server" value="" />
-        </cm:default-properties>
-    </cm:property-placeholder>
-    <reference id="rpcService" interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
-    <reference id="notificationService" interface="org.opendaylight.mdsal.binding.api.NotificationService"/>
-    <reference id="bindingDOMCodecServices" interface="org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices" />
-    <reference id="networkTransactionImpl"
-               interface="org.opendaylight.transportpce.common.network.NetworkTransactionService" />
-    <bean id="provider"
-        class="org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider"
-        init-method="init" destroy-method="close">
-        <argument>
-            <list value-type="java.lang.String">
-                <value>PceListener</value>
-                <value>ServiceHandlerOperations</value>
-                <value>ServiceHandler</value>
-                <value>RendererListener</value>
-            </list>
-        </argument>
-        <argument>
-            <list value-type="java.lang.String">
-                <value>ServiceListener</value>
-            </list>
-        </argument>
-        <argument value="${suscriber.server}"/>
-        <argument value="${publisher.server}"/>
-        <argument ref="rpcService" />
-        <argument ref="notificationService" />
-        <argument ref="bindingDOMCodecServices" />
-        <argument ref="networkTransactionImpl" />
-    </bean>
-</blueprint>
index bbf2e62e063d8ebbcda1996ead49050c8853a471..68a93c3289bf0fda9a19a061db25a9e6d06a9ebe 100644 (file)
@@ -11,7 +11,6 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
-import java.util.Arrays;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
@@ -28,7 +27,6 @@ public class NbiNotificationsProviderTest  extends AbstractTest {
 
     @Mock
     RpcProviderService rpcProviderRegistry;
-
     @Mock
     private NotificationService notificationService;
 
@@ -40,11 +38,9 @@ public class NbiNotificationsProviderTest  extends AbstractTest {
     @Test
     void initTest() {
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-        NbiNotificationsProvider provider = new NbiNotificationsProvider(
-                Arrays.asList("topic1", "topic2"), Arrays.asList("topic1", "topic2"), "localhost:8080",
-                "localhost:8080", rpcProviderRegistry, notificationService,
-                getDataStoreContextUtil().getBindingDOMCodecServices(), networkTransactionService);
-        provider.init();
+        NbiNotificationsProvider provider = new NbiNotificationsProvider("localhost:8080", "localhost:8080",
+                rpcProviderRegistry, notificationService, getDataStoreContextUtil().getBindingDOMCodecServices(),
+                networkTransactionService);
         verify(rpcProviderRegistry, times(2))
                 .registerRpcImplementation(any(), any(NbiNotificationsImpl.class));
         verify(notificationService, times(1))
index 2fc497f61232c4c3f1bbfe067064453a0b08c402..52be880d7e3226685e1c4a10e85a5d47ec81ddd2 100644 (file)
@@ -19,11 +19,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-networkmodel</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -52,7 +52,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.3</version>
+        <version>5.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
index 571f9076c35ce71e2b8e0fe3a1fd27de8893a883..a1c359452bed1a0c0172a55a1ba5dd54a0e0e94b 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.transportpce.networkmodel;
 
+import java.util.ArrayList;
+import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
@@ -51,8 +53,7 @@ public class NetworkModelProvider {
     private final RpcProviderService rpcProviderService;
     private final TransportpceNetworkutilsService networkutilsService;
     private final NetConfTopologyListener topologyListener;
-    private ListenerRegistration<NetConfTopologyListener> dataTreeChangeListenerRegistration;
-    private ListenerRegistration<PortMappingListener> mappingListenerRegistration;
+    private List<Registration> listeners;
     private @NonNull Registration networkutilsServiceRpcRegistration;
     private TpceNetwork tpceNetwork;
     private ListenerRegistration<TransportpceServicehandlerListener> serviceHandlerListenerRegistration;
@@ -73,6 +74,7 @@ public class NetworkModelProvider {
         this.rpcProviderService = rpcProviderService;
         this.notificationService = notificationService;
         this.frequenciesService = frequenciesService;
+        this.listeners = new ArrayList<>();
         this.networkutilsService = new NetworkUtilsImpl(dataBroker);
         this.topologyListener = new NetConfTopologyListener(networkModelService, dataBroker, deviceTransactionManager,
             portMapping);
@@ -90,11 +92,11 @@ public class NetworkModelProvider {
         tpceNetwork.createLayer(NetworkUtils.UNDERLAY_NETWORK_ID);
         tpceNetwork.createLayer(NetworkUtils.OVERLAY_NETWORK_ID);
         tpceNetwork.createLayer(NetworkUtils.OTN_NETWORK_ID);
-        dataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
+        listeners.add(dataBroker.registerDataTreeChangeListener(
                 DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), topologyListener);
-        mappingListenerRegistration = dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, MAPPING_II), portMappingListener);
+                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), topologyListener));
+        listeners.add(dataBroker.registerDataTreeChangeListener(
+                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, MAPPING_II), portMappingListener));
         networkutilsServiceRpcRegistration = rpcProviderService
             .registerRpcImplementation(TransportpceNetworkutilsService.class, networkutilsService);
         TransportpceServicehandlerListener serviceHandlerListner = new ServiceHandlerListener(frequenciesService);
@@ -107,12 +109,8 @@ public class NetworkModelProvider {
     @Deactivate
     public void close() {
         LOG.info("NetworkModelProvider Closed");
-        if (dataTreeChangeListenerRegistration != null) {
-            dataTreeChangeListenerRegistration.close();
-        }
-        if (mappingListenerRegistration != null) {
-            mappingListenerRegistration.close();
-        }
+        listeners.forEach(lis -> lis.close());
+        listeners.clear();
         if (networkutilsServiceRpcRegistration != null) {
             networkutilsServiceRpcRegistration.close();
         }
index 451e63ba55b4666d4bbd34835faa4d00f6339b37..8d5ba9f8c6867aed38f1111c9152721c31728d77 100644 (file)
@@ -19,6 +19,7 @@ import org.mockito.Mock;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.stubbing.Answer;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
@@ -27,14 +28,15 @@ import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
-import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 
 @ExtendWith(MockitoExtension.class)
-public class NetworkModelProviderTest extends AbstractTest {
+public class NetworkModelProviderTest {
     @Mock
     NetworkTransactionService networkTransactionService;
     @Mock
+    DataBroker dataBroker;
+    @Mock
     RpcProviderService rpcProviderService;
     @Mock
     NetworkModelService networkModelService;
@@ -62,11 +64,11 @@ public class NetworkModelProviderTest extends AbstractTest {
         };
         when(networkTransactionService.commit()).then(answer);
 
-        new NetworkModelProvider(networkTransactionService, getDataBroker(),
-            rpcProviderService, networkModelService, deviceTransactionManager, portMapping, notificationService,
-            frequenciesService);
+        new NetworkModelProvider(networkTransactionService, dataBroker, rpcProviderService, networkModelService,
+                deviceTransactionManager, portMapping, notificationService, frequenciesService);
 
         verify(rpcProviderService, times(1))
             .registerRpcImplementation(any(), any(TransportpceNetworkutilsService.class));
+        verify(dataBroker, times(2)).registerDataTreeChangeListener(any(), any());
     }
 }
index 53caef045358665677a6e897f3eafbd4013de619..acd72058774a3b4fa55d9f1181e60cfbcbdfe5cd 100644 (file)
@@ -19,11 +19,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-olm</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
index 04bd19e0a1952a044cf1f9ddfd0614478c628671..a698df9d9ce075327390b91d34bb34519e4622cc 100644 (file)
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-pce</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
diff --git a/pom.xml b/pom.xml
index 9c9b418552c43ce349ac06195ee4f80b54a801a5..f25c4a15b6f4702cbb06e1bd9b37dbf38f1359a9 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-aggregator</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <name>transportpce</name>
   <packaging>pom</packaging>
 
index 5834944dbf3b0e4ff5ba46051db0b7671316b5de..74d7ffaf08fc56636a8406b35d8b4f01b3a124d1 100644 (file)
@@ -19,11 +19,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-renderer</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
index 2f66a4ecb1e55a0070220af6452d2f2174b7cae2..41aed38be2165ab372d6b1f91f54aa9caff7aebc 100644 (file)
@@ -10,9 +10,6 @@ package org.opendaylight.transportpce.renderer;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
-import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
-import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
-import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.TransportpceDeviceRendererService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
@@ -28,19 +25,16 @@ public class RendererProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(RendererProvider.class);
     private final RpcProviderService rpcProviderService;
-    private DeviceRendererRPCImpl deviceRendererRPCImpl;
-    private TransportPCEServicePathRPCImpl transportPCEServicePathRPCImpl;
-    private ObjectRegistration<DeviceRendererRPCImpl> deviceRendererRegistration;
+    private ObjectRegistration<TransportpceDeviceRendererService> deviceRendererRegistration;
     private ObjectRegistration<TransportpceRendererService> tpceServiceRegistry;
 
     @Activate
     public RendererProvider(@Reference RpcProviderService rpcProviderService,
             @Reference DeviceRendererService deviceRenderer,
             @Reference OtnDeviceRendererService otnDeviceRendererService,
-            @Reference RendererServiceOperations rendererServiceOperations) {
+            @Reference TransportpceDeviceRendererService deviceRendererRPCImpl,
+            @Reference TransportpceRendererService transportPCEServicePathRPCImpl) {
         this.rpcProviderService = rpcProviderService;
-        this.deviceRendererRPCImpl = new DeviceRendererRPCImpl(deviceRenderer, otnDeviceRendererService);
-        this.transportPCEServicePathRPCImpl = new TransportPCEServicePathRPCImpl(rendererServiceOperations);
         LOG.info("RendererProvider Session Initiated");
         this.deviceRendererRegistration = this.rpcProviderService
                 .registerRpcImplementation(TransportpceDeviceRendererService.class, deviceRendererRPCImpl);
index 78bd06c327224624176a42c089242752c26161b4..39141700b7875bd321eebeb6bae7e427bb083c4e 100644 (file)
@@ -26,17 +26,22 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.re
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.TransportpceDeviceRendererService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component(immediate = true)
 public class DeviceRendererRPCImpl implements TransportpceDeviceRendererService {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeviceRendererRPCImpl.class);
     private DeviceRendererService deviceRenderer;
     private OtnDeviceRendererService otnDeviceRendererService;
 
-    public DeviceRendererRPCImpl(DeviceRendererService deviceRenderer,
-                                 OtnDeviceRendererService otnDeviceRendererService) {
+    @Activate
+    public DeviceRendererRPCImpl(@Reference DeviceRendererService deviceRenderer,
+            @Reference OtnDeviceRendererService otnDeviceRendererService) {
         this.deviceRenderer = deviceRenderer;
         this.otnDeviceRendererService = otnDeviceRendererService;
         LOG.debug("DeviceRendererRPCImpl instantiated");
index 38c7fd25210ad5ebedf79d2c5aa33d9752a37e4b..f43204df44b584719ad9320b805325d120692236 100644 (file)
@@ -17,16 +17,21 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component(immediate = true)
 public class TransportPCEServicePathRPCImpl implements TransportpceRendererService {
 
     private static final Logger LOG = LoggerFactory.getLogger(TransportPCEServicePathRPCImpl.class);
 
     private final RendererServiceOperations rendererServiceOperations;
 
-    public TransportPCEServicePathRPCImpl(RendererServiceOperations rendererServiceOperations) {
+    @Activate
+    public TransportPCEServicePathRPCImpl(@Reference RendererServiceOperations rendererServiceOperations) {
         this.rendererServiceOperations = rendererServiceOperations;
         LOG.debug("TransportPCEServicePathRPCImpl instantiated");
     }
index d6845de1fd6120acf7995a12843e068ef539ea19..611326ae35a891e8f6c82a7a8f87acb9b801a5d5 100644 (file)
@@ -18,7 +18,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
-import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
 import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
 import org.opendaylight.transportpce.test.AbstractTest;
@@ -33,11 +32,14 @@ public class RendererProviderTest extends AbstractTest {
     @Mock
     OtnDeviceRendererService otnDeviceRendererService;
     @Mock
-    RendererServiceOperations rendererServiceOperations;
+    DeviceRendererRPCImpl deviceRendererRPCImpl;
+    @Mock
+    TransportPCEServicePathRPCImpl transportPCEServicePathRPCImpl;
 
     @Test
     void testInitMethodRegistersRendererToRpcService() {
-        new RendererProvider(rpcProviderService, deviceRenderer, otnDeviceRendererService, rendererServiceOperations);
+        new RendererProvider(rpcProviderService, deviceRenderer, otnDeviceRendererService, deviceRendererRPCImpl,
+            transportPCEServicePathRPCImpl);
 
         verify(rpcProviderService, times(1))
             .registerRpcImplementation(any(), any(TransportPCEServicePathRPCImpl.class));
index 635255ba937ad84186a2b2ff54acc2c8ab74d801..5943a714493ee362a64069fcc4483bf839863a9f 100644 (file)
@@ -21,11 +21,11 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-servicehandler</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -106,6 +106,10 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component.annotations</artifactId>
+    </dependency>
 
     <!-- Testing Dependencies -->
     <dependency>
index 7d3d4f9edb7bcfde39b2cdc32d83bfd4100a121a..40dd9bde7a2add7bc8b3e18153b292d8aaf35c4a 100644 (file)
@@ -13,7 +13,6 @@ import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.Map;
 import java.util.Optional;
-import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.common.ResponseCodes;
@@ -22,9 +21,9 @@ import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOpe
 import org.opendaylight.transportpce.servicehandler.DowngradeConstraints;
 import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
 import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.RendererServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
@@ -118,6 +117,9 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.pro
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -125,6 +127,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Top level service interface providing main OpenROADM controller services.
  */
+@Component
 public class ServicehandlerImpl implements OrgOpenroadmServiceService {
     private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerImpl.class);
     private static final String PUBLISHER = "ServiceHandler";
@@ -136,29 +139,30 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService {
     private static final String SERVICE_DELETE_MSG = "serviceDelete: {}";
     private static final String SERVICE_CREATE_MSG = "serviceCreate: {}";
 
-    private DataBroker db;
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private PCEServiceWrapper pceServiceWrapper;
     private RendererServiceWrapper rendererServiceWrapper;
-    private PceListenerImpl pceListenerImpl;
-    private RendererListenerImpl rendererListenerImpl;
-    private NetworkModelListenerImpl networkModelListenerImpl;
+    private PceListener pceListenerImpl;
+    private RendererListener rendererListenerImpl;
+    private NetworkListener networkModelListenerImpl;
     private NotificationPublishService notificationPublishService;
 
-    //TODO: remove private request fields as they are in global scope
-
-    public ServicehandlerImpl(DataBroker databroker, PathComputationService pathComputationService,
-            RendererServiceOperations rendererServiceOperations, NotificationPublishService notificationPublishService,
-            PceListenerImpl pceListenerImpl, RendererListenerImpl rendererListenerImpl,
-            NetworkModelListenerImpl networkModelListenerImpl, ServiceDataStoreOperations serviceDataStoreOperations) {
-        this.db = databroker;
+    @Activate
+    public ServicehandlerImpl(@Reference PathComputationService pathComputationService,
+            @Reference RendererServiceOperations rendererServiceOperations,
+            @Reference NotificationPublishService notificationPublishService,
+            @Reference PceListener pceListenerImpl,
+            @Reference RendererListener rendererListenerImpl,
+            @Reference NetworkListener networkModelListenerImpl,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations) {
         this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.notificationPublishService =  notificationPublishService;
         this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
         this.rendererServiceWrapper = new RendererServiceWrapper(rendererServiceOperations, notificationPublishService);
         this.pceListenerImpl = pceListenerImpl;
         this.rendererListenerImpl = rendererListenerImpl;
         this.networkModelListenerImpl = networkModelListenerImpl;
-        this.notificationPublishService =  notificationPublishService;
+        LOG.info("ServicehandlerImpl Initiated");
     }
 
 
index 379296038f85ed463703a7ad40961b0acf4a347a..658b50e45daa24e8be8d2cec2694e740cb479edc 100644 (file)
@@ -9,14 +9,12 @@
 package org.opendaylight.transportpce.servicehandler.impl;
 
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
@@ -27,6 +25,10 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+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;
 
@@ -36,59 +38,48 @@ import org.slf4j.LoggerFactory;
  * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
  *
  */
+@Component
 public class ServicehandlerProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerProvider.class);
     private static final InstanceIdentifier<Services> SERVICE = InstanceIdentifier.builder(ServiceList.class)
             .child(Services.class).build();
 
-    private final DataBroker dataBroker;
-    private final RpcProviderService rpcService;
-    private final NotificationService notificationService;
     private ListenerRegistration<TransportpcePceListener> pcelistenerRegistration;
-    private ListenerRegistration<ServiceListener> serviceDataTreeChangeListenerRegistration;
+    private ListenerRegistration<DataTreeChangeListener<Services>> serviceDataTreeChangeListenerRegistration;
     private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
     private ListenerRegistration<TransportpceNetworkmodelListener> networkmodellistenerRegistration;
     private ObjectRegistration<OrgOpenroadmServiceService> rpcRegistration;
     private ServiceDataStoreOperations serviceDataStoreOperations;
-    private PceListenerImpl pceListenerImpl;
-    private ServiceListener serviceListener;
-    private RendererListenerImpl rendererListenerImpl;
-    private NetworkModelListenerImpl networkModelListenerImpl;
-    private ServicehandlerImpl servicehandler;
 
-    public ServicehandlerProvider(final DataBroker dataBroker, RpcProviderService rpcProviderService,
-            NotificationService notificationService, ServiceDataStoreOperations serviceDataStoreOperations,
-            PceListenerImpl pceListenerImpl, ServiceListener serviceListener, RendererListenerImpl rendererListenerImpl,
-            NetworkModelListenerImpl networkModelListenerImpl, ServicehandlerImpl servicehandler) {
-        this.dataBroker = dataBroker;
-        this.rpcService = rpcProviderService;
-        this.notificationService = notificationService;
+    @Activate
+    public ServicehandlerProvider(@Reference final DataBroker dataBroker,
+            @Reference RpcProviderService rpcProviderService,
+            @Reference NotificationService notificationService,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations,
+            @Reference TransportpcePceListener pceListenerImpl,
+            @Reference TransportpceRendererListener rendererListenerImpl,
+            @Reference TransportpceNetworkmodelListener networkModelListenerImpl,
+            @Reference NotificationPublishService notificationPublishService,
+            @Reference OrgOpenroadmServiceService servicehandler,
+            @Reference DataTreeChangeListener<Services> serviceListener) {
         this.serviceDataStoreOperations = serviceDataStoreOperations;
         this.serviceDataStoreOperations.initialize();
-        this.pceListenerImpl = pceListenerImpl;
-        this.serviceListener = serviceListener;
-        this.rendererListenerImpl = rendererListenerImpl;
-        this.networkModelListenerImpl = networkModelListenerImpl;
-        this.servicehandler = servicehandler;
-    }
-
-    /**
-     * Method called when the blueprint container is created.
-     */
-    public void init() {
-        LOG.info("ServicehandlerProvider Session Initiated");
         pcelistenerRegistration = notificationService.registerNotificationListener(pceListenerImpl);
-        serviceDataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, SERVICE), serviceListener);
         rendererlistenerRegistration = notificationService.registerNotificationListener(rendererListenerImpl);
         networkmodellistenerRegistration = notificationService.registerNotificationListener(networkModelListenerImpl);
-        rpcRegistration = rpcService.registerRpcImplementation(OrgOpenroadmServiceService.class, servicehandler);
+        serviceDataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
+            DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, SERVICE), serviceListener);
+        rpcRegistration = rpcProviderService
+            .registerRpcImplementation(OrgOpenroadmServiceService.class, servicehandler);
+        LOG.info("ServicehandlerProvider Session Initiated");
+        LOG.info("Transportpce controller started");
     }
 
     /**
      * Method called when the blueprint container is destroyed.
      */
+    @Deactivate
     public void close() {
         LOG.info("ServicehandlerProvider Closed");
         pcelistenerRegistration.close();
@@ -97,5 +88,4 @@ public class ServicehandlerProvider {
         networkmodellistenerRegistration.close();
         rpcRegistration.close();
     }
-
-}
+}
\ No newline at end of file
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkListener.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkListener.java
new file mode 100644 (file)
index 0000000..6a839a0
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * Copyright © 2023 Orange, 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.transportpce.servicehandler.listeners;
+
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+
+public interface NetworkListener {
+
+    void setserviceDataStoreOperations(ServiceDataStoreOperations serviceData);
+}
index c2e83a7607022127d71b3bf843f2edd38f2840fe..150cd98c72fba435847fa033b0f7cb5b3a051d29 100644 (file)
@@ -42,19 +42,22 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NetworkModelListenerImpl implements TransportpceNetworkmodelListener {
+@Component
+public class NetworkModelListenerImpl implements TransportpceNetworkmodelListener, NetworkListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetworkModelListenerImpl.class);
-    private final NotificationPublishService notificationPublishService; // to be used for T-API notification
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private TopologyUpdateResult topologyUpdateResult;
 
-    public NetworkModelListenerImpl(NotificationPublishService notificationPublishService,
-                                    ServiceDataStoreOperations serviceDataStoreOperations) {
-        this.notificationPublishService = notificationPublishService;
+    @Activate
+    public NetworkModelListenerImpl(@Reference NotificationPublishService notificationPublishService,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations) {
         this.serviceDataStoreOperations = serviceDataStoreOperations;
     }
 
@@ -105,7 +108,6 @@ public class NetworkModelListenerImpl implements TransportpceNetworkmodelListene
                 continue;
             }
             Services services = serviceOptional.get();
-            OperationResult operationResult1 = null;
             State newState;
             switch (services.getOperationalState()) {
                 case InService:
@@ -274,6 +276,7 @@ public class NetworkModelListenerImpl implements TransportpceNetworkmodelListene
                 && topologyUpdateResult.getTopologyChanges().equals(notification.getTopologyChanges());
     }
 
+    @Override
     public void setserviceDataStoreOperations(ServiceDataStoreOperations serviceData) {
         this.serviceDataStoreOperations = serviceData;
     }
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceListener.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceListener.java
new file mode 100644 (file)
index 0000000..07f8cce
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright © 2023 Orange, 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.transportpce.servicehandler.listeners;
+
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+
+public interface PceListener {
+
+    void setInput(ServiceInput serviceInput);
+
+    void setServiceReconfigure(Boolean serv);
+
+    void setserviceDataStoreOperations(ServiceDataStoreOperations serviceData);
+
+    void setTempService(Boolean tempService);
+
+    void setServiceFeasiblity(Boolean serviceFeasiblity);
+}
index 665b18f52415e035bbc876dd13f938489f94eaa7..2f6f970d4ce2cbd4b3bcefac320260f60c9d3fbe 100644 (file)
@@ -30,10 +30,14 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificat
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class PceListenerImpl implements TransportpcePceListener {
+@Component
+public class PceListenerImpl implements TransportpcePceListener, PceListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(PceListenerImpl.class);
     private static final String PUBLISHER = "PceListener";
@@ -48,11 +52,12 @@ public class PceListenerImpl implements TransportpcePceListener {
     private Boolean serviceFeasiblity;
     private NotificationPublishService notificationPublishService;
 
+    @Activate
     public PceListenerImpl(
-            RendererServiceOperations rendererServiceOperations,
-            PathComputationService pathComputationService,
-            NotificationPublishService notificationPublishService,
-            ServiceDataStoreOperations serviceDataStoreOperations) {
+            @Reference RendererServiceOperations rendererServiceOperations,
+            @Reference PathComputationService pathComputationService,
+            @Reference NotificationPublishService notificationPublishService,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations) {
         this.rendererServiceOperations = rendererServiceOperations;
         this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
         this.serviceDataStoreOperations = serviceDataStoreOperations;
@@ -295,22 +300,27 @@ public class PceListenerImpl implements TransportpcePceListener {
         return true;
     }
 
+    @Override
     public void setInput(ServiceInput serviceInput) {
         this.input = serviceInput;
     }
 
+    @Override
     public void setServiceReconfigure(Boolean serv) {
         this.serviceReconfigure = serv;
     }
 
+    @Override
     public void setserviceDataStoreOperations(ServiceDataStoreOperations serviceData) {
         this.serviceDataStoreOperations = serviceData;
     }
 
+    @Override
     public void setTempService(Boolean tempService) {
         this.tempService = tempService;
     }
 
+    @Override
     public void setServiceFeasiblity(Boolean serviceFeasiblity) {
         this.serviceFeasiblity = serviceFeasiblity;
     }
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListener.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListener.java
new file mode 100644 (file)
index 0000000..6021581
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright © 2023 Orange, 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.transportpce.servicehandler.listeners;
+
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+
+public interface RendererListener {
+
+    void setServiceInput(ServiceInput serviceInput);
+
+    void setserviceDataStoreOperations(ServiceDataStoreOperations serviceData);
+
+    void setTempService(Boolean tempService);
+}
index f983d37745e172a30a9e4d0a6f19ef2ee2ff9b17..87a75b622b7d54bf2e64059514ad5440db8f3c2f 100644 (file)
@@ -33,6 +33,9 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificat
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,7 +45,8 @@ import org.slf4j.LoggerFactory;
  * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
  *
  */
-public class RendererListenerImpl implements TransportpceRendererListener {
+@Component
+public class RendererListenerImpl implements TransportpceRendererListener, RendererListener {
 
     private static final String PUBLISHER = "RendererListener";
     private static final Logger LOG = LoggerFactory.getLogger(RendererListenerImpl.class);
@@ -55,8 +59,10 @@ public class RendererListenerImpl implements TransportpceRendererListener {
     private final NetworkModelService networkModelService;
 
 
-    public RendererListenerImpl(PathComputationService pathComputationService,
-            NotificationPublishService notificationPublishService, NetworkModelService networkModelService) {
+    @Activate
+    public RendererListenerImpl(@Reference PathComputationService pathComputationService,
+            @Reference NotificationPublishService notificationPublishService,
+            @Reference NetworkModelService networkModelService) {
         this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
         setServiceInput(null);
         setTempService(false);
@@ -274,14 +280,17 @@ public class RendererListenerImpl implements TransportpceRendererListener {
         return true;
     }
 
+    @Override
     public void setServiceInput(ServiceInput serviceInput) {
         this.input = serviceInput;
     }
 
+    @Override
     public void setserviceDataStoreOperations(ServiceDataStoreOperations serviceData) {
         this.serviceDataStoreOperations = serviceData;
     }
 
+    @Override
     public void setTempService(Boolean tempService) {
         this.tempService = tempService;
     }
index 7caf6b2e1331eb485fe1b0a48d97e90e8df1a2e8..63741688c3dd4a4d166bd3f32a1c37c0be80d26e 100644 (file)
@@ -22,9 +22,7 @@ import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.transportpce.common.ResponseCodes;
-import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Restorable;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
@@ -33,6 +31,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev2
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
@@ -48,22 +47,27 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
 import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component
 public class ServiceListener implements DataTreeChangeListener<Services> {
 
     private static final Logger LOG = LoggerFactory.getLogger(ServiceListener.class);
     private static final String PUBLISHER = "ServiceListener";
-    private ServicehandlerImpl servicehandlerImpl;
+    private OrgOpenroadmServiceService servicehandlerImpl;
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private NotificationPublishService notificationPublishService;
-    private PathComputationService pathComputationService;
     private Map<String, ServiceInput> mapServiceInputReroute;
     private final ScheduledExecutorService executor;
 
-    public ServiceListener(ServicehandlerImpl servicehandlerImpl, ServiceDataStoreOperations serviceDataStoreOperations,
-                           NotificationPublishService notificationPublishService) {
+    @Activate
+    public ServiceListener(@Reference OrgOpenroadmServiceService servicehandlerImpl,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations,
+            @Reference NotificationPublishService notificationPublishService) {
         this.servicehandlerImpl = servicehandlerImpl;
         this.notificationPublishService = notificationPublishService;
         this.serviceDataStoreOperations = serviceDataStoreOperations;
index 49b631d2afbbad6268b7f55e4eeb440b9a9528da..be0c5d7ee95d10fd6f1d791f3b995590308321a7 100644 (file)
@@ -41,9 +41,13 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component(immediate = true)
 public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperations {
     private static final Logger LOG = LoggerFactory.getLogger(ServiceDataStoreOperationsImpl.class);
     private static final String CREATE_MSG = "create";
@@ -73,7 +77,8 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     }
 
 
-    public ServiceDataStoreOperationsImpl(DataBroker dataBroker) {
+    @Activate
+    public ServiceDataStoreOperationsImpl(@Reference DataBroker dataBroker) {
         this.dataBroker = dataBroker;
     }
 
diff --git a/servicehandler/src/main/resources/OSGI-INF/blueprint/servicehandler-blueprint.xml b/servicehandler/src/main/resources/OSGI-INF/blueprint/servicehandler-blueprint.xml
deleted file mode 100644 (file)
index 1de4c6a..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
-Copyright © 2017 Orange 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
-
-Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <reference id="rpcService"
-          interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
-
-    <reference id="dataBroker"
-          interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-
-    <reference id="notificationService"
-          interface="org.opendaylight.mdsal.binding.api.NotificationService"/>
-
-    <reference id="notificationPublishService"
-          interface="org.opendaylight.mdsal.binding.api.NotificationPublishService"/>
-
-    <reference id="pathComputationService"
-          interface="org.opendaylight.transportpce.pce.service.PathComputationService"/>
-
-    <reference id="rendererServiceOperations"
-             interface="org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations" />
-    <reference id="networkModelService" interface="org.opendaylight.transportpce.networkmodel.service.NetworkModelService"/>
-
-    <bean id="serviceDatastoreOperation" class="org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl">
-        <argument ref="dataBroker"/>
-      </bean>
-
-    <bean id="pceListener" class="org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl">
-        <argument ref="rendererServiceOperations" />
-        <argument ref="pathComputationService" />
-        <argument ref="notificationPublishService" />
-        <argument ref="serviceDatastoreOperation" />
-    </bean>
-
-    <bean id="serviceListener" class="org.opendaylight.transportpce.servicehandler.listeners.ServiceListener">
-        <argument ref="serviceHandlerImpl" />
-        <argument ref="serviceDatastoreOperation" />
-        <argument ref="notificationPublishService" />
-    </bean>
-
-    <bean id="rendererListener" class="org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl">
-        <argument ref="pathComputationService" />
-        <argument ref="notificationPublishService" />
-        <argument ref="networkModelService" />
-    </bean>
-
-    <bean id="networkModelListener" class="org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl">
-        <argument ref="notificationPublishService" />
-        <argument ref="serviceDatastoreOperation" />
-    </bean>
-
-    <bean id="serviceHandlerImpl" class="org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl">
-        <argument ref="dataBroker"/>
-        <argument ref="pathComputationService" />
-        <argument ref="notificationPublishService" />
-        <argument ref="rendererServiceOperations" />
-        <argument ref="pceListener" />
-        <argument ref="rendererListener" />
-        <argument ref="networkModelListener" />
-        <argument ref="serviceDatastoreOperation" />
-    </bean>
-
-    <bean id="provider"
-          class="org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider"
-          init-method="init" destroy-method="close">
-        <argument ref="rpcService" />
-        <argument ref="dataBroker" />
-        <argument ref="notificationService" />
-        <argument ref="serviceDatastoreOperation" />
-        <argument ref="pceListener" />
-        <argument ref="serviceListener" />
-        <argument ref="rendererListener" />
-        <argument ref="networkModelListener" />
-        <argument ref="serviceHandlerImpl" />
-    </bean>
-
-    <service ref="serviceHandlerImpl"
-        interface="org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService"/>
-    <service ref="serviceDatastoreOperation"
-        interface="org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations"/>
-</blueprint>
index 1806f20e6de2a486c3b1930414e1a46a76550205..1476041af288313b83af56493927108eef2133b6 100644 (file)
@@ -32,9 +32,9 @@ import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
 import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
@@ -90,11 +90,11 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Mock
     private NotificationPublishService notificationPublishService;
     @Mock
-    private PceListenerImpl pceListenerImpl;
+    private PceListener pceListenerImpl;
     @Mock
-    private RendererListenerImpl rendererListenerImpl;
+    private RendererListener rendererListenerImpl;
     @Mock
-    private NetworkModelListenerImpl networkModelListenerImpl;
+    private NetworkListener networkModelListenerImpl;
 
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private ServiceCreateInput serviceCreateInput;
@@ -120,7 +120,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void createServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                     rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                     networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceCreateOutput>> result = servicehandlerImpl
@@ -141,7 +141,7 @@ public class ServicehandlerImplTest extends AbstractTest {
                         new ServicesBuilder()
                                 .setServiceName(serviceCreateInput.getServiceName())
                                 .build()));
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDSOperations);
         ListenableFuture<RpcResult<ServiceCreateOutput>> result = servicehandlerImpl.serviceCreate(serviceCreateInput);
@@ -157,7 +157,7 @@ public class ServicehandlerImplTest extends AbstractTest {
     void createServiceShouldBeSuccessfulWhenPerformPCESuccessful()
             throws ExecutionException, InterruptedException {
         when(pathComputationService.pathComputationRequest(any())).thenReturn(Futures.immediateFuture(any()));
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceCreateOutput>> result = servicehandlerImpl.serviceCreate(serviceCreateInput);
@@ -171,7 +171,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void deleteServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceDeleteOutput>> result = servicehandlerImpl.serviceDelete(
@@ -191,7 +191,7 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void deleteServiceShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         ServicehandlerImpl servicehandlerImpl =
-                new ServicehandlerImpl(getNewDataBroker(), pathComputationService, rendererServiceOperations,
+                new ServicehandlerImpl(pathComputationService, rendererServiceOperations,
                         notificationPublishService, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
                         serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceDeleteOutput>> result = servicehandlerImpl.serviceDelete(serviceDeleteInput);
@@ -206,7 +206,7 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void deleteServiceShouldBeSuccessForExistingService() throws ExecutionException, InterruptedException {
         when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         serviceDataStoreOperations.createService(serviceCreateInput);
@@ -222,7 +222,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void serviceFeasibilityCheckShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> result =
@@ -239,7 +239,7 @@ public class ServicehandlerImplTest extends AbstractTest {
     void serviceFeasibilityCheckShouldBeSuccessfulWhenPerformPCESuccessful()
             throws ExecutionException, InterruptedException {
         when(pathComputationService.pathComputationRequest(any())).thenReturn(Futures.immediateFuture(any()));
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> result =
@@ -254,7 +254,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void serviceReconfigureShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceReconfigureOutput>> result =
@@ -268,7 +268,7 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void serviceReconfigureShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         //action -> service reconfigure
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceReconfigureOutput>> result = servicehandlerImpl.serviceReconfigure(
@@ -284,7 +284,7 @@ public class ServicehandlerImplTest extends AbstractTest {
         // serviceReconfigure is calling service delete method in renderer
         when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
         //create service to reconfigure
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         serviceDataStoreOperations.createService(serviceCreateInput);
@@ -300,7 +300,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void serviceReRestorationShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceRestorationOutput>> result = servicehandlerImpl
@@ -314,7 +314,7 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void serviceRestorationShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         //action -> service restore
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceRestorationOutput>> result = servicehandlerImpl.serviceRestoration(
@@ -330,7 +330,7 @@ public class ServicehandlerImplTest extends AbstractTest {
         // serviceRestoration is calling service delete method in renderer
         when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
         //create service to restore
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         serviceDataStoreOperations.createService(serviceCreateInput);
@@ -346,7 +346,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void serviceRerouteShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceRerouteOutput>> result =
@@ -363,7 +363,7 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void serviceRerouteShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         //action -> service reconfigure
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<ServiceRerouteOutput>> result = servicehandlerImpl
@@ -437,8 +437,8 @@ public class ServicehandlerImplTest extends AbstractTest {
                         .build());
 
         serviceDataStoreOperations.createService(serviceCreateInput);
-        ListenableFuture<RpcResult<ServiceRerouteOutput>> result =  new ServicehandlerImpl(getNewDataBroker(),
-                pathComputationService, rendererServiceOperations, notificationPublishService, pceListenerImpl,
+        ListenableFuture<RpcResult<ServiceRerouteOutput>> result =  new ServicehandlerImpl(pathComputationService,
+            rendererServiceOperations, notificationPublishService, pceListenerImpl,
                 rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations)
                 .serviceReroute(serviceRerouteInput);
         result.addListener(() -> endSignal.countDown(), executorService);
@@ -452,7 +452,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void tempServiceDeleteShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<TempServiceDeleteOutput>> result =
@@ -472,7 +472,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void tempServiceDeleteShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<TempServiceDeleteOutput>> result = servicehandlerImpl.tempServiceDelete(
@@ -490,7 +490,7 @@ public class ServicehandlerImplTest extends AbstractTest {
         when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
 
         //create temp service to delete in the temp delete action
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         TempServiceCreateInput createInput = ServiceDataUtils.buildTempServiceCreateInput();
@@ -508,7 +508,7 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void tempServiceCreateShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
         ListenableFuture<RpcResult<TempServiceCreateOutput>> result =
@@ -526,7 +526,7 @@ public class ServicehandlerImplTest extends AbstractTest {
             throws ExecutionException, InterruptedException {
         when(pathComputationService.pathComputationRequest(any())).thenReturn(Futures.immediateFuture(any()));
 
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
                 rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
                 networkModelListenerImpl, serviceDataStoreOperations);
 
index b6da6dd72e5e91cd7036bd9573efe6852462cb7a..0092b0969a70f04cd1d59cac21cfe1b4f11bfef5 100644 (file)
@@ -15,42 +15,47 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
 
 @ExtendWith(MockitoExtension.class)
-public class ServicehandlerProviderTest  extends AbstractTest {
+public class ServicehandlerProviderTest extends AbstractTest {
 
+    @Mock
+    DataBroker dataBroker;
     @Mock
     RpcProviderService rpcProviderRegistry;
     @Mock
     ServiceDataStoreOperations serviceDataStoreOperations;
     @Mock
-    PceListenerImpl pceListenerImpl;
+    TransportpcePceListener pceListenerImpl;
     @Mock
-    ServiceListener serviceListener;
+    TransportpceRendererListener rendererListenerImpl;
     @Mock
-    RendererListenerImpl rendererListenerImpl;
+    TransportpceNetworkmodelListener networkModelListenerImpl;
     @Mock
-    NetworkModelListenerImpl networkModelListenerImpl;
+    NotificationPublishService notificationPublishService;
     @Mock
-    ServicehandlerImpl servicehandler;
-
+    OrgOpenroadmServiceService servicehandler;
+    @Mock
+    DataTreeChangeListener<Services> serviceListener;
 
     @Test
     void testInitRegisterServiceHandlerToRpcRegistry() {
-        ServicehandlerProvider provider =  new ServicehandlerProvider(
-                getDataBroker(), rpcProviderRegistry,
-                getNotificationService() , serviceDataStoreOperations, pceListenerImpl, serviceListener,
-                rendererListenerImpl, networkModelListenerImpl, servicehandler);
-
-        provider.init();
+        new ServicehandlerProvider(dataBroker, rpcProviderRegistry, getNotificationService() ,
+                serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
+                notificationPublishService, servicehandler, serviceListener);
 
-        verify(rpcProviderRegistry, times(1)).registerRpcImplementation(any(), any(ServicehandlerImpl.class));
+        verify(rpcProviderRegistry, times(1)).registerRpcImplementation(any(), any(OrgOpenroadmServiceService.class));
+        verify(dataBroker, times(1)).registerDataTreeChangeListener(any(), any());
     }
 }
\ No newline at end of file
index f9757546aae793356b7668c0ac956ee9ed4e744e..b5eb3a7d75cdee6613bb77e9504f0468917e92ab 100644 (file)
@@ -21,11 +21,11 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-tapi</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -40,7 +40,7 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.3</version>
+        <version>5.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
@@ -162,6 +162,10 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
       <groupId>org.opendaylight.netconf</groupId>
       <artifactId>sal-netconf-connector</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component.annotations</artifactId>
+    </dependency>
 
     <!-- Sodium bump: javax.annotation.Nullable and friends -->
     <dependency>
index 2af8870423aee48c3f82df5eeae8115ceb0b344a..3af6fec15a1c878adc4a3003358cfc5a3fbec211 100644 (file)
@@ -51,7 +51,7 @@ public class R2RTapiLinkDiscovery {
     private final TapiLink tapiLink;
 
     public R2RTapiLinkDiscovery(NetworkTransactionService networkTransactionService,
-                                DeviceTransactionManager deviceTransactionManager, TapiLink tapiLink) {
+            DeviceTransactionManager deviceTransactionManager, TapiLink tapiLink) {
         this.networkTransactionService = networkTransactionService;
         this.deviceTransactionManager = deviceTransactionManager;
         this.tapiLink = tapiLink;
index 6fcd6457878c12807dd7ef4f3d8b83e295a6c190..dc03a1f3e0c0c2933003a51d5bff7381036b5dea 100644 (file)
@@ -7,10 +7,12 @@
  */
 package org.opendaylight.transportpce.tapi.impl;
 
+import java.util.ArrayList;
 import java.util.HashMap;
-import org.eclipse.jdt.annotation.NonNull;
+import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -20,11 +22,11 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
 import org.opendaylight.transportpce.tapi.connectivity.TapiConnectivityImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
+import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
 import org.opendaylight.transportpce.tapi.topology.TapiTopologyImpl;
@@ -32,6 +34,7 @@ import org.opendaylight.transportpce.tapi.topology.TopologyUtils;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
 import org.opendaylight.transportpce.tapi.utils.TapiInitialORMapping;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiListener;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
@@ -47,12 +50,18 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TapiCommonService;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.TapiTopologyService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.ServiceInterfacePoints;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+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;
 
@@ -62,6 +71,7 @@ import org.slf4j.LoggerFactory;
  * @author Gilles Thouenon (gilles.thouenon@orange.com) on behalf of Orange
  *
  */
+@Component
 public class TapiProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiProvider.class);
@@ -75,63 +85,44 @@ public class TapiProvider {
         .child(Link.class);
     private final DataBroker dataBroker;
     private final RpcProviderService rpcProviderService;
+    private final NotificationService notificationService;
+    private final NetworkTransactionService networkTransactionService;
+    private final OrgOpenroadmServiceService serviceHandler;
+    private final ServiceDataStoreOperations serviceDataStoreOperations;
+    private final TransportpceTapinetworkutilsService tapiNetworkUtils;
+    private TapiNotificationListener tapiNetworkModelListenerImpl;
     private ObjectRegistration<TapiConnectivityService> rpcRegistration;
     private ObjectRegistration<TransportpceTapinetworkutilsService> tapiNetworkutilsServiceRpcRegistration;
-    private ListenerRegistration<TapiNetconfTopologyListener> dataTreeChangeListenerRegistration;
-    private ListenerRegistration<TapiOrLinkListener> dataTreeChangeListenerRegistration1;
-    private ListenerRegistration<TapiPortMappingListener> mappingListenerListenerRegistration;
+    private List<Registration> listeners;
     private ListenerRegistration<TransportpcePceListener> pcelistenerRegistration;
     private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
     private ListenerRegistration<TransportpceServicehandlerListener> servicehandlerlistenerRegistration;
-    private ListenerRegistration<TapiNetworkModelListenerImpl> tapinetworkmodellistenerRegistration;
-    private final OrgOpenroadmServiceService serviceHandler;
-    private final ServiceDataStoreOperations serviceDataStoreOperations;
-    private final TapiListener tapiListener;
-    private final TapiNetconfTopologyListener topologyListener;
-    private final TapiOrLinkListener orLinkListener;
-    private TapiPortMappingListener tapiPortMappingListener;
-    private final NetworkTransactionService networkTransactionService;
-    private final TransportpceTapinetworkutilsService tapiNetworkUtils;
-    private TapiPceListenerImpl pceListenerImpl;
-    private TapiRendererListenerImpl rendererListenerImpl;
-    private TapiServiceHandlerListenerImpl serviceHandlerListenerImpl;
-    private final NotificationService notificationService;
-    private TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl;
+    private ListenerRegistration<TapiNotificationListener> tapinetworkmodellistenerRegistration;
 
-    public TapiProvider(DataBroker dataBroker, RpcProviderService rpcProviderService,
-            OrgOpenroadmServiceService serviceHandler,ServiceDataStoreOperations serviceDataStoreOperations,
-            TapiListener tapiListener, NetworkTransactionService networkTransactionService,
-            TapiNetconfTopologyListener topologyListener, TapiPortMappingListener tapiPortMappingListener,
-            TransportpceTapinetworkutilsService tapiNetworkUtils, TapiPceListenerImpl pceListenerImpl,
-            TapiRendererListenerImpl rendererListenerImpl, TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
-            NotificationService notificationService, TapiOrLinkListener orLinkListener,
-            TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
+    @Activate
+    public TapiProvider(@Reference DataBroker dataBroker,
+            @Reference RpcProviderService rpcProviderService,
+            @Reference NotificationService notificationService,
+            @Reference NotificationPublishService notificationPublishService,
+            @Reference NetworkTransactionService networkTransactionService,
+            @Reference OrgOpenroadmServiceService serviceHandler,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations,
+            @Reference TransportpceTapinetworkutilsService tapiNetworkUtils,
+            @Reference TapiNotificationListener tapiNetworkModelListenerImpl,
+            @Reference TapiNetworkModelService tapiNetworkModelServiceImpl) {
         this.dataBroker = dataBroker;
         this.rpcProviderService = rpcProviderService;
+        this.notificationService = notificationService;
+        this.networkTransactionService = networkTransactionService;
         this.serviceHandler = serviceHandler;
         this.serviceDataStoreOperations = serviceDataStoreOperations;
-        this.tapiListener = tapiListener;
-        this.networkTransactionService = networkTransactionService;
-        this.topologyListener = topologyListener;
-        this.tapiPortMappingListener = tapiPortMappingListener;
         this.tapiNetworkUtils = tapiNetworkUtils;
-        this.pceListenerImpl = pceListenerImpl;
-        this.rendererListenerImpl = rendererListenerImpl;
-        this.serviceHandlerListenerImpl = serviceHandlerListenerImpl;
-        this.notificationService = notificationService;
-        this.orLinkListener = orLinkListener;
         this.tapiNetworkModelListenerImpl = tapiNetworkModelListenerImpl;
-        //this.notificationPublishService = notificationPublishService;
-    }
 
-    /**
-     * Method called when the blueprint container is created.
-     */
-    public void init() {
         LOG.info("TapiProvider Session Initiated");
         TapiContext tapiContext = new TapiContext(this.networkTransactionService);
         LOG.info("Empty TAPI context created: {}", tapiContext.getTapiContext());
-        TapiLink tapiLink = new TapiLink(this.networkTransactionService);
+        TapiLink tapiLink = new TapiLinkImpl(this.networkTransactionService);
         TopologyUtils topologyUtils = new TopologyUtils(this.networkTransactionService, this.dataBroker, tapiLink);
         ConnectivityUtils connectivityUtils = new ConnectivityUtils(this.serviceDataStoreOperations, new HashMap<>(),
                 tapiContext, this.networkTransactionService);
@@ -139,6 +130,9 @@ public class TapiProvider {
                 tapiContext, this.serviceDataStoreOperations);
         tapiInitialORMapping.performTopoInitialMapping();
         tapiInitialORMapping.performServInitialMapping();
+        TapiPceListenerImpl pceListenerImpl = new TapiPceListenerImpl(dataBroker);
+        TapiRendererListenerImpl rendererListenerImpl = new TapiRendererListenerImpl(dataBroker,
+                notificationPublishService);
 
         TapiConnectivityImpl tapi = new TapiConnectivityImpl(this.serviceHandler, tapiContext, connectivityUtils,
                 pceListenerImpl, rendererListenerImpl);
@@ -147,45 +141,45 @@ public class TapiProvider {
         rpcRegistration = rpcProviderService.registerRpcImplementation(TapiConnectivityService.class, tapi);
         rpcProviderService.registerRpcImplementation(TapiTopologyService.class, topo);
         rpcProviderService.registerRpcImplementation(TapiCommonService.class, topo);
-        dataTreeChangeListenerRegistration1 =
-            dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                LINK_II), orLinkListener);
-        dataTreeChangeListenerRegistration =
-            dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), topologyListener);
-        mappingListenerListenerRegistration =
-            dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                MAPPING_II), tapiPortMappingListener);
+
+        this.listeners = new ArrayList<>();
+        TapiNetconfTopologyListener topologyListener = new TapiNetconfTopologyListener(tapiNetworkModelServiceImpl);
+        TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransactionService);
+        TapiPortMappingListener tapiPortMappingListener = new TapiPortMappingListener(tapiNetworkModelServiceImpl);
+        listeners.add(dataBroker.registerDataTreeChangeListener(
+                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, LINK_II), orLinkListener));
+        listeners.add(dataBroker.registerDataTreeChangeListener(
+                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, InstanceIdentifiers.NETCONF_TOPOLOGY_II
+                    .child(Node.class)),
+                topologyListener));
+        listeners.add(dataBroker.registerDataTreeChangeListener(
+                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, MAPPING_II), tapiPortMappingListener));
         tapiNetworkutilsServiceRpcRegistration =
                 rpcProviderService.registerRpcImplementation(TransportpceTapinetworkutilsService.class,
                         this.tapiNetworkUtils);
-        @NonNull
-        InstanceIdentifier<ServiceInterfacePoints> sipIID = InstanceIdentifier.create(ServiceInterfacePoints.class);
-        dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(
-            LogicalDatastoreType.CONFIGURATION, sipIID), tapiListener);
+        TapiListener tapiListener = new TapiListener();
+        listeners.add(dataBroker.registerDataTreeChangeListener(
+                DataTreeIdentifier.create(
+                        LogicalDatastoreType.CONFIGURATION,
+                        InstanceIdentifier.create(ServiceInterfacePoints.class)),
+                tapiListener));
         // Notification Listener
         pcelistenerRegistration = notificationService.registerNotificationListener(pceListenerImpl);
         rendererlistenerRegistration = notificationService.registerNotificationListener(rendererListenerImpl);
-        servicehandlerlistenerRegistration =
-                notificationService.registerNotificationListener(serviceHandlerListenerImpl);
-        tapinetworkmodellistenerRegistration =
-                notificationService.registerNotificationListener(tapiNetworkModelListenerImpl);
+        TapiServiceHandlerListenerImpl serviceHandlerListenerImpl = new TapiServiceHandlerListenerImpl(dataBroker);
+        servicehandlerlistenerRegistration = notificationService
+            .registerNotificationListener(serviceHandlerListenerImpl);
+        tapinetworkmodellistenerRegistration = notificationService
+            .registerNotificationListener(tapiNetworkModelListenerImpl);
     }
 
     /**
      * Method called when the blueprint container is destroyed.
      */
+    @Deactivate
     public void close() {
-        LOG.info("TapiProvider Session Closed");
-        if (dataTreeChangeListenerRegistration != null) {
-            dataTreeChangeListenerRegistration.close();
-        }
-        if (mappingListenerListenerRegistration != null) {
-            mappingListenerListenerRegistration.close();
-        }
-        if (dataTreeChangeListenerRegistration1 != null) {
-            dataTreeChangeListenerRegistration1.close();
-        }
+        listeners.forEach(lis -> lis.close());
+        listeners.clear();
         if (tapiNetworkutilsServiceRpcRegistration != null) {
             tapiNetworkutilsServiceRpcRegistration.close();
         }
@@ -194,5 +188,6 @@ public class TapiProvider {
         servicehandlerlistenerRegistration.close();
         rpcRegistration.close();
         tapinetworkmodellistenerRegistration.close();
+        LOG.info("TapiProvider Session Closed");
     }
 }
index 9464a5ed7dcb0f9250d5c6d5dde005d95d2756cb..5a452d90a4c628b62e74aac8303c034c5448eeca 100644 (file)
@@ -68,25 +68,31 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.to
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
 import org.opendaylight.yangtools.yang.binding.EnumTypeObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component
 public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkModelListenerImpl.class);
     private final NetworkTransactionService networkTransactionService;
+    private final NotificationPublishService notificationPublishService;
     private final List<ConnectivityService> connectivityServiceChanges = new ArrayList<>();
     private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
             .getBytes(StandardCharsets.UTF_8)).toString());
     private final List<LayerProtocolName> orderedServiceLayerList;
-    private final NotificationPublishService notificationPublishService;
 
-    public TapiNetworkModelListenerImpl(NetworkTransactionService networkTransactionService,
-                                        NotificationPublishService notificationPublishService) {
+    @Activate
+    public TapiNetworkModelListenerImpl(@Reference NetworkTransactionService networkTransactionService,
+            @Reference NotificationPublishService notificationPublishService) {
         this.networkTransactionService = networkTransactionService;
+        this.notificationPublishService = notificationPublishService;
         this.orderedServiceLayerList = List.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU,
             LayerProtocolName.DSR, LayerProtocolName.ETH);
-        this.notificationPublishService = notificationPublishService;
+        LOG.debug("TapiNetworkModelListenerImpl instantiated");
     }
 
     @Override
index 7d9e5d217addf256feb6a490e8d66d9f3c03530f..058962808aafa1ac4f536c28d8f55a5ba8c68fce 100644 (file)
@@ -24,6 +24,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
@@ -137,26 +138,32 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component
 public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkModelServiceImpl.class);
+
     private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
             .getBytes(StandardCharsets.UTF_8)).toString());
     private final NetworkTransactionService networkTransactionService;
-    private Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap;
     private final R2RTapiLinkDiscovery linkDiscovery;
     private final TapiLink tapiLink;
     private final NotificationPublishService notificationPublishService;
+    private Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap = new HashMap<>();
 
-    public TapiNetworkModelServiceImpl(final R2RTapiLinkDiscovery linkDiscovery,
-                                       NetworkTransactionService networkTransactionService, TapiLink tapiLink,
-                                       final NotificationPublishService notificationPublishService) {
+    @Activate
+    public TapiNetworkModelServiceImpl(@Reference NetworkTransactionService networkTransactionService,
+            @Reference DeviceTransactionManager deviceTransactionManager,
+            @Reference TapiLink tapiLink,
+            @Reference final NotificationPublishService notificationPublishService) {
         this.networkTransactionService = networkTransactionService;
-        this.sipMap = new HashMap<>();
-        this.linkDiscovery = linkDiscovery;
+        this.linkDiscovery = new R2RTapiLinkDiscovery(networkTransactionService, deviceTransactionManager, tapiLink);
         this.tapiLink = tapiLink;
         this.notificationPublishService = notificationPublishService;
     }
index 8f56d0215443f59f50b059308fe859f1d755638a..5190aac02a5a0f16a7fcb0db3093a7f43f12ca1f 100644 (file)
@@ -41,9 +41,13 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Component
 public class TapiNetworkUtilsImpl implements TransportpceTapinetworkutilsService {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkUtilsImpl.class);
@@ -52,7 +56,9 @@ public class TapiNetworkUtilsImpl implements TransportpceTapinetworkutilsService
     private final NetworkTransactionService networkTransactionService;
     private final TapiLink tapiLink;
 
-    public TapiNetworkUtilsImpl(NetworkTransactionService networkTransactionService, TapiLink tapiLink) {
+    @Activate
+    public TapiNetworkUtilsImpl(@Reference NetworkTransactionService networkTransactionService,
+            @Reference TapiLink tapiLink) {
         this.networkTransactionService = networkTransactionService;
         this.tapiLink = tapiLink;
     }
index 4d11a2c97c604fff3ebda2d33f091a4f516f5041..4fbacab6245addcec3cd774ef17f91684ad27815 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2021 Nokia.  All rights reserved.
+ * Copyright © 2023 Orange, 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,
  */
 package org.opendaylight.transportpce.tapi.utils;
 
-import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ExecutionException;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.AvailableCapacityBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.TotalPotentialCapacityBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ProtectionType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RestorationPolicy;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.ResilienceTypeBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristic;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristicBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristic;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristic;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanism;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanismBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.Uint64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class TapiLink {
+public interface TapiLink {
 
-    private static final Logger LOG = LoggerFactory.getLogger(TapiLink.class);
-    private final NetworkTransactionService networkTransactionService;
+    Link createTapiLink(String srcNodeid, String srcTpId, String dstNodeId, String dstTpId, String linkType,
+            String srcNodeQual, String dstNodeQual, String srcTpQual, String dstTpQual,
+            String adminState, String operState, Set<LayerProtocolName> layerProtoNameList,
+            Set<String> transLayerNameList, Uuid tapiTopoUuid);
 
-    public TapiLink(NetworkTransactionService networkTransactionService) {
-        this.networkTransactionService = networkTransactionService;
-    }
+    AdministrativeState setTapiAdminState(String adminState);
 
-    public Link createTapiLink(String srcNodeid, String srcTpId, String dstNodeId, String dstTpId, String linkType,
-                               String srcNodeQual, String dstNodeQual, String srcTpQual, String dstTpQual,
-                               String adminState, String operState, Set<LayerProtocolName> layerProtoNameList,
-                               Set<String> transLayerNameList, Uuid tapiTopoUuid) {
-        Map<NodeEdgePointKey, NodeEdgePoint> nepList = new HashMap<>();
-        String sourceNodeKey = String.join("+", srcNodeid, srcNodeQual);
-        String sourceNepKey = String.join("+", srcNodeid, srcTpQual, srcTpId);
-        Uuid sourceUuidNode = new Uuid(UUID.nameUUIDFromBytes(sourceNodeKey.getBytes(Charset.forName("UTF-8")))
-            .toString());
-        Uuid sourceUuidTp = new Uuid(UUID.nameUUIDFromBytes(sourceNepKey.getBytes(Charset.forName("UTF-8")))
-            .toString());
-        String destNodeKey = String.join("+", dstNodeId, dstNodeQual);
-        String destNepKey = String.join("+", dstNodeId, dstTpQual, dstTpId);
-        String linkKey = String.join("to", sourceNepKey, destNepKey);
-        Uuid destUuidNode = new Uuid(UUID.nameUUIDFromBytes(destNodeKey.getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid destUuidTp = new Uuid(UUID.nameUUIDFromBytes(destNepKey.getBytes(Charset.forName("UTF-8"))).toString());
-        NodeEdgePoint sourceNep = new NodeEdgePointBuilder()
-            .setTopologyUuid(tapiTopoUuid)
-            .setNodeUuid(sourceUuidNode)
-            .setNodeEdgePointUuid(sourceUuidTp)
-            .build();
-        nepList.put(sourceNep.key(), sourceNep);
-        NodeEdgePoint destNep = new NodeEdgePointBuilder()
-            .setTopologyUuid(tapiTopoUuid)
-            .setNodeUuid(destUuidNode)
-            .setNodeEdgePointUuid(destUuidTp)
-            .build();
-        nepList.put(destNep.key(), destNep);
-        NameBuilder linkName = new NameBuilder();
-        // TODO: variables for each type
-        switch (linkType) {
-            case TapiStringConstants.OMS_RDM_RDM_LINK:
-                LOG.info("Roadm to roadm link");
-                linkName
-                    .setValueName("OMS link name")
-                    .setValue(linkKey);
-                break;
-            case TapiStringConstants.TRANSITIONAL_LINK:
-                LOG.info("Transitional link");
-                linkName
-                    .setValueName("transitional link name")
-                    .setValue(linkKey);
-                break;
-            case TapiStringConstants.OMS_XPDR_RDM_LINK:
-                LOG.info("Xpdr to roadm link");
-                linkName
-                    .setValueName("XPDR-RDM link name")
-                    .setValue(linkKey);
-                break;
-            case TapiStringConstants.OTN_XPDR_XPDR_LINK:
-                LOG.info("OTN Xpdr to roadm link");
-                linkName
-                    .setValueName("otn link name")
-                    .setValue(linkKey);
-                break;
-            default:
-                LOG.warn("Type {} not recognized", linkType);
-                return null;
-        }
-        // Todo: common aspects of links and set all attributes
-        CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
-            .setCostAlgorithm("Restricted Shortest Path - RSP")
-            .setCostName("HOP_COUNT")
-            .setCostValue(TapiStringConstants.COST_HOP_VALUE)
-            .build();
-        LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
-            .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-            .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
-            .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
-            .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
-            .setTrafficPropertyName("FIXED_LATENCY")
-            .build();
-        RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
-            .setRiskCharacteristicName("risk characteristic")
-            .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
-            .build();
-        ValidationMechanism validationMechanism = new ValidationMechanismBuilder()
-            .setValidationMechanism("validation mechanism")
-            .setValidationRobustness("validation robustness")
-            .setLayerProtocolAdjacencyValidated("layer protocol adjacency")
-            .build();
-        return new LinkBuilder()
-            .setUuid(new Uuid(
-                UUID.nameUUIDFromBytes(linkKey.getBytes(Charset.forName("UTF-8"))).toString()))
-            .setName(Map.of(linkName.build().key(), linkName.build()))
-            .setTransitionedLayerProtocolName(transLayerNameList)
-            .setLayerProtocolName(layerProtoNameList)
-            .setNodeEdgePoint(nepList)
-            .setDirection(ForwardingDirection.BIDIRECTIONAL)
-            .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize(
-                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
-                .build())
-            .setResilienceType(new ResilienceTypeBuilder().setProtectionType(ProtectionType.NOPROTECTON)
-                .setRestorationPolicy(RestorationPolicy.NA)
-                .build())
-            .setAdministrativeState(setTapiAdminState(adminState))
-            .setOperationalState(setTapiOperationalState(operState))
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().setTotalSize(
-                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
-                .build())
-            .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
-            .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
-            .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
-            .setErrorCharacteristic("error")
-            .setLossCharacteristic("loss")
-            .setRepeatDeliveryCharacteristic("repeat delivery")
-            .setDeliveryOrderCharacteristic("delivery order")
-            .setUnavailableTimeCharacteristic("unavailable time")
-            .setServerIntegrityProcessCharacteristic("server integrity process")
-            .setValidationMechanism(Map.of(validationMechanism.key(), validationMechanism))
-            .build();
-    }
+    AdministrativeState setTapiAdminState(AdminStates adminState1, AdminStates adminState2);
 
-    public AdministrativeState setTapiAdminState(String adminState) {
-        if (adminState == null) {
-            return null;
-        }
-        return adminState.equals(AdminStates.InService.getName())
-            || adminState.equals(AdministrativeState.UNLOCKED.getName()) ? AdministrativeState.UNLOCKED
-                : AdministrativeState.LOCKED;
-    }
+    OperationalState setTapiOperationalState(String operState);
 
-    public AdministrativeState setTapiAdminState(AdminStates adminState1, AdminStates adminState2) {
-        if (adminState1 == null || adminState2 == null) {
-            return null;
-        }
-        LOG.info("Admin state 1 = {}, andmin state 2 = {}", adminState1.getName(), adminState2.getName());
-        return AdminStates.InService.equals(adminState1) && AdminStates.InService.equals(adminState2)
-            ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
-    }
+    OperationalState setTapiOperationalState(State operState1, State operState2);
 
-    public OperationalState setTapiOperationalState(String operState) {
-        if (operState == null) {
-            return null;
-        }
-        return operState.equals("inService") || operState.equals(OperationalState.ENABLED.getName())
-            ? OperationalState.ENABLED : OperationalState.DISABLED;
-    }
+    String getOperState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId);
 
-    public OperationalState setTapiOperationalState(State operState1, State operState2) {
-        if (operState1 == null || operState2 == null) {
-            return null;
-        }
-        return State.InService.equals(operState1) && State.InService.equals(operState2)
-            ? OperationalState.ENABLED : OperationalState.DISABLED;
-    }
-
-    public String getOperState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) {
-        Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
-            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
-            TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
-        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(Context1.class).child(TopologyContext.class)
-            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid))
-            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
-            .build();
-        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
-            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
-            TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
-        InstanceIdentifier<OwnedNodeEdgePoint> onep1IID = InstanceIdentifier.builder(Context.class)
-            .augmentation(Context1.class).child(TopologyContext.class)
-            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid))
-            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nep1Uuid))
-            .build();
-        try {
-            Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
-                LogicalDatastoreType.OPERATIONAL, onepIID).get();
-            Optional<OwnedNodeEdgePoint> optionalOnep1 = this.networkTransactionService.read(
-                LogicalDatastoreType.OPERATIONAL, onep1IID).get();
-            if (!optionalOnep.isPresent() || !optionalOnep1.isPresent()) {
-                LOG.error("One of the 2 neps doesnt exist in the datastore: {} OR {}", nepUuid, nep1Uuid);
-                return null;
-            }
-            return optionalOnep.get().getOperationalState().equals(optionalOnep1.get().getOperationalState())
-                ? optionalOnep.get().getOperationalState().getName() : OperationalState.DISABLED.getName();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Failed getting Mapping data from portMapping",e);
-            return null;
-        }
-    }
-
-    public String getAdminState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) {
-        Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
-            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
-            TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
-        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(Context1.class).child(TopologyContext.class)
-            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid))
-            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
-            .build();
-        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
-            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
-            TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
-        InstanceIdentifier<OwnedNodeEdgePoint> onep1IID = InstanceIdentifier.builder(Context.class)
-            .augmentation(Context1.class).child(TopologyContext.class)
-            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid))
-            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nep1Uuid))
-            .build();
-        try {
-            Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
-                LogicalDatastoreType.OPERATIONAL, onepIID).get();
-            Optional<OwnedNodeEdgePoint> optionalOnep1 = this.networkTransactionService.read(
-                LogicalDatastoreType.OPERATIONAL, onep1IID).get();
-            if (!optionalOnep.isPresent() || !optionalOnep1.isPresent()) {
-                LOG.error("One of the 2 neps doesnt exist in the datastore: {} OR {}", nepUuid, nep1Uuid);
-                return null;
-            }
-            return optionalOnep.get().getAdministrativeState().equals(optionalOnep1.get().getAdministrativeState())
-                ? optionalOnep.get().getAdministrativeState().getName() : AdministrativeState.UNLOCKED.getName();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Failed getting Mapping data from portMapping",e);
-            return null;
-        }
-    }
+    String getAdminState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId);
 }
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java
new file mode 100644 (file)
index 0000000..d33c9bd
--- /dev/null
@@ -0,0 +1,300 @@
+/*
+ * Copyright © 2021 Nokia.  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.transportpce.tapi.utils;
+
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.AvailableCapacityBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.TotalPotentialCapacityBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ProtectionType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RestorationPolicy;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.ResilienceTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristic;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristicBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristic;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristicBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristic;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristicBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanism;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanismBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component
+public class TapiLinkImpl implements TapiLink {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TapiLinkImpl.class);
+    private final NetworkTransactionService networkTransactionService;
+
+    @Activate
+    public TapiLinkImpl(@Reference NetworkTransactionService networkTransactionService) {
+        this.networkTransactionService = networkTransactionService;
+    }
+
+    public Link createTapiLink(String srcNodeid, String srcTpId, String dstNodeId, String dstTpId, String linkType,
+                               String srcNodeQual, String dstNodeQual, String srcTpQual, String dstTpQual,
+                               String adminState, String operState, Set<LayerProtocolName> layerProtoNameList,
+                               Set<String> transLayerNameList, Uuid tapiTopoUuid) {
+        Map<NodeEdgePointKey, NodeEdgePoint> nepList = new HashMap<>();
+        String sourceNodeKey = String.join("+", srcNodeid, srcNodeQual);
+        String sourceNepKey = String.join("+", srcNodeid, srcTpQual, srcTpId);
+        Uuid sourceUuidNode = new Uuid(UUID.nameUUIDFromBytes(sourceNodeKey.getBytes(Charset.forName("UTF-8")))
+            .toString());
+        Uuid sourceUuidTp = new Uuid(UUID.nameUUIDFromBytes(sourceNepKey.getBytes(Charset.forName("UTF-8")))
+            .toString());
+        String destNodeKey = String.join("+", dstNodeId, dstNodeQual);
+        String destNepKey = String.join("+", dstNodeId, dstTpQual, dstTpId);
+        String linkKey = String.join("to", sourceNepKey, destNepKey);
+        Uuid destUuidNode = new Uuid(UUID.nameUUIDFromBytes(destNodeKey.getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid destUuidTp = new Uuid(UUID.nameUUIDFromBytes(destNepKey.getBytes(Charset.forName("UTF-8"))).toString());
+        NodeEdgePoint sourceNep = new NodeEdgePointBuilder()
+            .setTopologyUuid(tapiTopoUuid)
+            .setNodeUuid(sourceUuidNode)
+            .setNodeEdgePointUuid(sourceUuidTp)
+            .build();
+        nepList.put(sourceNep.key(), sourceNep);
+        NodeEdgePoint destNep = new NodeEdgePointBuilder()
+            .setTopologyUuid(tapiTopoUuid)
+            .setNodeUuid(destUuidNode)
+            .setNodeEdgePointUuid(destUuidTp)
+            .build();
+        nepList.put(destNep.key(), destNep);
+        NameBuilder linkName = new NameBuilder();
+        // TODO: variables for each type
+        switch (linkType) {
+            case TapiStringConstants.OMS_RDM_RDM_LINK:
+                LOG.info("Roadm to roadm link");
+                linkName
+                    .setValueName("OMS link name")
+                    .setValue(linkKey);
+                break;
+            case TapiStringConstants.TRANSITIONAL_LINK:
+                LOG.info("Transitional link");
+                linkName
+                    .setValueName("transitional link name")
+                    .setValue(linkKey);
+                break;
+            case TapiStringConstants.OMS_XPDR_RDM_LINK:
+                LOG.info("Xpdr to roadm link");
+                linkName
+                    .setValueName("XPDR-RDM link name")
+                    .setValue(linkKey);
+                break;
+            case TapiStringConstants.OTN_XPDR_XPDR_LINK:
+                LOG.info("OTN Xpdr to roadm link");
+                linkName
+                    .setValueName("otn link name")
+                    .setValue(linkKey);
+                break;
+            default:
+                LOG.warn("Type {} not recognized", linkType);
+                return null;
+        }
+        // Todo: common aspects of links and set all attributes
+        CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
+            .setCostAlgorithm("Restricted Shortest Path - RSP")
+            .setCostName("HOP_COUNT")
+            .setCostValue(TapiStringConstants.COST_HOP_VALUE)
+            .build();
+        LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
+            .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
+            .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
+            .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
+            .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
+            .setTrafficPropertyName("FIXED_LATENCY")
+            .build();
+        RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
+            .setRiskCharacteristicName("risk characteristic")
+            .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
+            .build();
+        ValidationMechanism validationMechanism = new ValidationMechanismBuilder()
+            .setValidationMechanism("validation mechanism")
+            .setValidationRobustness("validation robustness")
+            .setLayerProtocolAdjacencyValidated("layer protocol adjacency")
+            .build();
+        return new LinkBuilder()
+            .setUuid(new Uuid(
+                UUID.nameUUIDFromBytes(linkKey.getBytes(Charset.forName("UTF-8"))).toString()))
+            .setName(Map.of(linkName.build().key(), linkName.build()))
+            .setTransitionedLayerProtocolName(transLayerNameList)
+            .setLayerProtocolName(layerProtoNameList)
+            .setNodeEdgePoint(nepList)
+            .setDirection(ForwardingDirection.BIDIRECTIONAL)
+            .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize(
+                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
+                .build())
+            .setResilienceType(new ResilienceTypeBuilder().setProtectionType(ProtectionType.NOPROTECTON)
+                .setRestorationPolicy(RestorationPolicy.NA)
+                .build())
+            .setAdministrativeState(setTapiAdminState(adminState))
+            .setOperationalState(setTapiOperationalState(operState))
+            .setLifecycleState(LifecycleState.INSTALLED)
+            .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().setTotalSize(
+                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
+                .build())
+            .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
+            .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
+            .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+            .setErrorCharacteristic("error")
+            .setLossCharacteristic("loss")
+            .setRepeatDeliveryCharacteristic("repeat delivery")
+            .setDeliveryOrderCharacteristic("delivery order")
+            .setUnavailableTimeCharacteristic("unavailable time")
+            .setServerIntegrityProcessCharacteristic("server integrity process")
+            .setValidationMechanism(Map.of(validationMechanism.key(), validationMechanism))
+            .build();
+    }
+
+    public AdministrativeState setTapiAdminState(String adminState) {
+        if (adminState == null) {
+            return null;
+        }
+        return adminState.equals(AdminStates.InService.getName())
+            || adminState.equals(AdministrativeState.UNLOCKED.getName()) ? AdministrativeState.UNLOCKED
+                : AdministrativeState.LOCKED;
+    }
+
+    public AdministrativeState setTapiAdminState(AdminStates adminState1, AdminStates adminState2) {
+        if (adminState1 == null || adminState2 == null) {
+            return null;
+        }
+        LOG.info("Admin state 1 = {}, andmin state 2 = {}", adminState1.getName(), adminState2.getName());
+        return AdminStates.InService.equals(adminState1) && AdminStates.InService.equals(adminState2)
+            ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
+    }
+
+    public OperationalState setTapiOperationalState(String operState) {
+        if (operState == null) {
+            return null;
+        }
+        return operState.equals("inService") || operState.equals(OperationalState.ENABLED.getName())
+            ? OperationalState.ENABLED : OperationalState.DISABLED;
+    }
+
+    public OperationalState setTapiOperationalState(State operState1, State operState2) {
+        if (operState1 == null || operState2 == null) {
+            return null;
+        }
+        return State.InService.equals(operState1) && State.InService.equals(operState2)
+            ? OperationalState.ENABLED : OperationalState.DISABLED;
+    }
+
+    public String getOperState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) {
+        Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
+            .getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
+            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
+            TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
+        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
+            .augmentation(Context1.class).child(TopologyContext.class)
+            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid))
+            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
+            .build();
+        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
+            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
+            TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
+        InstanceIdentifier<OwnedNodeEdgePoint> onep1IID = InstanceIdentifier.builder(Context.class)
+            .augmentation(Context1.class).child(TopologyContext.class)
+            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid))
+            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nep1Uuid))
+            .build();
+        try {
+            Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, onepIID).get();
+            Optional<OwnedNodeEdgePoint> optionalOnep1 = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, onep1IID).get();
+            if (!optionalOnep.isPresent() || !optionalOnep1.isPresent()) {
+                LOG.error("One of the 2 neps doesnt exist in the datastore: {} OR {}", nepUuid, nep1Uuid);
+                return null;
+            }
+            return optionalOnep.get().getOperationalState().equals(optionalOnep1.get().getOperationalState())
+                ? optionalOnep.get().getOperationalState().getName() : OperationalState.DISABLED.getName();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed getting Mapping data from portMapping",e);
+            return null;
+        }
+    }
+
+    public String getAdminState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) {
+        Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
+            .getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
+            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
+            TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
+        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
+            .augmentation(Context1.class).child(TopologyContext.class)
+            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid))
+            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
+            .build();
+        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
+            TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
+            TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
+        InstanceIdentifier<OwnedNodeEdgePoint> onep1IID = InstanceIdentifier.builder(Context.class)
+            .augmentation(Context1.class).child(TopologyContext.class)
+            .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid))
+            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nep1Uuid))
+            .build();
+        try {
+            Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, onepIID).get();
+            Optional<OwnedNodeEdgePoint> optionalOnep1 = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, onep1IID).get();
+            if (!optionalOnep.isPresent() || !optionalOnep1.isPresent()) {
+                LOG.error("One of the 2 neps doesnt exist in the datastore: {} OR {}", nepUuid, nep1Uuid);
+                return null;
+            }
+            return optionalOnep.get().getAdministrativeState().equals(optionalOnep1.get().getAdministrativeState())
+                ? optionalOnep.get().getAdministrativeState().getName() : AdministrativeState.UNLOCKED.getName();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed getting Mapping data from portMapping",e);
+            return null;
+        }
+    }
+}
diff --git a/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml b/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml
deleted file mode 100644 (file)
index 83522f9..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
-Copyright © 2018 Orange 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
-
-Author: Gilles Thouenon <gilles.thouenon@orange.com>
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
-    <reference id="dataBroker"
-          interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-
-    <reference id="deviceTransactionManager"
-               interface="org.opendaylight.transportpce.common.device.DeviceTransactionManager" />
-
-    <reference id="notificationService"
-               interface="org.opendaylight.mdsal.binding.api.NotificationService"/>
-
-    <reference id="notificationPublishService"
-               interface="org.opendaylight.mdsal.binding.api.NotificationPublishService"/>
-
-    <reference id="rpcProviderService"
-          interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
-
-    <reference id="serviceHandlerService"
-          interface="org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService" />
-
-    <reference id="networkTransactionImpl"
-          interface="org.opendaylight.transportpce.common.network.NetworkTransactionService" />
-
-    <reference id="serviceDatastoreOperation"
-               interface="org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations" />
-
-    <bean id="tapiListener"
-          class="org.opendaylight.transportpce.tapi.utils.TapiListener">
-    </bean>
-
-    <bean id="tapiLink"
-          class="org.opendaylight.transportpce.tapi.utils.TapiLink">
-        <argument ref="networkTransactionImpl" />
-    </bean>
-
-    <bean id="tapiPceListener" class="org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl">
-        <argument ref="dataBroker" />
-    </bean>
-
-    <bean id="tapiRendererListener" class="org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl">
-        <argument ref="dataBroker" />
-        <argument ref="notificationPublishService" />
-    </bean>
-
-    <bean id="tapiServiceHandlerListener" class="org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl">
-        <argument ref="dataBroker" />
-    </bean>
-
-    <bean id="tapiNetworkModelListenerImpl" class="org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl">
-        <argument ref="networkTransactionImpl" />
-        <argument ref="notificationPublishService" />
-    </bean>
-
-    <bean id="tapiNetworkModelService" class="org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl">
-        <argument ref="tapilinkDiscoveryImpl" />
-        <argument ref="networkTransactionImpl" />
-        <argument ref="tapiLink" />
-        <argument ref="notificationPublishService" />
-    </bean>
-
-    <bean id="tapiNetconfTopologyListener" class="org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener">
-        <argument ref="tapiNetworkModelService" />
-    </bean>
-
-    <bean id="tapiOrLinkListener" class="org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener">
-        <argument ref="tapiLink" />
-        <argument ref="networkTransactionImpl" />
-    </bean>
-
-    <bean id="tapiNetworkUtilsImpl" class="org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl">
-        <argument ref="networkTransactionImpl" />
-        <argument ref="tapiLink" />
-    </bean>
-
-    <bean id="tapiProvider"
-          class="org.opendaylight.transportpce.tapi.impl.TapiProvider"
-          init-method="init" destroy-method="close">
-        <argument ref="dataBroker" />
-        <argument ref="rpcProviderService" />
-        <argument ref="serviceHandlerService" />
-        <argument ref="serviceDatastoreOperation" />
-        <argument ref="tapiListener" />
-        <argument ref="networkTransactionImpl" />
-        <argument ref="tapiNetconfTopologyListener" />
-        <argument ref="tapiPortMappingListener" />
-        <argument ref="tapiNetworkUtilsImpl" />
-        <argument ref="tapiPceListener" />
-        <argument ref="tapiRendererListener" />
-        <argument ref="tapiServiceHandlerListener" />
-        <argument ref="notificationService" />
-        <argument ref="tapiOrLinkListener" />
-        <argument ref="tapiNetworkModelListenerImpl" />
-    </bean>
-
-    <bean id="tapiPortMappingListener" class="org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener">
-        <argument ref="tapiNetworkModelService" />
-    </bean>
-
-    <bean id="tapilinkDiscoveryImpl" class="org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery">
-        <argument ref="networkTransactionImpl" />
-        <argument ref="deviceTransactionManager" />
-        <argument ref="tapiLink" />
-    </bean>
-
-    <service ref="tapiNetworkModelService" interface="org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService" />
-
-</blueprint>
index bb0ae8789630a0ecdca6eb9cd47fc25b85b09abb..deab1ea8b25b897996076a647d1f38879fec6e13 100644 (file)
@@ -32,9 +32,9 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
@@ -45,6 +45,7 @@ import org.opendaylight.transportpce.tapi.utils.TapiConnectivityDataUtils;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
 import org.opendaylight.transportpce.tapi.utils.TapiInitialORMapping;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
@@ -77,11 +78,11 @@ public class TapiConnectivityImplTest extends AbstractTest {
     @Mock
     private TapiServiceHandlerListenerImpl tapiserviceHandlerListenerImpl;
     @Mock
-    private PceListenerImpl pceListenerImpl;
+    private PceListener pceListenerImpl;
     @Mock
-    private RendererListenerImpl rendererListenerImpl;
+    private RendererListener rendererListenerImpl;
     @Mock
-    private NetworkModelListenerImpl networkModelListenerImpl;
+    private NetworkListener networkModelListenerImpl;
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiConnectivityImplTest.class);
     private static ServiceDataStoreOperations serviceDataStoreOperations;
@@ -110,7 +111,7 @@ public class TapiConnectivityImplTest extends AbstractTest {
             TapiTopologyDataUtils.PORTMAPPING_FILE);
 
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-        tapilink = new TapiLink(networkTransactionService);
+        tapilink = new TapiLinkImpl(networkTransactionService);
         serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(getDataStoreContextUtil().getDataBroker());
         tapiContext = new TapiContext(networkTransactionService);
         topologyUtils = new TopologyUtils(networkTransactionService, getDataStoreContextUtil().getDataBroker(),
@@ -125,7 +126,7 @@ public class TapiConnectivityImplTest extends AbstractTest {
 
     @Test
     void createConnServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
             rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
             networkModelListenerImpl, serviceDataStoreOperations);
 
@@ -150,7 +151,7 @@ public class TapiConnectivityImplTest extends AbstractTest {
     @Test
     void createConnServiceShouldBeSuccessfulWhenPerformPCESuccessful()
             throws ExecutionException, InterruptedException {
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
             rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
             networkModelListenerImpl, serviceDataStoreOperations);
 
@@ -176,7 +177,7 @@ public class TapiConnectivityImplTest extends AbstractTest {
 
     @Test
     void deleteConnServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
             rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
             networkModelListenerImpl, serviceDataStoreOperations);
 
@@ -201,7 +202,7 @@ public class TapiConnectivityImplTest extends AbstractTest {
     @Test
     void deleteConnServiceShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         DeleteConnectivityServiceInput input = TapiConnectivityDataUtils.buildConnServiceDeleteInput1();
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
             rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
             networkModelListenerImpl, serviceDataStoreOperations);
 
@@ -226,7 +227,7 @@ public class TapiConnectivityImplTest extends AbstractTest {
     void deleteConnServiceShouldBeSuccessForExistingService() throws ExecutionException, InterruptedException {
         when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
 
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(getNewDataBroker(), pathComputationService,
+        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
             rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
             networkModelListenerImpl, serviceDataStoreOperations);
 
index 76077e6fb6ffe52686f9091cab8da49686570a79..b815d1b5363d8607ea2e0ee91a94d1c89740d434 100644 (file)
@@ -8,80 +8,68 @@
 package org.opendaylight.transportpce.tapi.provider;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.opendaylight.mdsal.common.api.CommitInfo.emptyFluentFuture;
 
-import org.junit.jupiter.api.BeforeAll;
+import com.google.common.util.concurrent.Futures;
+import java.util.Optional;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
-import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
-import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
-import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
-import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
-import org.opendaylight.transportpce.tapi.utils.TapiListener;
-import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TapiCommonService;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.TapiTopologyService;
 
 @ExtendWith(MockitoExtension.class)
-public class TapiProviderTest extends AbstractTest {
-    private static NetworkTransactionService networkTransactionService;
+public class TapiProviderTest {
 
     @Mock
-    private RpcProviderService rpcProviderRegistry;
-    @Mock
-    private OrgOpenroadmServiceService serviceHandler;
+    private DataBroker dataBroker;
     @Mock
-    private ServiceDataStoreOperations serviceDataStoreOperations;
-    @Mock
-    private TapiListener tapiListener;
+    private RpcProviderService rpcProviderRegistry;
     @Mock
-    private TransportpceTapinetworkutilsService tapiNetworkUtils;
+    private NotificationService notificationService;
     @Mock
-    private TapiPortMappingListener tapiPortMappingListener;
+    private NotificationPublishService notificationPublishService;
     @Mock
-    private TapiNetconfTopologyListener topologyListener;
+    private NetworkTransactionService networkTransactionService;
     @Mock
-    private TapiOrLinkListener orLinkListener;
+    private OrgOpenroadmServiceService serviceHandler;
     @Mock
-    private TapiPceListenerImpl pceListenerImpl;
+    private ServiceDataStoreOperations serviceDataStoreOperations;
     @Mock
-    private TapiRendererListenerImpl rendererListenerImpl;
+    private TransportpceTapinetworkutilsService tapiNetworkUtils;
     @Mock
-    private TapiServiceHandlerListenerImpl serviceHandlerListenerImpl;
+    private TapiNotificationListener tapiNetworkModelListenerImpl;
     @Mock
-    private TapiNetworkModelListenerImpl networkModelListener;
-
-
-    @BeforeAll
-    static void setUp() {
-        networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-    }
+    private TapiNetworkModelService tapiNetworkModelServiceImpl;
 
     @Test
     void testInitRegisterTapiToRpcRegistry() {
-        TapiProvider provider =  new TapiProvider(getDataBroker(), rpcProviderRegistry, serviceHandler,
-            serviceDataStoreOperations, tapiListener, networkTransactionService, topologyListener,
-            tapiPortMappingListener, tapiNetworkUtils, pceListenerImpl, rendererListenerImpl,
-            serviceHandlerListenerImpl, getNotificationService(), orLinkListener, networkModelListener);
-
-        provider.init();
+        when(networkTransactionService.read(any(), any())).thenReturn(Futures.immediateFuture(Optional.empty()));
+        doReturn(emptyFluentFuture()).when(networkTransactionService).commit();
+        new TapiProvider(dataBroker, rpcProviderRegistry, notificationService, notificationPublishService,
+                networkTransactionService, serviceHandler, serviceDataStoreOperations, tapiNetworkUtils,
+                tapiNetworkModelListenerImpl, tapiNetworkModelServiceImpl);
 
         verify(rpcProviderRegistry, times(1)).registerRpcImplementation(any(), any(TapiConnectivityService.class));
         verify(rpcProviderRegistry, times(2)).registerRpcImplementation(any(), any(TapiTopologyService.class));
         verify(rpcProviderRegistry, times(2)).registerRpcImplementation(any(), any(TapiCommonService.class));
+        verify(dataBroker, times(4)).registerDataTreeChangeListener(any(), any());
     }
 }
\ No newline at end of file
index 272caa5b28e3616d7272a3faf1b0b11489a3aa19..ed92f5aad66e501acbe5d9fbc8238042d6f438e2 100644 (file)
@@ -39,6 +39,7 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
@@ -196,7 +197,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
             Charset.forName("UTF-8"))).toString());
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-        tapiLink = new TapiLink(networkTransactionService);
+        tapiLink = new TapiLinkImpl(networkTransactionService);
         LOG.info("TEST SETUP READY");
     }
 
index 001e944e0241d0a40ab37a218fe6dd6e41bd88e0..1eaf0022c0e89ac2a3e37ee96d25c8638aac555f 100644 (file)
@@ -37,6 +37,7 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
@@ -162,7 +163,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
             Charset.forName("UTF-8"))).toString());
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-        tapiLink = new TapiLink(networkTransactionService);
+        tapiLink = new TapiLinkImpl(networkTransactionService);
         LOG.info("TEST SETUP READY");
     }
 
index 31556e8c5a235be8c051e076fe84b0bd386e4455..b09340b2582751a1964073bd7782392e443a9d8c 100644 (file)
@@ -61,7 +61,6 @@ public class TapiTopologyImplExceptionTest {
         };
         when(networkTransactionService.commit()).then(answer);
         tapiContext = new TapiContext(networkTransactionService);
-        tapiLink = new TapiLink(networkTransactionService);
 
         GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(
             TapiStringConstants.T0_MULTILAYER);
index fd339a28bf644051259cd71d3f3c7bcb7375427e..346c7590fd149c8c92c618ccbcf63974e6c9421a 100644 (file)
@@ -39,6 +39,7 @@ import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
 import org.opendaylight.transportpce.tapi.utils.TapiInitialORMapping;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
@@ -105,7 +106,7 @@ public class TapiTopologyImplTest extends AbstractTest {
         TopologyDataUtils.writePortmappingFromFileToDatastore(getDataStoreContextUtil(),
             TapiTopologyDataUtils.PORTMAPPING_FILE);
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-        tapiLink = new TapiLink(networkTransactionService);
+        tapiLink = new TapiLinkImpl(networkTransactionService);
         serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(getDataStoreContextUtil().getDataBroker());
         tapiContext = new TapiContext(networkTransactionService);
         topologyUtils = new TopologyUtils(networkTransactionService, getDataStoreContextUtil().getDataBroker(),
index a150e6c36a7ce4f15895d9c2c1606552f92e4fbd..e85da34ca01799a98215bfb4a4d1931f60341bca 100644 (file)
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>test-common</artifactId>
-  <version>7.0.0-SNAPSHOT</version>
+  <version>7.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.0</transportpce.models.version>
+    <transportpce.models.version>18.0.1</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -37,7 +37,7 @@
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.3</version>
+        <version>5.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
index 2f92031bc238e1078b4396e7128dcda854a3a877..58ccf122c22ba3c10bb8cea6586a96f495e0d348 100644 (file)
@@ -29,8 +29,7 @@ import simulators
 SIMS = simulators.SIMS
 
 HONEYNODE_OK_START_MSG = 'Netconf SSH endpoint started successfully at 0.0.0.0'
-KARAF_OK_START_MSG = "Blueprint container for bundle org.opendaylight.transportpce.servicehandler.+" \
-    "was successfully created"
+KARAF_OK_START_MSG = "Transportpce controller started"
 LIGHTY_OK_START_MSG = re.escape("lighty.io and RESTCONF-NETCONF started")
 
 ODL_LOGIN = 'admin'