<module>odl-transportpce-dmaap-client</module>
<module>odl-transportpce-swagger</module>
</modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-install-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperationsImpl;
+import org.opendaylight.transportpce.servicehandler.impl.ServiceHandlerProvider;
import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
-import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
-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.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
// network model beans
private final NetworkModelProvider networkModelProvider;
// service-handler beans
- private final ServicehandlerProvider servicehandlerProvider;
+ private final ServiceHandlerProvider servicehandlerProvider;
// T-api
private TapiProvider tapiProvider;
// nbi-notifications beans
portMapping);
ServiceDataStoreOperations serviceDataStoreOperations =
new ServiceDataStoreOperationsImpl(lgServBDB);
- RendererListenerImpl rendererListenerImpl =
- new RendererListenerImpl(pathComputationService, lgServBNPS, networkModelService);
- PceListenerImpl pceListenerImpl = new PceListenerImpl(
+ RendererNotificationHandler rendererNotificationHandler =
+ new RendererNotificationHandler(pathComputationService, lgServBNPS, networkModelService);
+ PceNotificationHandler pceListenerImpl = new PceNotificationHandler(
rendererServiceOperations, pathComputationService,
lgServBNPS, serviceDataStoreOperations);
- NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
+ NetworkModelNotificationHandler networkModelNotificationHandler = new NetworkModelNotificationHandler(
lgServBNPS, serviceDataStoreOperations);
ServicehandlerImpl servicehandler = new ServicehandlerImpl(lgServRPS,
pathComputationService, rendererServiceOperations,
lgServBNPS, pceListenerImpl,
- rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations,
+ rendererNotificationHandler, networkModelNotificationHandler, serviceDataStoreOperations,
new CatalogDataStoreOperationsImpl(networkTransaction));
rpcRegistrations.add(servicehandler.getRegisteredRpc());
- servicehandlerProvider = new ServicehandlerProvider(
+ servicehandlerProvider = new ServiceHandlerProvider(
lgServBDB,
lgServNS, serviceDataStoreOperations, pceListenerImpl,
- rendererListenerImpl, networkModelListenerImpl, lgServBNPS,
- servicehandler,
+ rendererNotificationHandler, networkModelNotificationHandler,
new ServiceListener(
servicehandler, serviceDataStoreOperations, lgServBNPS));
if (activateTapi) {
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.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
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;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OrgOpenroadmServiceService;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceList;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
+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;
*
*/
@Component
-public class ServicehandlerProvider {
+public class ServiceHandlerProvider {
- private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerProvider.class);
+ private static final Logger LOG = LoggerFactory.getLogger(ServiceHandlerProvider.class);
private static final InstanceIdentifier<Services> SERVICE = InstanceIdentifier.builder(ServiceList.class)
.child(Services.class).build();
- private ListenerRegistration<TransportpcePceListener> pcelistenerRegistration;
+ private final Registration pcelistenerRegistration;
private ListenerRegistration<DataTreeChangeListener<Services>> serviceDataTreeChangeListenerRegistration;
- private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
- private ListenerRegistration<TransportpceNetworkmodelListener> networkmodellistenerRegistration;
+ private final Registration rendererlistenerRegistration;
+ private final Registration networkmodellistenerRegistration;
private ServiceDataStoreOperations serviceDataStoreOperations;
@Activate
- public ServicehandlerProvider(@Reference final DataBroker dataBroker,
+ public ServiceHandlerProvider(@Reference final DataBroker dataBroker,
@Reference NotificationService notificationService,
@Reference ServiceDataStoreOperations serviceDataStoreOperations,
- @Reference TransportpcePceListener pceListenerImpl,
- @Reference TransportpceRendererListener rendererListenerImpl,
- @Reference TransportpceNetworkmodelListener networkModelListenerImpl,
- @Reference NotificationPublishService notificationPublishService,
- @Reference OrgOpenroadmServiceService servicehandler,
+ @Reference PceNotificationHandler pceNotificationHandler,
+ @Reference RendererNotificationHandler rendererNotificationHandler,
+ @Reference NetworkModelNotificationHandler networkModelNotificationHandler,
@Reference DataTreeChangeListener<Services> serviceListener) {
this.serviceDataStoreOperations = serviceDataStoreOperations;
this.serviceDataStoreOperations.initialize();
- pcelistenerRegistration = notificationService.registerNotificationListener(pceListenerImpl);
- rendererlistenerRegistration = notificationService.registerNotificationListener(rendererListenerImpl);
- networkmodellistenerRegistration = notificationService.registerNotificationListener(networkModelListenerImpl);
+ pcelistenerRegistration = notificationService
+ .registerCompositeListener(pceNotificationHandler.getCompositeListener());
+ rendererlistenerRegistration = notificationService
+ .registerCompositeListener(rendererNotificationHandler.getCompositeListener());
+ networkmodellistenerRegistration = notificationService
+ .registerCompositeListener(networkModelNotificationHandler.getCompositeListener());
serviceDataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, SERVICE), serviceListener);
LOG.info("ServicehandlerProvider Session Initiated");
rendererlistenerRegistration.close();
networkmodellistenerRegistration.close();
}
-}
\ No newline at end of file
+}
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
import org.opendaylight.transportpce.common.OperationResult;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TopologyUpdateResult;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TopologyUpdateResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChanges;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Component
-public class NetworkModelListenerImpl implements TransportpceNetworkmodelListener, NetworkListener {
+@Component(service = {NetworkModelNotificationHandler.class, NetworkListener.class})
+public class NetworkModelNotificationHandler implements NetworkListener {
- private static final Logger LOG = LoggerFactory.getLogger(NetworkModelListenerImpl.class);
+ private static final Logger LOG = LoggerFactory.getLogger(NetworkModelNotificationHandler.class);
private ServiceDataStoreOperations serviceDataStoreOperations;
private TopologyUpdateResult topologyUpdateResult;
@Activate
- public NetworkModelListenerImpl(@Reference NotificationPublishService notificationPublishService,
+ public NetworkModelNotificationHandler(@Reference NotificationPublishService notificationPublishService,
@Reference ServiceDataStoreOperations serviceDataStoreOperations) {
this.serviceDataStoreOperations = serviceDataStoreOperations;
}
- @Override
- public void onTopologyUpdateResult(TopologyUpdateResult notification) {
+ public CompositeListener getCompositeListener() {
+ return new CompositeListener(Set.of(
+ new CompositeListener.Component<>(TopologyUpdateResult.class, this::onTopologyUpdateResult)));
+ }
+
+ void onTopologyUpdateResult(TopologyUpdateResult notification) {
LOG.debug("Topology update notification: {}", notification);
if (compareTopologyUpdateResult(notification)) {
LOG.warn("TopologyUpdateResult already wired !");
package org.opendaylight.transportpce.servicehandler.listeners;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Set;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
import org.opendaylight.transportpce.common.OperationResult;
import org.opendaylight.transportpce.pce.service.PathComputationService;
import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-@Component
-public class PceListenerImpl implements TransportpcePceListener, PceListener {
+@Component(service = {PceNotificationHandler.class, PceListener.class})
+public class PceNotificationHandler implements PceListener {
- private static final Logger LOG = LoggerFactory.getLogger(PceListenerImpl.class);
+ private static final Logger LOG = LoggerFactory.getLogger(PceNotificationHandler.class);
private static final String PUBLISHER = "PceListener";
private ServicePathRpcResult servicePathRpcResult;
private NotificationPublishService notificationPublishService;
@Activate
- public PceListenerImpl(
+ public PceNotificationHandler(
@Reference RendererServiceOperations rendererServiceOperations,
@Reference PathComputationService pathComputationService,
@Reference NotificationPublishService notificationPublishService,
this.notificationPublishService = notificationPublishService;
}
- @Override
- public void onServicePathRpcResult(ServicePathRpcResult notification) {
+ public CompositeListener getCompositeListener() {
+ return new CompositeListener(Set.of(
+ new CompositeListener.Component<>(ServicePathRpcResult.class, this::onServicePathRpcResult)));
+ }
+
+ private void onServicePathRpcResult(ServicePathRpcResult notification) {
if (compareServicePathRpcResult(notification)) {
LOG.warn("ServicePathRpcResult already wired !");
return;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
import org.opendaylight.transportpce.common.OperationResult;
import org.opendaylight.transportpce.common.StringConstants;
import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultShBuilder;
* @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
*
*/
-@Component
-public class RendererListenerImpl implements TransportpceRendererListener, RendererListener {
+@Component(service = {RendererNotificationHandler.class, RendererListener.class})
+public class RendererNotificationHandler implements RendererListener {
private static final String PUBLISHER = "RendererListener";
- private static final Logger LOG = LoggerFactory.getLogger(RendererListenerImpl.class);
+ private static final Logger LOG = LoggerFactory.getLogger(RendererNotificationHandler.class);
private RendererRpcResultSp serviceRpcResultSp;
private ServiceDataStoreOperations serviceDataStoreOperations;
private ServiceInput input;
private NotificationPublishService notificationPublishService;
private final NetworkModelService networkModelService;
-
@Activate
- public RendererListenerImpl(@Reference PathComputationService pathComputationService,
+ public RendererNotificationHandler(@Reference PathComputationService pathComputationService,
@Reference NotificationPublishService notificationPublishService,
@Reference NetworkModelService networkModelService) {
this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
this.networkModelService = networkModelService;
}
- @Override
- public void onRendererRpcResultSp(RendererRpcResultSp notification) {
+ public CompositeListener getCompositeListener() {
+ return new CompositeListener(Set.of(
+ new CompositeListener.Component<>(RendererRpcResultSp.class, this::onRendererRpcResultSp)));
+ }
+
+ private void onRendererRpcResultSp(RendererRpcResultSp notification) {
if (compareServiceRpcResultSp(notification)) {
LOG.warn("ServiceRpcResultSp already wired !");
return;
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
+import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
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.rev230526.OrgOpenroadmServiceService;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
@ExtendWith(MockitoExtension.class)
-public class ServicehandlerProviderTest extends AbstractTest {
+public class ServiceHandlerProviderTest extends AbstractTest {
@Mock
- DataBroker dataBroker;
+ RendererServiceOperations rendererServiceOperations;
@Mock
- ServiceDataStoreOperations serviceDataStoreOperations;
+ PathComputationService pathComputationService;
@Mock
- TransportpcePceListener pceListenerImpl;
+ NetworkModelService networkModelService;
@Mock
- TransportpceRendererListener rendererListenerImpl;
+ DataBroker dataBroker;
@Mock
- TransportpceNetworkmodelListener networkModelListenerImpl;
+ ServiceDataStoreOperations serviceDataStoreOperations;
@Mock
NotificationPublishService notificationPublishService;
@Mock
- OrgOpenroadmServiceService servicehandler;
- @Mock
DataTreeChangeListener<Services> serviceListener;
+ private final PceNotificationHandler pceNotificationHandler = new PceNotificationHandler(rendererServiceOperations,
+ pathComputationService, notificationPublishService, serviceDataStoreOperations);
+ private final RendererNotificationHandler rendererNotificationHandler = new RendererNotificationHandler(
+ pathComputationService, notificationPublishService, networkModelService);
+ private final NetworkModelNotificationHandler networkModelNotificationHandler = new NetworkModelNotificationHandler(
+ notificationPublishService, serviceDataStoreOperations);
+
@Test
void testInitRegisterServiceHandlerToRpcRegistry() {
- new ServicehandlerProvider(dataBroker, getNotificationService() ,
- serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
- notificationPublishService, servicehandler, serviceListener);
-
+ new ServiceHandlerProvider(dataBroker, getNotificationService(),
+ serviceDataStoreOperations, pceNotificationHandler, rendererNotificationHandler,
+ networkModelNotificationHandler, serviceListener);
verify(dataBroker, times(1)).registerDataTreeChangeListener(any(), any());
}
-}
\ No newline at end of file
+}
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
@ExtendWith(MockitoExtension.class)
-public class NetworkModelListenerImplTest {
+public class NetworkModelNotificationHandlerTest {
@Mock
private NotificationPublishService notificationPublishService;
@Mock
private ServiceDataStoreOperations serviceDataStoreOperations;
private static PathDescription pathDescription;
- private NetworkModelListenerImpl networkModelListener;
+ private NetworkModelNotificationHandler networkModelListener;
@BeforeEach
void setUp() {
.setAToZDirection(new AToZDirectionBuilder().setAToZ(new HashMap<>(createMapAtoZ())).build())
.setZToADirection(new ZToADirectionBuilder().setZToA(new HashMap<>(createMapZtoA())).build())
.build();
- networkModelListener = new NetworkModelListenerImpl(notificationPublishService,
+ networkModelListener = new NetworkModelNotificationHandler(notificationPublishService,
serviceDataStoreOperations);
}
@Test
void testOnTopologyUpdateResultWhenNeverWired() {
- NetworkModelListenerImpl networkModelListenerMocked = Mockito.mock(NetworkModelListenerImpl.class);
+ NetworkModelNotificationHandler networkModelListenerMocked = Mockito.mock(
+ NetworkModelNotificationHandler.class);
doCallRealMethod().when(networkModelListenerMocked).onTopologyUpdateResult(any(TopologyUpdateResult.class));
Map<TopologyChangesKey, TopologyChanges> topologyChanges1 = Map.of(
@Test
void testOnTopologyUpdateResultWhenAlreadyWired() {
- NetworkModelListenerImpl networkModelListenerMocked = Mockito.mock(NetworkModelListenerImpl.class);
+ NetworkModelNotificationHandler networkModelListenerMocked = Mockito.mock(
+ NetworkModelNotificationHandler.class);
doCallRealMethod().when(networkModelListenerMocked).onTopologyUpdateResult(any(TopologyUpdateResult.class));
Map<TopologyChangesKey, TopologyChanges> topologyChanges = Map.of(
#build controller, source JDK_JAVA_OPTIONS to remove illegal reflective acces warnings introduced by Java11
. "$current_dir"/reflectwarn.sh
-mvn clean install -B -q -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true -Dodlparent.spotbugs.skip -Dodlparent.checkstyle.skip
+mvn clean install -B -q -s tests/odl_settings.xml -Pq
#patch Karaf exec for the same reason at runtime and also to have the possibility to use alternative ports
./karaf/target/assembly/ressources/post_install_for_tests.sh
+dict2xml>=1.6.0 # MIT License
+netconf_client>=2.0.0 # Apache License 2.0
psutil>=5.6.7 # 3-clause / New BSD License
requests!=2.12.2,>=2.10.0 # Apache License 2.0
-netconf_client
-dict2xml
-
def setUpClass(cls):
# pylint: disable=bare-except
sample_files_parsed = False
+ time.sleep(10)
try:
TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
"..", "..", "sample_configs", "honeynode-topo.json")