+ if (input.getServiceAEnd().getServiceFormat() == null || input.getServiceZEnd().getServiceFormat() == null
+ || input.getServiceAEnd().getServiceRate() == null) {
+ LOG.error("Service Format and Service Rate are required for a path calculation");
+ return false;
+ }
+ serviceFormatA = input.getServiceAEnd().getServiceFormat().getName();
+ serviceFormatZ = input.getServiceZEnd().getServiceFormat().getName();
+ serviceRate = input.getServiceAEnd().getServiceRate().toJava();
+
+ LOG.info("parseInput: A and Z :[{}] and [{}]", anodeId, znodeId);
+ if (!(serviceFormatA.equals(serviceFormatZ))) {
+ LOG.info("parseInput: different service format for A and Z not handled, will use service format from Aend");
+ } else if (serviceRate == 100L) {
+ switch (serviceFormatA) {
+ case "Ethernet":
+ case "OC":
+ serviceType = StringConstants.SERVICE_TYPE_100GE;
+ break;
+ case "OTU":
+ serviceType = StringConstants.SERVICE_TYPE_OTU4;
+ break;
+ case "ODU":
+ serviceType = StringConstants.SERVICE_TYPE_ODU4;
+ break;
+ default:
+ LOG.debug("parseInput: unsupported service type: Format {} Rate 100L", serviceFormatA);
+ break;
+ }
+ //switch(serviceRate) may seem a better option at first glance.
+ //But switching on Long or long is not directly possible in Java.
+ //And casting to int bumps the limit here.
+ //Passing by ENUM or String are possible alternatives.
+ //Maybe HashMap and similar options should also be considered here.
+ } else if ("Ethernet".equals(serviceFormatA)) {
+ //only rate 100L is currently supported except in Ethernet
+ if (serviceRate == 400L) {
+ serviceType = StringConstants.SERVICE_TYPE_400GE;
+ } else if (serviceRate == 10L) {
+ serviceType = StringConstants.SERVICE_TYPE_10GE;
+ } else if (serviceRate == 1L) {
+ serviceType = StringConstants.SERVICE_TYPE_1GE;
+ } else {
+ LOG.debug("parseInput: unsupported service type: Format Ethernet Rate {}", serviceRate);
+ }
+ } else {
+ LOG.debug("parseInput: unsupported service type: Format {} Rate {}",
+ serviceFormatA, serviceRate);
+ }
+ if (StringConstants.SERVICE_TYPE_ODU4.equals(serviceType)
+ || StringConstants.SERVICE_TYPE_10GE.equals(serviceType)
+ || StringConstants.SERVICE_TYPE_1GE.equals(serviceType)) {
+ anodeId = input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName();
+ znodeId = input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName();
+ } else {
+ anodeId = input.getServiceAEnd().getNodeId();
+ znodeId = input.getServiceZEnd().getNodeId();
+ }
+
+ returnStructure.setRate(input.getServiceAEnd().getServiceRate().toJava());
+ returnStructure.setServiceFormat(input.getServiceAEnd().getServiceFormat());