blob: a014a483151f074182659673cd2049eb6f506992 [file] [log] [blame]
/*
* Copyright 2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.tenbi.topology.impl;
import static com.google.common.base.Preconditions.checkNotNull;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onosproject.event.AbstractListenerManager;
import org.onosproject.tetopology.management.api.TeTopologyService;
import org.onosproject.teyang.api.OperationType;
import org.onosproject.teyang.utils.topology.NetworkConverter;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetwork.OnosYangOpType;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkOpParam;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.IetfNetworkService;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.Networks;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev20151208.ietfnetwork.NetworksState;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208.IetfNetworkTopology;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.IetfNetworkTopologyOpParam;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev20151208
.IetfNetworkTopologyService;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopology;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708.IetfTeTopologyOpParam;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.IetfTeTopologyService;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.IetfTeTopologyEvent;
import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.te.topology.rev20160708
.ietftetopology.IetfTeTopologyEventListener;
import org.onosproject.yms.ymsm.YmsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The IETF TE Topology NBI Manager implementation.
*/
@Component(immediate = true)
@Service
public class TeTopologyNbiManager
extends AbstractListenerManager<IetfTeTopologyEvent, IetfTeTopologyEventListener>
implements IetfNetworkService, IetfNetworkTopologyService, IetfTeTopologyService {
private final Logger log = LoggerFactory.getLogger(getClass());
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected TeTopologyService teTopologyService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected YmsService ymsService;
@Activate
protected void activate() {
// Register 3 services with YMS.
ymsService.registerService(this, IetfNetworkService.class, null);
ymsService.registerService(this, IetfNetworkTopologyService.class, null);
ymsService.registerService(this, IetfTeTopologyService.class, null);
log.info("Started");
}
@Deactivate
protected void deactivate() {
// Unregister 3 services.
ymsService.unRegisterService(this, IetfNetworkService.class);
ymsService.unRegisterService(this, IetfNetworkTopologyService.class);
ymsService.unRegisterService(this, IetfTeTopologyService.class);
log.info("Stopped");
}
@Override
public IetfNetwork getIetfNetwork(IetfNetworkOpParam ietfNetwork) {
log.info("getIetfNetwork: input {}", ietfNetwork);
checkNotNull(ietfNetwork, "getIetfNetwork: ietfNetwork cannot be null");
// Get the entire data tree from TE Subsystem core.
org.onosproject.tetopology.management.api.Networks teNetworks = teTopologyService.getNetworks();
// Convert the TE Subsystem core data into YANG Objects.
Networks networks = NetworkConverter.teSubsystem2YangNetworks(teNetworks, OperationType.QUERY);
NetworksState networkStates = NetworkConverter.teSubsystem2YangNetworkStates(teNetworks, OperationType.QUERY);
IetfNetworkOpParam.IetfNetworkBuilder builder = new IetfNetworkOpParam.IetfNetworkBuilder();
IetfNetwork newNetwork = builder.networks(networks)
.networksState(networkStates)
.yangIetfNetworkOpType(OnosYangOpType.NONE)
.build();
// processSubtreeFiltering() filters the entire data tree based on the
// user's query and returns the filtered data.
return ietfNetwork.processSubtreeFiltering(
(IetfNetworkOpParam) newNetwork,
false);
}
@Override
public void setIetfNetwork(IetfNetworkOpParam ietfNetwork) {
// In H release, topology is discovered from south, no NBI Set is supported.
}
@Override
public IetfTeTopology getIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
// unused method.
return ietfTeTopology;
}
@Override
public void setIetfTeTopology(IetfTeTopologyOpParam ietfTeTopology) {
// unused methods.
}
@Override
public IetfTeTopology getAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam ietfTeTopology) {
// unused methods.
return ietfTeTopology;
}
@Override
public void setAugmentedIetfTeTopologyTeLinkEvent(IetfTeTopologyOpParam augmentedIetfTeTopologyTeLinkEvent) {
// unused methods.
}
@Override
public IetfNetworkTopology getIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
// unused methods.
return ietfNetworkTopology;
}
@Override
public void setIetfNetworkTopology(IetfNetworkTopologyOpParam ietfNetworkTopology) {
// unused methods.
}
@Override
public IetfNetwork getAugmentedIetfNetworkNetworks(IetfNetworkOpParam ietfNetwork) {
// unused methods.
return ietfNetwork;
}
@Override
public void setAugmentedIetfNetworkNetworks(IetfNetworkOpParam augmentedIetfNetworkNetworks) {
// unused methods.
}
}