/* * 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 */ package org.opendaylight.transportpce.tapi.utils; import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.api.DataObjectModification; import org.opendaylight.mdsal.binding.api.DataTreeChangeListener; import org.opendaylight.mdsal.binding.api.DataTreeModification; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.ServiceInterfacePoints; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.service._interface.points.ServiceEndPoint; import org.opendaylight.yangtools.yang.binding.DataObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TapiListener implements DataTreeChangeListener { private static final Logger LOG = LoggerFactory.getLogger(TapiListener.class); private static final String SE_JAVA_INTF = "interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928" + ".service._interface.points.ServiceEndPoint"; @Override public void onDataTreeChanged(@NonNull List> changes) { LOG.info("onDataTreeChanged in TapiListener"); for (DataTreeModification change : changes) { DataObjectModification rootSIP = change.getRootNode(); switch (rootSIP.modificationType()) { case WRITE: LOG.info("onDataTreeChanged in TapiListener : WRITE"); MappingUtils.deleteMap(); for (ServiceEndPoint sep : rootSIP.dataAfter().getServiceEndPoint().values()) { MappingUtils.addMapSEP(sep); } MappingUtils.afficheMap(); break; case SUBTREE_MODIFIED: LOG.info("onDataTreeChanged in TapiListener : SUBTREE_MODIFIED"); for (DataObjectModification dom : rootSIP.getModifiedChildren(ServiceEndPoint.class)) { // to delete existing child entry DataObject dataAfter = dom.dataAfter(); if (dataAfter == null) { MappingUtils.deleteMapEntry(((ServiceEndPoint) dom.dataBefore()).getUuid()); MappingUtils.afficheMap(); continue; } // to add new child entry if (dom.dataBefore() != null || dom.dataType().toString().compareTo(SE_JAVA_INTF) != 0) { LOG.error("data input type is not a valid 'service-end-point'"); continue; } MappingUtils.addMapSEP((ServiceEndPoint) dataAfter); MappingUtils.afficheMap(); } break; case DELETE: LOG.info("onDataTreeChanged in TapiListener : DELETE"); MappingUtils.deleteMap(); break; default: LOG.error("Error of API REST modification type"); break; } } } }