description "YANG model for gnpy path computation simplified for transportPCE";
+ revision "2020-09-09" {
+ description "remove key from route-object-include-exclude";
+ }
+
revision "2020-02-02" {
description "second draft with detailed blocking reasons";
reference "YANG model for path computation with gnpy inputs";
description
"Container for the route object list";
list route-object-include-exclude {
- key index;
description
"List of explicit route objects to include or
exclude in path computation";
<version>1.2.0</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.inject</groupId>
+ <artifactId>jersey-hk2</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
package org.opendaylight.transportpce.pce;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.transportpce.common.ResponseCodes;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.pce.constraints.PceConstraints;
private Boolean success;
private String message;
private String responseCode;
+ private BindingDOMCodecServices bindingDOMCodecServices;
public PceSendingPceRPCs() {
setPathDescription(null);
}
public PceSendingPceRPCs(PathComputationRequestInput input,
- NetworkTransactionService networkTransaction) {
+ NetworkTransactionService networkTransaction, BindingDOMCodecServices bindingDOMCodecServices) {
setPathDescription(null);
// TODO compliance check to check that input is not empty
this.input = input;
this.networkTransaction = networkTransaction;
+ this.bindingDOMCodecServices = bindingDOMCodecServices;
}
public void cancelResourceReserve() {
try {
ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer();
if (connectToGnpy.isGnpyURLExist()) {
- GnpyUtilitiesImpl gnpy = new GnpyUtilitiesImpl(networkTransaction, input);
+ GnpyUtilitiesImpl gnpy = new GnpyUtilitiesImpl(networkTransaction, input,
+ bindingDOMCodecServices);
if (rc.getStatus() && gnpyToCheckFeasiblity(atoz,ztoa,gnpy)) {
setPathDescription(new PathDescriptionBuilder().setAToZDirection(atoz).setZToADirection(ztoa));
return;
package org.opendaylight.transportpce.pce.constraints;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
public class PceConstraintsCalc {
/* Logging. */
private static final Logger LOG = LoggerFactory.getLogger(PceConstraintsCalc.class);
+ private static final Comparator<OrderedHops> ORDERED_HOP_COMPARATOR =
+ Comparator.comparing(OrderedHops::getHopNumber);
private PceConstraints pceHardConstraints = new PceConstraints();
private PceConstraints pceSoftConstraints = new PceConstraints();
}
private void readIncludeNodes(List<OrderedHops> listHops, PceConstraints constraints) {
+ Collections.sort(listHops, ORDERED_HOP_COMPARATOR);
for (int i = 0; i < listHops.size(); i++) {
HopType hoptype = listHops.get(i).getHopType().getHopType();
public String returnGnpyResponse(String jsonTxt) throws GnpyException {
String jsonRespTxt = null;
-
+ LOG.debug("Sending request {}",jsonTxt);
try {
// Send the request to the GNPy
HttpURLConnection conn = connectToGNPy("POST");
} catch (IOException e) {
throw new GnpyException("In connectToGnpyServer: excpetion",e);
}
+ LOG.debug("Receiving response {}",jsonRespTxt);
return jsonRespTxt;
}
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Optional;
import javax.annotation.Nonnull;
-import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
-import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
-import org.opendaylight.mdsal.binding.dom.adapter.ConstantAdapterContext;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.Result;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.explicit.route.hop.type.NumUnnumHop;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetric;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathRouteObjects;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.Response;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.NoPathCase;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.PathCase;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.Result;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.explicit.route.hop.type.NumUnnumHop;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.path.properties.PathMetric;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.path.properties.PathRouteObjects;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.Response;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.NoPathCase;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.PathCase;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.General;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.GeneralBuilder;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.constraints.sp.co.routing.or.general.general.Include;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOG = LoggerFactory.getLogger(GnpyResult.class);
private Response response = null;
private Map<String, IpAddress> mapNodeRefIp = new HashMap<>();
- private final AdapterContext adapterContext = new ConstantAdapterContext();
+ private EffectiveModelContext effectiveModelcontext;
- public GnpyResult(String gnpyResponseString, GnpyTopoImpl gnpyTopo) throws GnpyException, Exception {
+ public GnpyResult(String gnpyResponseString, GnpyTopoImpl gnpyTopo,
+ BindingDOMCodecServices bindingDOMCodecServices) throws GnpyException {
this.mapNodeRefIp = gnpyTopo.getMapNodeRefIp();
- // Create the schema context
- Collection<? extends YangModuleInfo> moduleInfos = Collections.singleton(BindingReflections
- .getModuleInfo(Result.class));
- BindingRuntimeHelpers.createEffectiveModel(moduleInfos);
-
- // Create the binding binding normalized node codec registry
- final BindingNormalizedNodeSerializer codecRegistry = adapterContext.currentSerializer();
+ effectiveModelcontext = bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext();
// Create the data object
- QName pathQname = QName.create("gnpy:path", "2020-02-02", "result");
+ QName pathQname = QName.create("gnpy:path", "2020-09-09", "result");
LOG.debug("the Qname is {} / namesapce {} ; module {}; ", pathQname, pathQname.getNamespace(),
pathQname.getModule());
YangInstanceIdentifier yangId = YangInstanceIdentifier.of(pathQname);
throw new GnpyException("In GnpyResult: the Normalized Node is not present");
}
NormalizedNode<? extends PathArgument, ?> normalizedNode = transformIntoNormalizedNode.get();
+ Entry<InstanceIdentifier<?>, DataObject> fromNormalizedNode = bindingDOMCodecServices
+ .fromNormalizedNode(yangId, normalizedNode);
- if (codecRegistry.fromNormalizedNode(yangId, normalizedNode) != null) {
- dataObject = codecRegistry.fromNormalizedNode(yangId, normalizedNode).getValue();
+ if (fromNormalizedNode != null) {
+ dataObject = fromNormalizedNode.getValue();
} else {
throw new GnpyException("In GnpyResult: the codec registry from the normalized node is null");
}
int counter = 0;
for (PathRouteObjects pathRouteObjects : pathRouteObjectList) {
if (pathRouteObjects.getPathRouteObject().getType() instanceof NumUnnumHop) {
- NumUnnumHop numUnnumHop = (org.opendaylight.yang.gen.v1.gnpy.path.rev200202.explicit.route.hop.type
+ NumUnnumHop numUnnumHop = (org.opendaylight.yang.gen.v1.gnpy.path.rev200909.explicit.route.hop.type
.NumUnnumHop) pathRouteObjects.getPathRouteObject().getType();
String nodeIp = numUnnumHop.getNumUnnumHop().getNodeId();
try {
* @throws Exception exception
*/
private Optional<NormalizedNode<? extends YangInstanceIdentifier.PathArgument, ?>> parseInputJSON(JsonReader reader,
- Class<? extends DataObject> objectClass) throws Exception {
+ Class<? extends DataObject> objectClass) {
NormalizedNodeResult result = new NormalizedNodeResult();
- SchemaContext schemaContext = getSchemaContext(objectClass);
try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
JsonParserStream jsonParser = JsonParserStream.create(streamWriter,
- JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext),
- schemaContext);) {
+ JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(effectiveModelcontext),
+ effectiveModelcontext);) {
jsonParser.parse(reader);
} catch (IOException e) {
LOG.warn("GNPy: exception {} occured during parsing Json input stream", e.getMessage());
return Optional.ofNullable(result.getResult());
}
- private SchemaContext getSchemaContext(Class<? extends DataObject> objectClass) throws GnpyException, Exception {
- Collection<? extends YangModuleInfo> moduleInfos = Collections.singleton(BindingReflections
- .getModuleInfo(objectClass));
- return BindingRuntimeHelpers.createEffectiveModel(moduleInfos);
- }
/**
* Transforms the given input {@link NormalizedNode} into the given {@link DataObject}.
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.transportpce.pce.constraints.PceConstraints;
import org.opendaylight.transportpce.pce.constraints.PceConstraints.ResourcePair;
+import org.opendaylight.transportpce.pce.gnpy.utils.AToZComparator;
+import org.opendaylight.transportpce.pce.gnpy.utils.ZToAComparator;
import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Elements;
import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.ElementsKey;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.RouteIncludeEro;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.TeHopType;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.TeNodeId;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.TePathDisjointness;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.TeTpId;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.common.constraints_config.TeBandwidth;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.common.constraints_config.TeBandwidthBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.explicit.route.hop.Type;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.explicit.route.hop.type.NumUnnumHopBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.explicit.route.hop.type.num.unnum.hop.NumUnnumHop;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.constraints.PathConstraints;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.constraints.PathConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.gnpy.specific.parameters.EffectiveFreqSlot;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.gnpy.specific.parameters.EffectiveFreqSlotBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.ExplicitRouteObjects;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.ExplicitRouteObjectsBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.explicit.route.objects.RouteObjectIncludeExclude;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.explicit.route.objects.RouteObjectIncludeExcludeBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.path.route.objects.explicit.route.objects.RouteObjectIncludeExcludeKey;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequest;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequestBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequestKey;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.Synchronization;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.SynchronizationBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.synchronization.Svec;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.synchronization.SvecBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.RouteIncludeEro;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.TeHopType;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.TeNodeId;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.TePathDisjointness;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.TeTpId;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.common.constraints_config.TeBandwidth;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.common.constraints_config.TeBandwidthBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.explicit.route.hop.Type;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.explicit.route.hop.type.NumUnnumHopBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.explicit.route.hop.type.num.unnum.hop.NumUnnumHop;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.constraints.PathConstraints;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.constraints.PathConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.gnpy.specific.parameters.EffectiveFreqSlot;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.gnpy.specific.parameters.EffectiveFreqSlotBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.path.route.objects.ExplicitRouteObjects;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.path.route.objects.ExplicitRouteObjectsBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.path.route.objects.explicit.route.objects.RouteObjectIncludeExclude;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.path.route.objects.explicit.route.objects.RouteObjectIncludeExcludeBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.service.PathRequest;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.service.PathRequestBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.service.PathRequestKey;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.synchronization.info.Synchronization;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.synchronization.info.SynchronizationBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.synchronization.info.synchronization.Svec;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.synchronization.info.synchronization.SvecBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.AToZDirection;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.ZToADirection;
private static final double FLEX_CENTRAL_FREQ = 193.1;
//Convert THz to Hz
private static final double CONVERT_TH_HZ = 1e12;
+ private static final Comparator<RouteObjectIncludeExclude> ROUTE_OBJECT_COMPARATOR =
+ Comparator.comparing(RouteObjectIncludeExclude::getIndex);
private Map<PathRequestKey, PathRequest> pathRequest = new HashMap<>();
private List<Synchronization> synchronization = new ArrayList<>();
private Map<String, IpAddress> mapFiberIp = new HashMap<>();
private List<String> trxList = new ArrayList<>();
private Map<ElementsKey, Elements> elements = new HashMap<>();
- private Map<RouteObjectIncludeExcludeKey,RouteObjectIncludeExclude> routeObjectIncludeExcludes = new HashMap<>();
+ private List<RouteObjectIncludeExclude> routeObjectIncludeExcludes = new ArrayList<>();
private IpAddress currentNodeIpAddress = null;
+ private AToZComparator atoZComparator = new AToZComparator();
+ private ZToAComparator ztoAComparator = new ZToAComparator();
/*
* Construct the GnpyServiceImpl
// Create explicitRouteObjects
List<AToZ> listAtoZ = new ArrayList<>(atoz.nonnullAToZ().values());
if (!listAtoZ.isEmpty()) {
+ Collections.sort(listAtoZ, atoZComparator);
extractRouteObjectIcludeAtoZ(listAtoZ);
} else {
extractHardConstraints(pceHardConstraints);
}
+
+ Collections.sort(routeObjectIncludeExcludes, ROUTE_OBJECT_COMPARATOR);
ExplicitRouteObjects explicitRouteObjects = new ExplicitRouteObjectsBuilder()
.setRouteObjectIncludeExclude(routeObjectIncludeExcludes).build();
//Create Path Constraint
// Create explicitRouteObjects
@NonNull List<ZToA> listZtoA = new ArrayList<>(ztoa.nonnullZToA().values());
if (!listZtoA.isEmpty()) {
+ Collections.sort(listZtoA, ztoAComparator);
extractRouteObjectIcludeZtoA(listZtoA);
} else {
extractHardConstraints(pceHardConstraints);
}
+ Collections.sort(routeObjectIncludeExcludes, ROUTE_OBJECT_COMPARATOR);
ExplicitRouteObjects explicitRouteObjects = new ExplicitRouteObjectsBuilder()
.setRouteObjectIncludeExclude(routeObjectIncludeExcludes).build();
//Create Path Constraint
}
//Extract RouteObjectIncludeExclude list in the case of pre-computed path A-to-Z
- private void extractRouteObjectIcludeAtoZ(List<AToZ> listAtoZ) throws GnpyException {
+ private void extractRouteObjectIcludeAtoZ(Collection<AToZ> listAtoZ) throws GnpyException {
Long index = 0L;
for (AToZ entry : listAtoZ) {
index = createResource(entry.getResource().getResource(),index);
}
for (Elements element : this.elements.values()) {
- if (element.getUid().contains(ipAddress.getIpv4Address().getValue())) {
+ if (element.getUid().equals(ipAddress.getIpv4Address().getValue())) {
if ((this.currentNodeIpAddress == null) || (!this.currentNodeIpAddress.equals(ipAddress))) {
this.currentNodeIpAddress = ipAddress;
- RouteObjectIncludeExclude routeObjectIncludeExclude =
- addRouteObjectIncludeExclude(ipAddress, Uint32.valueOf(1),idx);
- routeObjectIncludeExcludes.put(routeObjectIncludeExclude.key(),routeObjectIncludeExclude);
+ RouteObjectIncludeExclude routeObjectIncludeExclude = addRouteObjectIncludeExclude(ipAddress,
+ Uint32.valueOf(1), idx);
+ routeObjectIncludeExcludes.add(routeObjectIncludeExclude);
idx += 1;
}
return idx;
}
RouteObjectIncludeExclude routeObjectIncludeExclude =
addRouteObjectIncludeExclude(fiberIp, Uint32.valueOf(1),idx);
- routeObjectIncludeExcludes.put(routeObjectIncludeExclude.key(),routeObjectIncludeExclude);
+ routeObjectIncludeExcludes.add(routeObjectIncludeExclude);
idx += 1;
}
return idx;
private RouteObjectIncludeExclude addRouteObjectIncludeExclude(IpAddress ipAddress, Uint32 teTpValue, Long index) {
TeNodeId teNodeId = new TeNodeId(ipAddress);
TeTpId teTpId = new TeTpId(teTpValue);
- NumUnnumHop numUnnumHop = new org.opendaylight.yang.gen.v1.gnpy.path.rev200202.explicit.route.hop.type.num
+ NumUnnumHop numUnnumHop = new org.opendaylight.yang.gen.v1.gnpy.path.rev200909.explicit.route.hop.type.num
.unnum.hop.NumUnnumHopBuilder()
.setNodeId(teNodeId.getIpv4Address().getValue())
.setLinkTpId(teTpId.getUint32().toString())
import java.util.ArrayList;
import java.util.List;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.pce.constraints.PceConstraints;
import org.opendaylight.yang.gen.v1.gnpy.gnpy.api.rev190103.GnpyApi;
import org.opendaylight.yang.gen.v1.gnpy.gnpy.api.rev190103.gnpy.api.TopologyFileBuilder;
import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Connections;
import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev181214.topo.Elements;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathRouteObjects;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequest;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.synchronization.info.Synchronization;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.path.properties.PathRouteObjects;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.service.PathRequest;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.synchronization.info.Synchronization;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.AToZDirection;
import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.AToZDirectionBuilder;
private GnpyResult gnpyAtoZ;
private GnpyResult gnpyZtoA;
private Uint32 requestId;
+ private BindingDOMCodecServices bindingDOMCodecServices;
- public GnpyUtilitiesImpl(NetworkTransactionService networkTransaction, PathComputationRequestInput input)
+
+ public GnpyUtilitiesImpl(NetworkTransactionService networkTransaction, PathComputationRequestInput input,
+ BindingDOMCodecServices bindingDOMCodecServices)
throws GnpyException {
this.networkTransaction = networkTransaction;
this.gnpyAtoZ = null;
this.gnpyZtoA = null;
this.requestId = Uint32.valueOf(0);
+ this.bindingDOMCodecServices = bindingDOMCodecServices;
}
public boolean verifyComputationByGnpy(AToZDirection atoz, ZToADirection ztoa, PceConstraints pceHardConstraints)
public GnpyResult gnpyResponseOneDirection(GnpyServiceImpl gnpySvc) throws GnpyException, Exception {
requestId = Uint32.valueOf((requestId.toJava()) + 1);
- List<PathRequest> pathRequestList = new ArrayList(gnpySvc.getPathRequest().values());
+ List<PathRequest> pathRequestList = new ArrayList<>(gnpySvc.getPathRequest().values());
List<Synchronization> synchronizationList = gnpySvc.getSynchronization();
// Send the computed path to GNPY tool
- List<Elements> elementsList = new ArrayList(gnpyTopo.getElements().values());
+ List<Elements> elementsList = new ArrayList<>(gnpyTopo.getElements().values());
List<Connections> connectionsList = gnpyTopo.getConnections();
String gnpyResponse = getGnpyResponse(elementsList, connectionsList, pathRequestList,
synchronizationList);
if (gnpyResponse == null) {
throw new GnpyException("In GnpyUtilities: no response from GNPy server");
}
- GnpyResult result = new GnpyResult(gnpyResponse, gnpyTopo);
+ GnpyResult result = new GnpyResult(gnpyResponse, gnpyTopo, bindingDOMCodecServices);
result.analyzeResult();
return result;
}
.build();
InstanceIdentifier<GnpyApi> idGnpyApi = InstanceIdentifier.builder(GnpyApi.class).build();
String gnpyJson;
- ServiceDataStoreOperationsImpl sd = new ServiceDataStoreOperationsImpl(networkTransaction);
+ ServiceDataStoreOperationsImpl sd = new ServiceDataStoreOperationsImpl(bindingDOMCodecServices);
gnpyJson = sd.createJsonStringFromDataObject(idGnpyApi, gnpyApi);
LOG.debug("GNPy Id: {} / json created : {}", idGnpyApi, gnpyJson);
ConnectToGnpyServer connect = new ConnectToGnpyServer();
package org.opendaylight.transportpce.pce.gnpy;
-import org.opendaylight.transportpce.common.DataStoreContext;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yang.gen.v1.gnpy.gnpy.api.rev190103.GnpyApi;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
public interface ServiceDataStoreOperations {
- void createXMLFromDevice(DataStoreContext dataStoreContextUtil, OrgOpenroadmDevice device, String output)
- throws GnpyException;
-
- String createJsonStringFromDataObject(InstanceIdentifier<?> id, DataObject object) throws GnpyException, Exception;
+ String createJsonStringFromDataObject(InstanceIdentifier<GnpyApi> id, GnpyApi object) throws GnpyException;
void writeStringFile(String jsonString, String fileName) throws GnpyException;
}
package org.opendaylight.transportpce.pce.gnpy;
import com.google.common.collect.FluentIterable;
-import java.io.BufferedWriter;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.stream.JsonWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.binding.runtime.spi.BindingRuntimeHelpers;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
-import org.opendaylight.transportpce.common.DataStoreContext;
-import org.opendaylight.transportpce.common.converter.XMLDataObjectConverter;
-import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.Result;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yang.gen.v1.gnpy.gnpy.api.rev190103.GnpyApi;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
+import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory;
import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
- value = "DLS_DEAD_LOCAL_STORE",
- justification = "FIXME aluminium migration pending: need to convert GNPy to BindingDOMCodecServices")
public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperations {
- private static final Logger LOG = LoggerFactory.getLogger(ServiceDataStoreOperationsImpl.class);
+ private static final JsonParser PARSER = new JsonParser();
+ private BindingDOMCodecServices bindingDOMCodecServices;
- public ServiceDataStoreOperationsImpl(NetworkTransactionService networkTransactionService) {
+ public ServiceDataStoreOperationsImpl(BindingDOMCodecServices bindingDOMCodecServices) throws GnpyException {
+ this.bindingDOMCodecServices = bindingDOMCodecServices;
}
@Override
- public void createXMLFromDevice(DataStoreContext dataStoreContextUtil, OrgOpenroadmDevice device, String output)
+ public String createJsonStringFromDataObject(final InstanceIdentifier<GnpyApi> id, GnpyApi object)
throws GnpyException {
-
- if (device != null) {
- Optional<NormalizedNode<?, ?>> transformIntoNormalizedNode = null;
- XMLDataObjectConverter cwDsU = XMLDataObjectConverter.createWithDataStoreUtil(dataStoreContextUtil);
- transformIntoNormalizedNode = cwDsU.toNormalizedNodes(device, OrgOpenroadmDevice.class);
- if (!transformIntoNormalizedNode.isPresent()) {
- throw new GnpyException(String.format(
- "In ServiceDataStoreOperationsImpl: Cannot transform the device %s into normalized nodes",
- device.toString()));
- }
- Writer writerFromDataObject =
- cwDsU.writerFromDataObject(device, OrgOpenroadmDevice.class,cwDsU.dataContainer());
- try (BufferedWriter writer = new BufferedWriter(new FileWriter(output,StandardCharsets.UTF_8))) {
- writer.write(writerFromDataObject.toString());
- } catch (IOException e) {
- throw new GnpyException(
- String.format("In ServiceDataStoreOperationsImpl : Bufferwriter error %s",e));
- }
- LOG.debug("GNPy: device xml : {}", writerFromDataObject);
- }
- }
-
- @Override
- public String createJsonStringFromDataObject(final InstanceIdentifier<?> id, DataObject object)
- throws GnpyException, Exception {
-
final SchemaPath scPath = SchemaPath.create(FluentIterable
.from(id.getPathArguments())
.transform(input -> BindingReflections.findQName(input.getType())), true);
-
- // Prepare the variables
- // Create the schema context
- Collection<? extends YangModuleInfo> moduleInfos = Collections.singleton(BindingReflections
- .getModuleInfo(Result.class));
- @NonNull
- EffectiveModelContext schemaContext = BindingRuntimeHelpers.createEffectiveModel(moduleInfos);
-
/*
* This function needs : - context - scPath.getParent() -
* scPath.getLastComponent().getNamespace(), -
* JsonWriterFactory.createJsonWriter(writer)
*/
- final Writer writer = new StringWriter();
- try (NormalizedNodeStreamWriter domWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
- JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.createSimple(schemaContext),
- scPath.getParent(), scPath.getLastComponent().getNamespace(),
- JsonWriterFactory.createJsonWriter(writer, 2));) {
- // The write part
- //FIXME
- //codecRegistry.getSerializer(id.getTargetType()).serialize(object, codecRegistry.newWriter(id, domWriter));
+ JSONCodecFactory codecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02
+ .getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext());
+ try (Writer writer = new StringWriter();
+ JsonWriter jsonWriter = JsonWriterFactory.createJsonWriter(writer, 2);) {
+ NormalizedNodeStreamWriter jsonStreamWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
+ codecFactory, scPath.getParent(), scPath.getLastComponent().getNamespace(), jsonWriter);
+ try (NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(jsonStreamWriter)) {
+ nodeWriter.write(bindingDOMCodecServices.toNormalizedNode(id, object).getValue());
+ nodeWriter.flush();
+ }
+ JsonObject asJsonObject = PARSER.parse(writer.toString()).getAsJsonObject();
+ return new Gson().toJson(asJsonObject);
} catch (IOException e) {
- throw new GnpyException("In ServiceDataStoreOperationsImpl: exception during json file creation",e);
+ throw new GnpyException("Cannot convert data to Json string", e);
}
- return writer.toString();
}
// Write the json as a string in a file
--- /dev/null
+/*
+ * Copyright © 2020 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.pce.gnpy.utils;
+
+import java.io.Serializable;
+import java.util.Comparator;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.atoz.direction.AToZ;
+
+@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ value = "SE_NO_SERIALVERSIONID",
+ justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
+public class AToZComparator implements Comparator<AToZ>, Serializable {
+
+ @Override
+ public int compare(AToZ o1, AToZ o2) {
+ if (o1 == null && o2 == null) {
+ return 0;
+ } else if (o1 == null) {
+ return 1;
+ } else if (o2 == null) {
+ return -1;
+ } else if (o1.getId() == null && o2.getId() == null) {
+ return 0;
+ } else if (o1.getId() == null) {
+ return 1;
+ } else if (o2.getId() == null) {
+ return -1;
+ } else {
+ return Integer.valueOf(o1.getId()).compareTo(Integer.valueOf(o2.getId()));
+ }
+ }
+
+}
--- /dev/null
+/*
+ * Copyright © 2020 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.pce.gnpy.utils;
+
+import java.io.Serializable;
+import java.util.Comparator;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.ztoa.direction.ZToA;
+
+@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+ value = "SE_NO_SERIALVERSIONID",
+ justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
+public class ZToAComparator implements Comparator<ZToA>, Serializable {
+
+ @Override
+ public int compare(ZToA o1, ZToA o2) {
+ if (o1 == null && o2 == null) {
+ return 0;
+ } else if (o1 == null) {
+ return 1;
+ } else if (o2 == null) {
+ return -1;
+ } else if (o1.getId() == null && o2.getId() == null) {
+ return 0;
+ } else if (o1.getId() == null) {
+ return 1;
+ } else if (o2.getId() == null) {
+ return -1;
+ } else {
+ return Integer.valueOf(o1.getId()).compareTo(Integer.valueOf(o2.getId()));
+ }
+ }
+
+}
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
}
public static String getSupLink(Link link) {
- SupportingLink first = link.nonnullSupportingLink().values().iterator().next();
- if (first != null && first.getLinkRef() != null) {
- return first.getLinkRef().toString();
- } else {
+ Iterator<SupportingLink> supportingLinkIterator = link.nonnullSupportingLink().values().iterator();
+ if (!supportingLinkIterator.hasNext()) {
+ return "";
+ }
+ SupportingLink first = supportingLinkIterator.next();
+ if (first == null || first.getLinkRef() == null) {
return "";
}
+ return first.getLinkRef().toString();
}
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNull;
//Compute the OSNR of a span
public double calcSpanOSNR() {
- try {
- double pout; //power on the output of the previous ROADM (dBm)
- pout = retrievePower(this.omsAttributesSpan.nonnullLinkConcatenation()
- .values().iterator().next().getFiberType());
- double spanLoss = this.omsAttributesSpan.getSpanlossCurrent().getValue().doubleValue(); // span loss (dB)
- double pin = pout - spanLoss; //power on the input of the current ROADM (dBm)
- double spanOsnrDb;
- spanOsnrDb = NOISE_MASK_A * pin + NOISE_MASK_B;
- if (spanOsnrDb > UPPER_BOUND_OSNR) {
- spanOsnrDb = UPPER_BOUND_OSNR;
- } else if (spanOsnrDb < LOWER_BOUND_OSNR) {
- spanOsnrDb = LOWER_BOUND_OSNR;
- }
- return spanOsnrDb;
- } catch (NullPointerException e) {
+ if (this.omsAttributesSpan == null) {
+ return 0L;
+ }
+ Collection<LinkConcatenation> linkConcatenationList =
+ this.omsAttributesSpan.nonnullLinkConcatenation().values();
+ if (linkConcatenationList == null) {
LOG.error("in PceLink : Null field in the OmsAttrubtesSpan");
return 0L;
}
+ Iterator<LinkConcatenation> linkConcatenationiterator = linkConcatenationList.iterator();
+ if (!linkConcatenationiterator.hasNext()) {
+ return 0L;
+ }
+ // power on the output of the previous ROADM (dBm)
+ double pout = retrievePower(linkConcatenationiterator.next().getFiberType());
+ // span loss (dB)
+ double spanLoss = this.omsAttributesSpan.getSpanlossCurrent().getValue().doubleValue();
+ double pin = pout - spanLoss; // power on the input of the current ROADM (dBm)
+ double spanOsnrDb = NOISE_MASK_A * pin + NOISE_MASK_B;
+ if (spanOsnrDb > UPPER_BOUND_OSNR) {
+ spanOsnrDb = UPPER_BOUND_OSNR;
+ } else if (spanOsnrDb < LOWER_BOUND_OSNR) {
+ spanOsnrDb = LOWER_BOUND_OSNR;
+ }
+ return spanOsnrDb;
}
private double retrievePower(FiberType fiberType) {
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.pce.PceComplianceCheck;
import org.opendaylight.transportpce.pce.PceComplianceCheckResult;
import org.opendaylight.transportpce.pce.PceSendingPceRPCs;
import org.opendaylight.transportpce.pce.gnpy.GnpyResult;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.Response;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.Response;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.CancelResourceReserveInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.CancelResourceReserveOutput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.CancelResourceReserveOutputBuilder;
private final NotificationPublishService notificationPublishService;
private NetworkTransactionService networkTransactionService;
private final ListeningExecutorService executor;
- ServicePathRpcResult notification = null;
+ private ServicePathRpcResult notification = null;
+ private BindingDOMCodecServices bindingDOMCodecServices;
public PathComputationServiceImpl(NetworkTransactionService networkTransactionService,
- NotificationPublishService notificationPublishService) {
+ NotificationPublishService notificationPublishService,
+ BindingDOMCodecServices bindingDOMCodecServices) {
this.notificationPublishService = notificationPublishService;
this.networkTransactionService = networkTransactionService;
this.executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(5));
+ this.bindingDOMCodecServices = bindingDOMCodecServices;
}
public void init() {
RpcStatusEx.Pending, "Service compliant, submitting pathComputation Request ...", null);
String message = "";
String responseCode = "";
- PceSendingPceRPCs sendingPCE = new PceSendingPceRPCs(input, networkTransactionService);
+ PceSendingPceRPCs sendingPCE = new PceSendingPceRPCs(input, networkTransactionService,
+ bindingDOMCodecServices);
sendingPCE.pathComputation();
message = sendingPCE.getMessage();
responseCode = sendingPCE.getResponseCode();
ResponseType respType = null;
boolean feasible = true;
if (responseGnpy != null) {
- if (responseGnpy.getResponseType() instanceof org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result
+ if (responseGnpy.getResponseType() instanceof org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result
.response.response.type.NoPathCase) {
LOG.info("GNPy : path is not feasible");
- org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.NoPathCase
- noPathGnpy = (org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type
+ org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.NoPathCase
+ noPathGnpy = (org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type
.NoPathCase) responseGnpy.getResponseType();
NoPathCase noPathCase = new NoPathCaseBuilder().setNoPath(noPathGnpy.getNoPath()).build();
respType = noPathCase;
feasible = false;
- } else if (responseGnpy.getResponseType() instanceof org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result
+ } else if (responseGnpy.getResponseType() instanceof org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result
.response.response.type.PathCase) {
LOG.info("GNPy : path is feasible");
- org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.PathCase pathCase =
- (org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.PathCase)
+ org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.PathCase pathCase =
+ (org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.PathCase)
responseGnpy.getResponseType();
- List<org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties
- .PathMetric> pathMetricList = new ArrayList(pathCase.getPathProperties().getPathMetric().values());
+ List<org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.path.properties
+ .PathMetric> pathMetricList =
+ new ArrayList<>(pathCase.getPathProperties().getPathMetric().values());
List<PathMetric> gnpyPathMetricList = new ArrayList<>();
- for (org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetric
+ for (org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.path.properties.PathMetric
pathMetricGnpy : pathMetricList) {
PathMetric pathMetric = new PathMetricBuilder().setMetricType(pathMetricGnpy.getMetricType())
.setAccumulativeValue(pathMetricGnpy.getAccumulativeValue()).build();
<reference id="networkTransactionImpl" interface="org.opendaylight.transportpce.common.network.NetworkTransactionService" />
+ <reference id="bindingDOMCodecServices" interface="org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices" />
+
+
<reference id="dataBroker"
interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
init-method="init" destroy-method="close">
<argument ref="networkTransactionImpl"/>
<argument ref="notificationPublishService" />
+ <argument ref="bindingDOMCodecServices" />
</bean>
<bean id="provider"
networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()));
PceTestUtils.writeNetworkInDataStore(this.getDataBroker());
pceSendingPceRPCs =
- new PceSendingPceRPCs(PceTestData.getPCE_test1_request_54(), networkTransaction);
+ new PceSendingPceRPCs(PceTestData.getPCE_test1_request_54(), networkTransaction, null);
}
@Test
jerseyServer.setUp();
pceSendingPceRPCs =
new PceSendingPceRPCs(PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"),
- networkTransaction);
+ networkTransaction, null);
pceSendingPceRPCs.pathComputation();
ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer();
import javax.ws.rs.core.Response;
import org.opendaylight.transportpce.pce.utils.JsonUtil;
import org.opendaylight.yang.gen.v1.gnpy.gnpy.api.rev190103.GnpyApi;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequest;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.service.PathRequest;
import org.opendaylight.yangtools.yang.common.QName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Test
public void askNewPathFromGnpyNullResultTest() throws Exception {
gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction,
- PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"));
+ PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"), null);
assertNull("No hard constraints should be available", gnpyUtilitiesImpl.askNewPathFromGnpy(null));
}
@Test
public void askNewPathFromGnpyTest() throws Exception {
gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction,
- PceTestData.getGnpyPCERequest("XPONDER-3", "XPONDER-4"));
+ PceTestData.getGnpyPCERequest("XPONDER-3", "XPONDER-4"), null);
PceConstraintsCalc constraints = new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(),
networkTransaction);
PceConstraints pceHardConstraints = constraints.getPceHardConstraints();
ZToADirectionBuilder ztoADirectionBldr = buildZtoA();
gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction,
- PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"));
+ PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2"), null);
PceConstraintsCalc constraints = new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(),
networkTransaction);
PceConstraints pceHardConstraints = constraints.getPceHardConstraints();
OrgOpenroadmDevice orgOpenroadmDevice = Mockito.mock(OrgOpenroadmDevice.class);
@Before
- public void setUp() {
- serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(networkTransaction);
- }
-
- // TODO: fix augmentation issue
- @Test
- public void createXMLFromDeviceTest() throws GnpyException {
- serviceDataStoreOperations.createXMLFromDevice(this.getDataStoreContextUtil(),
- orgOpenroadmDevice, "some-output");
+ public void setUp() throws GnpyException {
+ serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(null);
}
@Test
notificationPublishService = new NotificationPublishServiceMock();
requestProcessor = Mockito.mock(RequestProcessor.class);
networkTransaction = new NetworkTransactionImpl(requestProcessor);
- pathComputationService = new PathComputationServiceImpl(networkTransaction, notificationPublishService);
+ pathComputationService = new PathComputationServiceImpl(networkTransaction, notificationPublishService,
+ null);
pceProvider = new PceProvider(rpcService, pathComputationService);
}
TransactionUtils.getNetworkForSpanLoss());
notificationPublishService = new NotificationPublishServiceMock();
networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker()));
- pathComputationService = new PathComputationServiceImpl(networkTransaction, notificationPublishService);
+ pathComputationService = new PathComputationServiceImpl(networkTransaction, notificationPublishService,
+ null);
pceServiceRPC = new PceServiceRPCImpl(pathComputationService);
}
import org.opendaylight.transportpce.pce.utils.PceTestUtils;
import org.opendaylight.transportpce.pce.utils.TransactionUtils;
import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.PathBandwidth;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.PathPropertiesBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetric;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.generic.path.properties.path.properties.PathMetricBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.no.path.info.NoPathBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.Response;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.ResponseBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.NoPathCaseBuilder;
-import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.result.response.response.type.PathCaseBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.PathBandwidth;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.PathPropertiesBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.path.properties.PathMetric;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.generic.path.properties.path.properties.PathMetricBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.no.path.info.NoPathBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.Response;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.ResponseBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.NoPathCaseBuilder;
+import org.opendaylight.yang.gen.v1.gnpy.path.rev200909.result.response.response.type.PathCaseBuilder;
@Ignore
gnpyResult = Mockito.mock(GnpyResult.class);
pathComputationServiceImpl = new PathComputationServiceImpl(
networkTransactionService,
- this.getNotificationPublishService());
+ this.getNotificationPublishService(), null);
pathComputationServiceImpl.init();
}
GnpyResult gnpyResult2 =
new GnpyResult("A-to-Z",
new GnpyTopoImpl(new NetworkTransactionImpl(
- new RequestProcessor(dataBroker))));
+ new RequestProcessor(dataBroker))), null);
pathComputationServiceImpl.generateGnpyResponse(gnpyResult2.getResponse(), "A-to-Z");
}