L0CP Infra Connection Creation (ODU4)

Overview

Here described is an example of Creating ODU4 Infra Connection (L0CP).

Infra Creation example (ODU4 - L0CP)

In the figure shown below,there are two PSS-32 NEs used with CP enabled. The packs used are - AHPHG (LD), CWR and 112SCX10 (Transponder).

For this example,it is assumed that, required OTS between LD packs, OSs already created and OMS links are assinged to ASON for TE Links creation on NEs.

This examples shows creating an ODU4 infra connection (with ASONRouted enabled) between L0CP-NODE-A/112SCX10-9-10-L1-1 and L0CP-NODE-B/112SCX10-9-10-L1-1. using REST client

Infra Connection Creation

The input provided to REST client is in json format by means of a json file - InfrCreateInfo.json.

Minimum information required to create connection would be specified in this file. For example A and Z node names, Port Names, Service connection name, Customer name, Template Name and Trail rate etc.

The Best practice template used to create Infra is "/Best Practices/Infrastructure Trail/Unprotected/ODUk"

In order to create CP connection, ASONRouted must be set to true

InfraCreateInfo.json content - :


{
	"connectionName":"L0-CP-INFRA-CONN",
	"customerName":"",
	"fromNodeName":"L0CP-NODE-A",
	"fromPortName":"112SCX10-9-10-L1-1",
	"fromPortType":"Terminated",
	"toNodeName":"L0CP-NODE-B",
	"toPortName":"112SCX10-9-10-L1-1",
	"toPortType":"Terminated",
	"toPortPluggableModule":"",
	"templatePath":"/Best Practices/Infrastructure Trail/Unprotected",
	"templateName":"ODUk",
	"serviceRate":"100GbE",
	"trailRate" : "ODU4",
	"container":"",
	"protectionType":"",
	"connectionType":"",
	"asonRouted" : "true",
	"asonRestoration" : "SBR",
	"mrnTunnel" : "false"
}

Creating Request

Code snippet for creating input request.

createInfraConnection method creates connection creation request object - OtnConnectionRequest to be sent to OMS


public class ConnectionService extends Service{
	public void createInfraConnection (OMSRestTemplate restTemplate, String jsonFilePath) {
	/**connection creation request to be sent*/
	OtnConnectionRequest connectionrequest = new OtnConnectionRequest();

	/** Convert JSON string from input file to serviceCreateInfo Object **/
	CreateConnectionInfo connCrInfo = super.readJSON(new File (jsonFilePath), CreateConnectionInfo.class);

	/**Retrieve service template from template path and name*/
	JsonNode connTemplate = getTemplateByPathAndName(restTemplate, connCrInfo.getTemplatePath(), connCrInfo.getTemplateName());
	System.out.println("connTemplate - " + connTemplate);

	/***fetch all the parameters list from template*/
	Map <String, JsonNode> paramsList = fetchParamListFromTemplateByGroupName (connTemplate);
	System.out.println("paramsList - " + paramsList );

	/**populate ASON, protection, assurance, odukparams and connections parameters parameters in create Connection request*/
	populateASONParams (connectionrequest, paramsList.get("ASONParams"));
	populateProtectionParams (connectionrequest, paramsList.get("protectionParams"));
	populateAssuranceParams (connectionrequest, paramsList.get("assuranceParams"));
	populateOdukParams (connectionrequest, paramsList.get("odukParams"));
	populateConnectionParams (connectionrequest, paramsList.get("connectionParams"));

	/**in the case of trail/infra structure set trail rate and servicrate can be anything example - 100Gbe*/
	connectionrequest.setTrailrate(connCrInfo.getTrailRate());
	connectionrequest.setServicerate(connCrInfo.getServiceRate());

	/**Retrieve a node details*/
	String queryString = "select(guiLabel,id,productName,className)&productName!='External%20Network'&guiLabel=" + connCrInfo.getFromNodeName();
	JsonNode aNodeDetails = ServiceUtil.retreiveNodeDetails(restTemplate, queryString);
	connectionrequest.setFromne1(aNodeDetails.get(0).get("guiLabel").asText()); 

	/**Retrieve z node details*/
	queryString = "select(guiLabel,id,productName,className)&productName!='External%20Network'&guiLabel=" + connCrInfo.getToNodeName();
	JsonNode zNodeDetails = ServiceUtil.retreiveNodeDetails(restTemplate, queryString);
	connectionrequest.setTone1(zNodeDetails.get(0).get("guiLabel").asText()); 

	/**Retrieve a port details*/
	//"nodeName=PSS32_1&popupFormFieldId=fromport1&showallports=no&rate=10GbE&nodeId=94&objectType=Ethernet"
	queryString = "showallports=no&rate=" + connectionrequest.getTrailrate() + "&nodeId=" + aNodeDetails.get(0).get("id").asText() + "&objectType=" + connectionrequest.getServiceratetype();
	JsonNode aPortDetails = ServiceUtil.retreivePortDetailsForService (restTemplate, queryString, connCrInfo.getFromPortName());
	populateFromPortDetails (connectionrequest, aPortDetails);

	/**Retrieve z port details*/
	queryString = "showallports=no&rate=" + connectionrequest.getTrailrate()+ "&nodeId=" + zNodeDetails.get(0).get("id").asText() + "&objectType=" + connectionrequest.getServiceratetype();
	JsonNode zPortDetails = ServiceUtil.retreivePortDetailsForService (restTemplate, queryString, connCrInfo.getToPortName());
	populateToPortDetails (connectionrequest, zPortDetails);

	/**set connection name etc from input Json object*/
	connectionrequest.setConnectionname(connCrInfo.getConnectionName());
	connectionrequest.setCustomerName(connCrInfo.getCustomerName());
	//connectionrequest.setToPort1XFP(connCrInfo.getToPortPluggableModule());

	/**set transmissionmode as txmode8qamsingle and may not be applicable for Infra*/
	connectionrequest.setTransmissionMode("txmode8qamsingle"); 

	/**there are many parameters in the connection...set with default values...*/
	setDefaultParams(connectionrequest);

	try {
		System.out.println ("Json String of connection request - " + mapper.writeValueAsString(connectionrequest));
	} catch (JsonProcessingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	/**
	* retrieve transmission parameters and populate in Request Object
	* */
	retrieveAndPopulateTransmissionParams (restTemplate, connectionrequest);

	/**set ASON Route and MRN tunnel*/
	connectionrequest.setASONRouted(connCrInfo.getAsonRouted());
	connectionrequest.setMRNTunnel(connCrInfo.getMrnTunnel());

	/**set asonconnectiontype*/
	if (connectionrequest.getLopc().equalsIgnoreCase("true") && connectionrequest.getMRNTunnel().equalsIgnoreCase("true")) {
		connectionrequest.setASONConnectionType("UntermTunnel");
	} else if (connectionrequest.getLopc().equalsIgnoreCase("false") && connectionrequest.getMRNTunnel().equalsIgnoreCase("true"))
		connectionrequest.setASONConnectionType("TermTunnel");
	else
		connectionrequest.setASONConnectionType("noTunnel");

	/**set container rate as trail rate...*/
	connectionrequest.setContainerrate(connectionrequest.getTrailrate());
	System.out.println( "connectionrequest - " + connectionrequest );
	Random r = new Random ();
	Long requestId = (long) 989898;

	/** Random request id*/
	connectionrequest.setRequestId(requestId);

    /**set event channel to receive this request specific events*/
	connectionrequest.setEventChannel("/oms1350/events/otn/prov/jobEvent/" + requestId);

	try {
		System.out.println ("Json String of connection request - " + mapper.writeValueAsString(connectionrequest));
	} catch (JsonProcessingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	String connCreatUrl = restTemplate.getUrlPrefix() + "/data/otn/Connection";
	JsonNode resp = restTemplate.postForObject(connCreatUrl, connectionrequest, JsonNode.class);
	System.out.println( "resp - " + resp);
}

.....

}

Converting JSON Input file to JSON Object

Convert input JSON file serviceCreateInfo.json into serviceCreateInfo object.


/** Convert JSON string from input file to serviceCreateInfo Object **/
CreateConnectionInfo connCrInfo = super.readJSON(new File (jsonFilePath), CreateConnectionInfo.class);

readJSON() method defined in super class Service uses jackson.databind.ObjectMapper to conver the JSON string into an object.

Retreiving Service Template using template Path and Name

This part of code retrieves 10GeB Ethernet Template and builds map of "groupName" to params list for later usage. Please check below for the Template request and response sample data.

Below are the REST calls used to retrieve required template.

1. /data/otn/connectionTemplates/folders to retrieve the template folders

2. /data/otn/connectionTemplates/templates/{templateId} to retrieve template details


/**Retrieve service template from template path and name*/
 JsonNode connTemplate = getTemplateByPathAndName(restTemplate, connCrInfo.getTemplatePath(), connCrInfo.getTemplateName());

 /***fetch all the parameters list from template*/
 Map <String, JsonNode> paramsList = fetchParamListFromTemplateByGroupName (connTemplate);
 
/**Retrieves Template By path and Name*/
public JsonNode getTemplateByPathAndName (OMSRestTemplate restTemplate, String templatePath, String name) {

/**Rest URL to retrieve all the template folders*/
 String getTemplateFolders = restTemplate.getUrlPrefix() + "/data/otn/connectionTemplates/folders";

/**Retrieve all the folders*/
 String templatefolders = restTemplate.getForObject(getTemplateFolders, String.class);
 
/**convert received JSON string to JsonNode*/
JsonNode jsonNode = createJsonNodeFromString(templatefolders);

/**iterate over all the folders and find the matching folder by templatePath and name*/
Iterator <JsonNode> it = jsonNode.iterator();
JsonNode folderNode = null;
while (it.hasNext()) {
	JsonNode node = it.next();
	String path = node.get("path").asText();
	String tName = node.get("name").asText();
	if ( path.equals(templatePath) && tName.equals(name) ) {
		/**required template folder is matched*/
		folderNode = node;
		break;
	}
}

JsonNode templateDetailNode = null;

/**got required template folder. Now retrieve complete template details using templateid */
if (folderNode != null) {
	/**Rest URL to retrieve required template details*/
	String getTemplateDetailUrl = restTemplate.getUrlPrefix() + "/data/otn/connectionTemplates/templates/" + folderNode.get("templateId");

	/**Retrieve template details*/
	String templateDetail = restTemplate.getForObject(getTemplateDetailUrl, String.class);

	/**convert json response string to JsonNode object*/
	templateDetailNode = super.createJsonNodeFromString(templateDetail);
}

return templateDetailNode;

}

/***/
public Map <String, JsonNode> fetchParamListFromTemplateByGroupName (JsonNode templateNode) {
	Map <String, JsonNode> groupNameToParamList = new HashMap <String, JsonNode> ();
	JsonNode groups = templateNode.get("data").get("groups");
	Iterator <JsonNode> grpIter = groups.iterator();

	while ( grpIter.hasNext() ) {
		JsonNode grpItem = grpIter.next();
		if ( grpItem.get("groupname").asText().equalsIgnoreCase("ASONParams") ) {
			groupNameToParamList.put("ASONParams", grpItem.get("paramList"));
		} else if ( grpItem.get("groupname").asText().equalsIgnoreCase("protectionParams") ) {
			groupNameToParamList.put("protectionParams", grpItem.get("paramList"));
		} else if ( grpItem.get("groupname").asText().equalsIgnoreCase("assuranceParams") ) {
			groupNameToParamList.put("assuranceParams", grpItem.get("paramList"));
		} else if ( grpItem.get("groupname").asText().equalsIgnoreCase("odukParams") ) {
			groupNameToParamList.put("odukParams", grpItem.get("paramList"));
		}else if ( grpItem.get("groupname").asText().equalsIgnoreCase("connectionParams") ) {
			groupNameToParamList.put("connectionParams", grpItem.get("paramList"));
		}
	}
	JsonNode info = templateNode.get("info");
	groupNameToParamList.put("info", info);

	return groupNameToParamList;
}

Populating request object with ASON, protection, assurance, odukparams and connections parameters from template


/**populate ASON, protection, assurance, odukparams and connections parameters parameters in create Connection request*/
populateASONParams (connectionrequest, paramsList.get("ASONParams"));
populateProtectionParams (connectionrequest, paramsList.get("protectionParams"));
populateAssuranceParams (connectionrequest, paramsList.get("assuranceParams"));
populateOdukParams (connectionrequest, paramsList.get("odukParams"));
populateConnectionParams (connectionrequest, paramsList.get("connectionParams"));

readJSON() method defined in super class Service uses jackson.databind.ObjectMapper to conver the JSON string into an object.

As of now separate methods are written to populate each group of parameters. Need to check if it is possible to directly feed the JSON string to request object..


/***
*
* "serviceratetype": "Ethernet",
"servicerate": "10GbE",
"signalType": "10GbE",
"connshape": "8",
"fecMode": "N/A",
"wavekeyConfig": "N/A",
*
*
* */
private void populateConnectionParams(OtnConnectionRequest connectionrequest, JsonNode connectionParams) {
	Iterator<JsonNode> it = connectionParams.iterator();
	while (it.hasNext()) {
		JsonNode n = it.next();
		if ( n.get("name").asText().equals("serviceratetype") ) {
			connectionrequest.setServiceratetype(n.get("value").asText());
		} else if ( n.get("name").asText().equals("servicerate") ) {
			connectionrequest.setServicerate(n.get("value").asText());
		} else if ( n.get("name").asText().equals("signalType") ) {
			connectionrequest.setSignalType(n.get("value").asText()); 
		} else if ( n.get("name").asText().equals("connshape") ) {
			connectionrequest.setConnshape(n.get("value").asText()); 
		} else if ( n.get("name").asText().equals("fecMode") ) {
			connectionrequest.setFec(n.get("value").asText()); 
		} else if ( n.get("name").asText().equals("wavekeyConfig") ) {
			connectionrequest.setWavekeyConfig(n.get("value").asText()); 
		} 
	}
}


/**
*
* "containerrate": "ODU2e",
"LOSPropagation": "BothAZ",
"xmnActualBitRate": "Default",
*
* */
 private void populateOdukParams(OtnConnectionRequest connectionrequest, JsonNode odukPrams) {
	Iterator<JsonNode> it = odukPrams.iterator();
	while (it.hasNext()) {
		JsonNode n = it.next();
		if ( n.get("name").asText().equals("containerrate") ) {
			connectionrequest.setContainerrate(n.get("value").asText());
		} else if ( n.get("name").asText().equals("LOSPropagation") ) {
			connectionrequest.setLOSPropagation(n.get("value").asText());
		} else if ( n.get("name").asText().equals("xmnActualBitRate") ) {
			connectionrequest.setXmnActualBitRate(n.get("value").asText()); 
		} 
	}
}


/**
*
* "alarmEnable": "NOTSET",
"autoInService": "Disable",
"AutoInServiceTimer": "Default",
"pm15min": "false",
"pm24hr": "true",
 * */
private void populateAssuranceParams(OtnConnectionRequest connectionrequest, JsonNode assuranceParams) {
	Iterator<JsonNode> it = assuranceParams.iterator();
	while (it.hasNext()) {
		JsonNode n = it.next();
		if ( n.get("name").asText().equals("alarmEnable") ) {
			connectionrequest.setAlarmEnable(n.get("value").asText());
		} else if ( n.get("name").asText().equals("autoInService") ) {
			//connectionrequest.setAutoInService(n.get("value").asText());
			connectionrequest.setAutoInService("Disable");
		} else if ( n.get("name").asText().equals("AutoInServiceTimer") ) {
			//connectionrequest.setAutoInServiceTimer(n.get("value").asText()); 
		} else if ( n.get("name").asText().equals("pm15min") ) {
			connectionrequest.setPm15min(n.get("value").asText()); 
		} else if ( n.get("name").asText().equals("pm24hr") ) {
			connectionrequest.setPm24hr(n.get("value").asText()); 
		}
	}
}


/**
* populate protectionParams in connectionrequest
"protectiontype": "9",
"networkProtectionMode": "0",
"clientprotectiontype": "0",
"switchType": "0",
"revertive": "2",
"reversionTimer": "N/A", 
*
* */
private void populateProtectionParams(OtnConnectionRequest connectionrequest, JsonNode protectionParams) {
	Iterator<JsonNode> it = protectionParams.iterator();
	while (it.hasNext()) {
		JsonNode n = it.next();
		if ( n.get("name").asText().equals("protectiontype") ) {
			connectionrequest.setProtectiontype(n.get("value").asText());
		}/* else if ( n.get("name").asText().equals("networkProtectionMode") ) {
			connectionrequest.setNwkprotectedMethod(n.get("value").asText());
		}*/ else if ( n.get("name").asText().equals("clientprotectiontype") ) {
			connectionrequest.setClientprotectiontype(n.get("value").asText());
		} /*else if ( n.get("name").asText().equals("switchType") ) {
			connectionrequest.setEncryptionSwitchOverToNextKey(s);(n.get("value").asText());
			//connectionrequest.setWaitForServerRestoration(n.get("value").asText());
		}*/ 
	}
 }
 

/** 
* populate below ASONParams in connection request.
"ASONRouted": "false",
"preferredRestorationMode": "norestore",
"reversionMode": "manual",
"waitForServerRestoration": "false",
*/
private void populateASONParams(OtnConnectionRequest connectionrequest, JsonNode asonParamList) {
	Iterator<JsonNode> it = asonParamList.iterator();
	while (it.hasNext()) {
		JsonNode n = it.next();
		if ( n.get("name").asText().equals("ASONRouted") ) {
			connectionrequest.setASONRouted(n.get("value").asText());
		} else if ( n.get("name").asText().equals("preferredRestorationMode") ) {
			connectionrequest.setPreferredRestorationMode(n.get("value").asText());
		} else if ( n.get("name").asText().equals("reversionMode") ) {
			connectionrequest.setReversionMode("manual");
			if (!n.get("value").asText().equalsIgnoreCase("ReversionMode_NA")) connectionrequest.setReversionMode(n.get("value").asText());
		} else if ( n.get("name").asText().equals("waitForServerRestoration") ) {
			connectionrequest.setWaitForServerRestoration ("false");
			//connectionrequest.setWaitForServerRestoration(n.get("value").asText());
		} 
	} 
}

Retrieve A and Z nodes details using name and populate in Request Object

Retrieving A and Z node details using nodes name provided as input.


/**Retrieve a node details*/
String queryString = "select(guiLabel,id,productName,className)&productName!='External%20Network'&guiLabel=" + connCrInfo.getFromNodeName();
JsonNode aNodeDetails = ServiceUtil.retreiveNodeDetails(restTemplate, queryString);
connectionrequest.setFromne1(aNodeDetails.get(0).get("guiLabel").asText()); 

/**Retrieve z node details*/
queryString = "select(guiLabel,id,productName,className)&productName!='External%20Network'&guiLabel=" + connCrInfo.getToNodeName();
JsonNode zNodeDetails = ServiceUtil.retreiveNodeDetails(restTemplate, queryString);
connectionrequest.setTone1(zNodeDetails.get(0).get("guiLabel").asText()); 

Method "retreiveNodeDetails" is defined in ServiceUtil class. It uses RestTemplate's getForObject method to make HTTP GET call.

GET REST call used here is /data/npr/{table}

queryString is basically db query passed as a part GET request.


/**Retrieves node details using filter provided in the query string*/
public static JsonNode retreiveNodeDetails (OMSRestTemplate restTemplate, String queryString) {
	String retrieveNodeDetailsUrl = restTemplate.getUrlPrefix() + "/data/npr/Node?" + queryString;//select(guiLabel,id,productName,emlNeType)&productName!='External%20Network'&guiLabel=" + nodGuiLabel;

	return restTemplate.getForObject(retrieveNodeDetailsUrl, JsonNode.class);
 }

Retrieve A and Z ports details using name and populate in Request Object

Retrieving A and Z ports details using port name provided as input.


/**Retrieve a port details*/
//"nodeName=PSS32_1&popupFormFieldId=fromport1&showallports=no&rate=10GbE&nodeId=94&objectType=Ethernet"

queryString = "showallports=no&rate=" + connectionrequest.getServicerate() + "&nodeId=" + aNodeDetails.get(0).get("id").asText() + "&objectType=" + connectionrequest.getServiceratetype();
JsonNode aPortDetails = ServiceUtil.retreivePortDetailsForService (restTemplate, queryString, connCrInfo.getFromPortName());
populateFromPortDetails (connectionrequest, aPortDetails);

/**Retrieve z port details*/
queryString = "showallports=no&rate=" + connectionrequest.getServicerate() + "&nodeId=" + zNodeDetails.get(0).get("id").asText() + "&objectType=" + connectionrequest.getServiceratetype();
JsonNode zPortDetails = ServiceUtil.retreivePortDetailsForService (restTemplate, queryString, connCrInfo.getToPortName());
populateToPortDetails (connectionrequest, zPortDetails);

method "retreivePortDetailsForService" is defined in ServiceUtil class. It uses RestTemplate's getForObject method to make HTTP GET call.


/*Request GET /oms1350/data/otn/connectionTP?nodeName=PSS32_1&popupFormFieldId=fromport1&showallports=no&rate=10GbE&nodeId=94&objectType=Ethernet*/
public static JsonNode retreivePortDetailsForService (OMSRestTemplate restTemplate, String queryString, String portName) { 
	JsonNode portDetail = null;
	String retrieveNodeDetailsUrl = restTemplate.getUrlPrefix() + "/data/otn/connectionTP?" + queryString;//guiLabel='" + portName;// + "'&ne.associatedNodeId=" + nodeId;
	JsonNode portsList = restTemplate.getForObject(retrieveNodeDetailsUrl, JsonNode.class);
	System.out.println(portName);;
	if ( portsList.get("items") != null ) {
		Iterator <JsonNode> it = portsList.get("items").iterator();
		while ( it.hasNext() ) {
			JsonNode n = it.next();
			System.out.println("n = " + n);
			if (n.get("portName").asText().equals(portName)) {
				portDetail = n;
				break;
			}
		}
	}
	return portDetail;
}

GET REST call used here is /data/otn/connectionTP

queryString is basically db query passed as a part GET request.


/**Retrieves node details using filter provided in the query string*/
public static JsonNode retreiveNodeDetails (OMSRestTemplate restTemplate, String queryString) {
	String retrieveNodeDetailsUrl = restTemplate.getUrlPrefix() + "/data/npr/Node?" + queryString;//select(guiLabel,id,productName,emlNeType)&productName!='External%20Network'&guiLabel=" + nodGuiLabel;

	return restTemplate.getForObject(retrieveNodeDetailsUrl, JsonNode.class);
 }

Populating Request Object with default values for non applicable attributes

Below attributes related Y cable etc may not be applicable, but they should be set with default values.


/**there are many parameters in the connection...set with default values...*/
setDefaultParams(connectionrequest);

private void setDefaultParams(OtnConnectionRequest connectionrequest) {
	connectionrequest.setPayloadType("UseNEValue");

	/**to be checked later**/
	connectionrequest.setLopc("false");
	connectionrequest.setOrderstep("9");
	connectionrequest.setOrdersensitive("false");
	connectionrequest.setRearrange("soft");
	connectionrequest.setReinstate("none");
	connectionrequest.setTcmLevel("notcm");
	connectionrequest.setPmdata15("0");
	connectionrequest.setDirection15("0");
	connectionrequest.setReportinfo15("1");
	connectionrequest.setTpmonitor15("2");
	connectionrequest.setPmdata24("0");
	connectionrequest.setDirection24("0");
	connectionrequest.setReportinfo24("0");
	connectionrequest.setTpmonitor24("2");
	connectionrequest.setOdukTraceMismatchDectMode("UseNevalue");
	connectionrequest.setOdukTraceMismatchAction("UseNEValue");
	connectionrequest.setPayloadTypeMismatchResponse("UseNEValue");
	connectionrequest.setProvisionedBitRateDsr("UseNEValue");
	connectionrequest.setProvisionedBitRate("UseNEValue");
	connectionrequest.setFecEnable("UseNEValue");
	connectionrequest.setAsymInterwk("UseNevalue");
	connectionrequest.setOdu4InterworkingMode("UseNEValue");
	connectionrequest.setMappingMode("UseNevalue");
	connectionrequest.setEncapsulationMode("UseNEValue");
	connectionrequest.setApsEnable("UseNEValue");
	connectionrequest.setSsmSupport("UseNEValue");
	connectionrequest.setOutQl("UseNEValue");
	connectionrequest.setClientholdofftime("0");
	connectionrequest.setClientprotectedMethod("0");
	connectionrequest.setClientprotectingMethod("0");
	connectionrequest.setClientsignaldegrade("0");
	connectionrequest.setClientwaittime("5");
	connectionrequest.setClientrevertivemod("1");
	connectionrequest.setNwkprotectiontype("0");
	connectionrequest.setNwkholdofftime("0");
	connectionrequest.setNwkprotectedMethod("0");
	connectionrequest.setNwkprotectingMethod("0");
	connectionrequest.setNwksignaldegrade("0");
	connectionrequest.setNwkwaittime("5");
	connectionrequest.setNwkrevertivemode("1");
	connectionrequest.setRouting("1");
	connectionrequest.setEirrate("0");
	connectionrequest.setCirrate("0");
	connectionrequest.setRoutedisplay("true");

	/*************************************************/
	connectionrequest.setCbs("CBS16");
	connectionrequest.setEbs("CBS16");
	connectionrequest.setFec("UseNEValue");
	connectionrequest.setMRNTunnel("false");
	connectionrequest.setASONConnectionType("TermTunnel");
	connectionrequest.setAendworkport("porta");
	connectionrequest.setFromPort1XFP("");
	connectionrequest.setToPort1XFP("");
	connectionrequest.setFromPort2XFP("");
	connectionrequest.setToPort2XFP("");

	/*************************************************/
	//connectionrequest.setClientSel("GBE10ODU2E");
	//connectionrequest.setZ1ClientSel("GBE10ODU2E");
	connectionrequest.setEncryptionState("UseNEValue");
	connectionrequest.setEncryptionSwitchOverToNextKey("UseNEValue");
	connectionrequest.setDefalutsetuppriority("5");
	connectionrequest.setDefalutpriority("4");
	connectionrequest.setAsonsubntwrkprotectiontype("SNCP");
	connectionrequest.setRoutingeffort("2");
	connectionrequest.setRoutefrequency("");
	connectionrequest.setRoutingtable(new ArrayList <OtnRoutingConstraints>());
	connectionrequest.setWavekeyassignment("system");
	connectionrequest.setZawavekeyrekey("NORekey");
	connectionrequest.setAzwavekeyrekey("NORekey");
	connectionrequest.setHassdx("no");
	connectionrequest.setAllowUncommissioned("true");
	connectionrequest.setProvisionwavekey("keyed");
	connectionrequest.setOperation("create");
	connectionrequest.setFromaside("working");
	connectionrequest.setFrombside("Protection");
	connectionrequest.setToaside("working");
	connectionrequest.setTobside("Protection");
	connectionrequest.setHasycable("no");
	connectionrequest.setYcablefromne(connectionrequest.getFromne1());
	connectionrequest.setYcabletone(connectionrequest.getTone1());
	connectionrequest.setYcablerevertivemode("Disabled");
	connectionrequest.setYcablerestoretime("5");
	connectionrequest.setYcabletimeslot("1");
	connectionrequest.setHasycable1("no");
	connectionrequest.setYcableswitchmode("uni");
	connectionrequest.setWavekeytype("auto");
	connectionrequest.setAzwavekeypref("none");
	connectionrequest.setZawavekeypref("none");
}

Retrieving and populating Tx parameters


/**
* retrieve transmission parameters and populate in Request Object
* */
retrieveAndPopulateTransmissionParams (restTemplate, connectionrequest);
connectionrequest.setToPort1XFP(connCrInfo.getToPortPluggableModule());

The same connection provisioning request would be used to retrieve transmission parameters. The REST Call used to retrieve transmission parameter is /data/otn/Connection/Params


private void retrieveAndPopulateTransmissionParams(OMSRestTemplate restTemplate, OtnConnectionRequest connectionrequest) {
	// https://135.250.76.157:8443/oms1350/data/otn/Connection/Params/
	String txDataUrl = restTemplate.getUrlPrefix() + "/data/otn/Connection/Params";
	JsonNode txData = restTemplate.postForObject(txDataUrl, connectionrequest, JsonNode.class);

	/***populate hasOPSB, hasycable etc from group*/
	Iterator <JsonNode> groupIt = txData.get("groups").iterator();
	while ( groupIt.hasNext() ) {
		JsonNode n = groupIt.next();
		if ( n.get("groupname").asText().equals("HasOPSB") ) { 
			connectionrequest.setHasopsb(n.get("paramList").get(0).get("value").asText());
		} else if ( n.get("groupname").asText().equals("HasYcable") ) {
			connectionrequest.setHasycable(n.get("paramList").get(0).get("value").asText());
		}
	}

	/**---populate transimmsion parameters -----*/
	JsonNode txNode = txData.get("txParamTableData");
	Iterator <JsonNode> txIt = txNode.iterator();
	List<OtnConnTxParams> txParamData = new ArrayList<OtnConnTxParams>();
	while ( txIt.hasNext() ) {
		JsonNode n = txIt.next();
		OtnConnTxParams txP = convertJsonNodeToPojoObject(n, OtnConnTxParams.class);
		if (txP != null) {txParamData.add(txP);}
	} 
	connectionrequest.setTxParamData(txParamData);
	System.out.println("txData=======" + txData); 
}

Making HTTP Request

Making HTTP POST request /data/otn/Connection to create 10GbeE ethernet service connection.


connectionrequest.setRequestId(requestId);
connectionrequest.setEventChannel("/oms1350/events/otn/prov/jobEvent/" + requestId);
String connCreatUrl = restTemplate.getUrlPrefix() + "/data/otn/Connection";
JsonNode resp = restTemplate.postForObject(connCreatUrl, connectionrequest, JsonNode.class);

Main class

Main class - OmsRestClientApplication.java


package com.nokia.oms.restclient;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.JsonNode;
import com.nokia.oms.restclient.models.AuthInfo;
import com.nokia.oms.restclient.services.ConnectionService;
import com.nokia.oms.restclient.services.CustomerService;
import com.nokia.oms.restclient.services.NPAService;

public class OmsRestClientApplication {
	public static void main(String[] args) {
	/**Authentication Information like Machine IP, username and password*/
		AuthInfo authInfo = new AuthInfo(); 
		authInfo.setServerIP("135.250.100.186");
		authInfo.setServerPort("8443");
		authInfo.setServerUser("alcatel");
		authInfo.setServerPwd("Asonint1.*");
		authInfo.setPresentationIP("135.250.100.187");

		/**create OMSRestTemplate instance**/
		OMSRestTemplate omsRestTemplate = new OMSRestTemplate ();

		/**authenticate*/
		omsRestTemplate.authenticate(authInfo);

		/**Create Connection service object*/
		ConnectionService connService = new ConnectionService ();

		/**call infra creation method*/
		connService.createInfraConnection(omsRestTemplate, "C:\\REST-CLIENT-INPUT\\InfraCreateInfo.json");
	}
}

Request and Response Data

JSON Request payload


{
	"requestId": 989898,
	"eventServerUrl": null,
	"eventChannel": "/oms1350/events/otn/prov/jobEvent/989898",
	"connshape": "8",
	"customerName": "",
	"connectionname": "L0-CP-INFRA-CONN",
	"connectionalias": null,
	"serviceratetype": "Trail",
	"servicerate": "100GbE",
	"trailrate": "ODU4",
	"cirrate": "0",
	"eirrate": "0",
	"cbs": "CBS16",
	"ebs": "CBS16",
	"cevlan": null,
	"svlan": null,
	"protectiontype": "9",
	"fec": "AFEC",
	"lopc": "false",
	"ASONRouted": "true",
	"restoration": null,
	"MRNTunnel": "false",
	"ASONConnectionType": "noTunnel",
	"aendworkport": "porta",
	"fromne1": "L0CP-NODE-A",
	"fromport1": "112SCX10-9-10-L1-1",
	"fromne2": null,
	"fromport2": null,
	"tone1": "L0CP-NODE-B",
	"toport1": "112SCX10-9-10-L1-1",
	"tone2": null,
	"toport2": null,
	"fromPort1XFP": "",
	"fromPort2XFP": "",
	"toPort1XFP": "",
	"toPort2XFP": "",
	"fromport1_AdditionalInfo": {
		"className": null,
		"label": "112SCX10-9-10-L1-1",
		"guiLabel": null,
		"key": null,
		"id": 0,
		"neId": 164,
		"neName": "L0CP-NODE-A",
		"neLabel": null,
		"neModel": null,
		"nodeName": null,
		"portid": 1875132,
		"portName": "112SCX10-9-10-L1-1",
		"rate": null,
		"type": null,
		"cardName": "112SCX10",
		"availability": null,
		"frequency": null,
		"rxFrequency": null,
		"oprMode": null,
		"layerRate": 0,
		"direction": 0,
		"timeslot": 0,
		"alarmState": 0,
		"ptpId": 0,
		"ptpName": null,
		"ptpRate": null,
		"connectionId": 0,
		"connectionName": null,
		"connectionRate": null,
		"port": null,
		"portGrpMode": "N/A",
		"odukPort": null,
		"portId": 1875132,
		"oduKPort": null
	},
	"fromport2_AdditionalInfo": null,
	"toport1_AdditionalInfo": {
		"className": null,
		"label": "112SCX10-9-10-L1-1",
		"guiLabel": null,
		"key": null,
		"id": 0,
		"neId": 166,
		"neName": "L0CP-NODE-B",
		"neLabel": null,
		"neModel": null,
		"nodeName": null,
		"portid": 1934505,
		"portName": "112SCX10-9-10-L1-1",
		"rate": null,
		"type": null,
		"cardName": "112SCX10",
		"availability": null,
		"frequency": null,
		"rxFrequency": null,
		"oprMode": null,
		"layerRate": 0,
		"direction": 0,
		"timeslot": 0,
		"alarmState": 0,
		"ptpId": 0,
		"ptpName": null,
		"ptpRate": null,
		"connectionId": 0,
		"connectionName": null,
		"connectionRate": null,
		"port": null,
		"portGrpMode": "N/A",
		"odukPort": null,
		"portId": 1934505,
		"oduKPort": null
	},
	"toport2_AdditionalInfo": null,
	"port1timeslot": null,
	"port2timeslot": null,
	"port3timeslot": null,
	"port4timeslot": null,
	"routing": "1",
	"orderstep": "9",
	"routedisplay": "true",
	"containerrate": "ODU4",
	"signalType": "Default",
	"clientSel": null,
	"a1ClientSel": null,
	"z1ClientSel": null,
	"a2ClientSel": null,
	"z2ClientSel": null,
	"LOSPropagation": "UseNEValue",
	"xmnActualBitRate": "Default",
	"odukAZSrcTrace": null,
	"odukZASrcTrace": null,
	"odukTraceMismatchDectMode": "UseNevalue",
	"odukTraceMismatchAction": "UseNEValue",
	"xmnAZClientClassificationMode": null,
	"xmnZAClientClassificationMode": null,
	"ProvisionedBitRate": "UseNEValue",
	"ProvisionedBitRateDsr": "UseNEValue",
	"fecEnable": "UseNEValue",
	"asymInterwk": "UseNevalue",
	"Odu4InterworkingMode": "UseNEValue",
	"encryptionState": "UseNEValue",
	"encryptionNextKey": null,
	"encryptionWKAT": null,
	"encryptionSwitchOverToNextKey": "UseNEValue",
	"payloadType": "UseNEValue",
	"PayloadTypeMismatchResponse": "UseNEValue",
	"mappingmode": "UseNevalue",
	"EncapsulationMode": "UseNEValue",
	"apsEnable": "UseNEValue",
	"ssmSupport": "UseNEValue",
	"outQl": "UseNEValue",
	"timeSlotL1": null,
	"txParamData": [
		{
			"parameter": "TTIMismatchConsequentAction",
			"name": "CAonTIM",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Use NE Value",
					"Enable",
					"Disable"
				],
				"maxlength": 0
			},
			"disabled": false
		},
		{
			"parameter": "PayloadTypeResp",
			"name": "PayloadTypeMismatchResponse",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Use NE Value",
					"Enable",
					"Disable"
				],
				"maxlength": 0
			},
			"disabled": false
		},
		{
			"parameter": "Payloadtype",
			"name": "payloadType",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "String",
			"editorArgs": null,
			"disabled": false
		},
		{
			"parameter": "SourceAZTTI",
			"name": "TrailTraceActualTx",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "String",
			"editorArgs": {
				"options": null,
				"maxlength": 15
			},
			"disabled": false
		},
		{
			"parameter": "SourceZATTI",
			"name": "TrailTraceExpectedRx",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "String",
			"editorArgs": {
				"options": null,
				"maxlength": 15
			},
			"disabled": false
		},
		{
			"parameter": "TTIMonitor",
			"name": "TrailTraceMonitor",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Use NE Value",
					"Source Enabled",
					"Disabled"
				],
				"maxlength": 0
			},
			"disabled": false
		},
		{
			"parameter": "TraceMismatchMonitor",
			"name": "TrailTraceEnablePoints",
			"value": null,
			"currentValue": "Enable End-points only",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Enable End-points only",
					"Enable All",
					"Use NE Value"
				],
				"maxlength": 0
			},
			"disabled": false
		},
		{
			"parameter": "OTUkSourceAZTTI",
			"name": "TrailTraceActualTx",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "String",
			"editorArgs": {
				"options": null,
				"maxlength": 15
			},
			"disabled": false
		},
		{
			"parameter": "OTUkSourceZATTI",
			"name": "TrailTraceExpectedRx",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "String",
			"editorArgs": {
				"options": null,
				"maxlength": 15
			},
			"disabled": false
		},
		{
			"parameter": "OTUkTTIMismatchConsequentAction",
			"name": "CAonTIM",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Use NE Value",
					"Enable",
					"Disable"
				],
				"maxlength": 0
			},
			"disabled": false
		},
		{
			"parameter": "RegenResponse",
			"name": "regenResponse",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Use NE Value",
					"Laser On",
					"Laser Off"
				],
				"maxlength": 0
			},
			"disabled": false
		},
		{
			"parameter": "Double Scrambling",
			"name": "scrammode",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Use NE Value",
					"Enable",
					"Disable"
				],
				"maxlength": 0
			},
			"disabled": false
		},
		{
			"parameter": "ODU4Interworking",
			"name": "112Odu4InterworkingMode",
			"value": null,
			"currentValue": "Use NE Value",
			"discA": null,
			"discZ": null,
			"type": "Enumeration",
			"editorArgs": {
				"options": [
					"Use NE Value",
					"Enable",
					"Disable"
				],
				"maxlength": 0
			},
			"disabled": false
		}
	],
	"transmissionmode": "txmode8qamsingle",
	"tcmLevel": "notcm",
	"waitForServerRestoration": "false",
	"preferredRestorationMode": "norestore",
	"reversionMode": "manual",
	"maxlatency": null,
	"defaultsetuppriority": "5",
	"defaultpriority": "4",
	"includecolorprofile": null,
	"excludecolorprofile": null,
	"clientprotectiontype": "0",
	"clientholdofftime": "0",
	"clientprotectedMethod": "0",
	"clientprotectingMethod": "0",
	"clientsignaldegrade": "0",
	"clientwaittime": "5",
	"clientrevertivemode": "1",
	"nwkprotectiontype": "0",
	"nwkholdofftime": "0",
	"nwkprotectedMethod": "0",
	"nwkprotectingMethod": "0",
	"nwksignaldegrade": "0",
	"nwkwaittime": "5",
	"nwkrevertivemode": "1",
	"asonsubntwkprttype": "SNCP",
	"pm15min": "false",
	"pmdata15": "0",
	"direction15": "0",
	"tpmonitor15": "2",
	"reportinfo15": "1",
	"pm24hr": "true",
	"pmdata24": "0",
	"direction24": "0",
	"tpmonitor24": "2",
	"reportinfo24": "0",
	"alarmEnable": "NOTSET",
	"autoInService": "Disable",
	"autoInServiceTimer": null,
	"a1osnr": null,
	"a2osnr": null,
	"z1osnr": null,
	"z2osnr": null,
	"routingeffort": "2",
	"routefrequency": "",
	"ordersensitive": "false",
	"otnRoutingConstraints": [
	],
	"wavekeyConfig": "Auto",
	"wavekeytype": "auto",
	"azwavekeypref": "none",
	"zawavekeypref": "none",
	"wavekeyassignment": "system",
	"azwavekeypair": null,
	"zawavekeypair": null,
	"azwavekeyrekey": "NORekey",
	"zawavekeyrekey": "NORekey",
	"hassdx": "no",
	"freq1": null,
	"freq1azwavekeypair": null,
	"freq1zawavekeypair": null,
	"freq2": null,
	"freq2azwavekeypair": null,
	"freq2zawavekeypair": null,
	"freq3": null,
	"freq3azwavekeypair": null,
	"freq3zawavekeypair": null,
	"freq4": null,
	"freq4azwavekeypair": null,
	"freq4zawavekeypair": null,
	"allowUncommissioned": "true",
	"provisionwavekey": "keyed",
	"connectionid": -1,
	"orderid": -1,
	"ordernumber": null,
	"rearrange": "soft",
	"reinstate": "none",
	"operation": "create",
	"hasopsb": "no",
	"fromaside": "working",
	"asidefromne": null,
	"asidefromport": null,
	"frombside": "Protection",
	"bsidefromne": null,
	"bsidefromport": null,
	"toaside": "working",
	"asidetone": null,
	"asidetoport": null,
	"tobside": "Protection",
	"bsidetone": null,
	"bsidetoport": null,
	"asidefromport_AdditionalInfo": null,
	"bsidefromport_AdditionalInfo": null,
	"asidetoport_AdditionalInfo": null,
	"bsidetoport_AdditionalInfo": null,
	"hasycable": "no",
	"hasycable1": "no",
	"ycablefromne": "L0CP-NODE-A",
	"ycablefromwkport": null,
	"ycablefromprotPort": null,
	"ycabletone": "L0CP-NODE-B",
	"ycabletowkport": null,
	"ycabletoprotport": null,
	"ycableswitchmode": "uni",
	"ycablerevertivemode": "Disabled",
	"ycablerestoretime": "5",
	"ycabletimeslot": "1",
	"ycablefromwkport_AdditionalInfo": null,
	"ycablefromprotPort_AdditionalInfo": null,
	"ycabletowkport_AdditionalInfo": null,
	"ycabletoprotport_AdditionalInfo": null,
	"asonrouted": "true",
	"mrntunnel": "false",
	"payloadTypeMismatchResponse": "UseNEValue",
	"transmissionMode": "txmode8qamsingle",
	"asonconnectionType": "noTunnel",
	"lospropagation": "UseNEValue",
	"provisionedBitRateDsr": "UseNEValue",
	"provisionedBitRate": "UseNEValue",
	"odu4InterworkingMode": "UseNEValue",
	"mappingMode": "UseNevalue",
	"encapsulationMode": "UseNEValue",
	"defalutsetuppriority": "5",
	"defalutpriority": "4",
	"asonsubntwrkprotectiontype": "SNCP",
	"xmnAZClassificationMode": null,
	"xmnZAClassificationMode": null,
	"ycablefromprotport": null
}

JSON Response


{
	"message": "Command Accepted",
	"messageId": "I18N_COMMAND_ACCEPTED",
	"messageSeverity": "I",
	"status": "SUCCESS",
	"connectionName": "g-L0-CP-INFRA-CONN",
	"connectionId": 7960,
	"orderNumber": "",
	"orderId": "",
	"orderStep": 0,
	"errorField": "",
	"errorValue": ""
}

REST APIs used

  1. /data/otn/connectionTemplates/folders - Retrieves the template folders.

  2. /data/otn/connectionTemplates/templates/{templateId} - Retrieves template details.

  3. /data/npr/{table} - {table}=> Node - Used to retreive Node details from Node Name.

  4. /data/otn/connectionTP - Used to retrieves Port details.

  5. /data/otn/Connection/Params - Used to retrieve connection parameters.

  6. /data/otn/Connection Used to L0CP infra/trail connection.

Notifications

Connection provisioning is a Asynchronous call.

Connection creation goes through multiple transistions - Planned => Allocate => Implemented => Commissioned

Status of each transition would be reported as Notification via Event channel specified during connection provisioning ("connectionrequest.setEventChannel("/oms1350/events/otn/prov/jobEvent/" + requestId);) please see above example

Below are the examples of all the notifications received -

--------------------------------------------------------------------------------------------------
Received event from channel/oms1350/events/otn/prov/jobEvent/989898
{
	id=155474,
	data={
		"type": "CONNECTION_EVENT",
		"targetObj": {
			"className": "L0-CP-INFRA-CONN",
			"id": "8119",
			"key": "L0-CP-INFRA-CONN/8119"
		},
		"attributes": {
			"msg": "Order IA13702 for Connection L0-CP-INFRA-CONN is at local design in progress step",
			"i18n_msgId": "OH1002I",
			"JUMP_FIND": "",
			"percentComplete": "0.6",
			"REQUEST_ID": "989898",
			"responseStatus": "IN_PROGRESS",
			"i18n_msgParams": [
				"IA13702",
				"L0-CP-INFRA-CONN",
				"local design in progress"
			],
			"ORDER_STATE": "inProgress",
			"userId": "adminusr",
			"serverId": "asonintOTN",
			"eventContext": "CONNECTION_EVENT",
			"PRIMARYCONNECTIONIDs": "8120",
			"ORDER_ID": "16902",
			"ORDER_NUMBER": "IA13702",
			"CONNECTION_NAME": "L0-CP-INFRA-CONN",
			"i18n_errorData": "{\"errorId\":\"OH1002I\",\"errorParams\":[\"IA13702\",\"L0-CP-INFRA-CONN\",\"local design in progress\"]}",
			"CONNECTION_ID": "8119",
			"ORDER_ACTION": "Move order",
			"jobNumber": "989898",
			"ORDER_STEP": "localDesign"
		}
	},
	channel=/oms1350/events/otn/prov/jobEvent/989898
}
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Received event from channel/oms1350/events/otn/prov/jobEvent/989898
{
	id=155483,
	data={
		"type": "CONNECTION_EVENT",
		"targetObj": {
			"className": "L0-CP-INFRA-CONN",
			"id": "8119",
			"key": "L0-CP-INFRA-CONN/8119"
		},
		"attributes": {
			"msg": "Order IA13702 for Connection L0-CP-INFRA-CONN is at Allocated step",
			"i18n_msgId": "OH1002I",
			"JUMP_FIND": "",
			"percentComplete": "0.9",
			"REQUEST_ID": "989898",
			"responseStatus": "IN_PROGRESS",
			"i18n_msgParams": [
				"IA13702",
				"L0-CP-INFRA-CONN",
				"Allocated"
			],
			"ORDER_STATE": "completed",
			"userId": "adminusr",
			"serverId": "asonintOTN",
			"eventContext": "CONNECTION_EVENT",
			"PRIMARYCONNECTIONIDs": "8120",
			"ORDER_ID": "16902",
			"ORDER_NUMBER": "IA13702",
			"CONNECTION_NAME": "L0-CP-INFRA-CONN",
			"i18n_errorData": "{\"errorId\":\"OH1002I\",\"errorParams\":[\"IA13702\",\"L0-CP-INFRA-CONN\",\"Allocated\"]}",
			"CONNECTION_ID": "8119",
			"ORDER_ACTION": "Move order",
			"jobNumber": "989898",
			"ORDER_STEP": "localDesign"
		}
	},
	channel=/oms1350/events/otn/prov/jobEvent/989898
}
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Received event from channel/oms1350/events/otn/prov/jobEvent/989898
{
	id=155486,
	data={
		"type": "CONNECTION_EVENT",
		"targetObj": {
			"className": "L0-CP-INFRA-CONN",
			"id": "8119",
			"key": "L0-CP-INFRA-CONN/8119"
		},
		"attributes": {
			"msg": "Order IA13702 for Connection L0-CP-INFRA-CONN is at low level design in progress step",
			"i18n_msgId": "OH1002I",
			"JUMP_FIND": "",
			"percentComplete": "0.6",
			"REQUEST_ID": "989898",
			"responseStatus": "IN_PROGRESS",
			"i18n_msgParams": [
				"IA13702",
				"L0-CP-INFRA-CONN",
				"low level design in progress"
			],
			"ORDER_STATE": "inProgress",
			"userId": "adminusr",
			"serverId": "asonintOTN",
			"eventContext": "CONNECTION_EVENT",
			"PRIMARYCONNECTIONIDs": "8120",
			"ORDER_ID": "16902",
			"ORDER_NUMBER": "IA13702",
			"CONNECTION_NAME": "L0-CP-INFRA-CONN",
			"i18n_errorData": "{\"errorId\":\"OH1002I\",\"errorParams\":[\"IA13702\",\"L0-CP-INFRA-CONN\",\"low level design in progress\"]}",
			"CONNECTION_ID": "8119",
			"ORDER_ACTION": "Move order",
			"jobNumber": "989898",
			"ORDER_STEP": "lowLevelDesign"
		}
	},
	channel=/oms1350/events/otn/prov/jobEvent/989898
}
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Received event from channel/oms1350/events/otn/prov/jobEvent/989898
{
	id=155507,
	data={
		"type": "CONNECTION_EVENT",
		"targetObj": {
			"className": "L0-CP-INFRA-CONN",
			"id": "8119",
			"key": "L0-CP-INFRA-CONN/8119"
		},
		"attributes": {
			"msg": "Order IA13702 for Connection L0-CP-INFRA-CONN is at low level designed step",
			"i18n_msgId": "OH1002I",
			"JUMP_FIND": "",
			"percentComplete": "0.9",
			"REQUEST_ID": "989898",
			"responseStatus": "IN_PROGRESS",
			"i18n_msgParams": [
				"IA13702",
				"L0-CP-INFRA-CONN",
				"low level designed"
			],
			"ORDER_STATE": "completed",
			"userId": "adminusr",
			"serverId": "asonintOTN",
			"eventContext": "CONNECTION_EVENT",
			"PRIMARYCONNECTIONIDs": "8120",
			"ORDER_ID": "16902",
			"ORDER_NUMBER": "IA13702",
			"SERVERCONNECTIONIDs": "8121",
			"CONNECTION_NAME": "L0-CP-INFRA-CONN",
			"i18n_errorData": "{\"errorId\":\"OH1002I\",\"errorParams\":[\"IA13702\",\"L0-CP-INFRA-CONN\",\"low level designed\"]}",
			"CONNECTION_ID": "8119",
			"ORDER_ACTION": "Move order",
			"jobNumber": "989898",
			"ORDER_STEP": "lowLevelDesign"
		}
	},
	channel=/oms1350/events/otn/prov/jobEvent/989898
}
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Received event from channel/oms1350/events/otn/prov/jobEvent/989898
{
	id=155510,
	data={
		"type": "CONNECTION_EVENT",
		"targetObj": {
			"className": "L0-CP-INFRA-CONN",
			"id": "8119",
			"key": "L0-CP-INFRA-CONN/8119"
		},
		"attributes": {
			"msg": "Order IA13702 for Connection L0-CP-INFRA-CONN is at Partially Implemented step",
			"i18n_msgId": "OH1002I",
			"JUMP_FIND": "",
			"percentComplete": "0.6",
			"REQUEST_ID": "989898",
			"responseStatus": "IN_PROGRESS",
			"i18n_msgParams": [
				"IA13702",
				"L0-CP-INFRA-CONN",
				"Partially Implemented"
			],
			"ORDER_STATE": "inProgress",
			"userId": "adminusr",
			"serverId": "asonintOTN",
			"eventContext": "CONNECTION_EVENT",
			"PRIMARYCONNECTIONIDs": "8120",
			"ORDER_ID": "16902",
			"ORDER_NUMBER": "IA13702",
			"SERVERCONNECTIONIDs": "8121",
			"CONNECTION_NAME": "L0-CP-INFRA-CONN",
			"i18n_errorData": "{\"errorId\":\"OH1002I\",\"errorParams\":[\"IA13702\",\"L0-CP-INFRA-CONN\",\"Partially Implemented\"]}",
			"CONNECTION_ID": "8119",
			"ORDER_ACTION": "Move order",
			"jobNumber": "989898",
			"ORDER_STEP": "implementation"
		}
	},
	channel=/oms1350/events/otn/prov/jobEvent/989898
}
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Received event from channel/oms1350/events/otn/prov/jobEvent/989898
{
	id=155526,
	data={
		"type": "CONNECTION_EVENT",
		"targetObj": {
			"className": "L0-CP-INFRA-CONN",
			"id": "8119",
			"key": "L0-CP-INFRA-CONN/8119"
		},
		"attributes": {
			"msg": "Order IA13702 for Connection L0-CP-INFRA-CONN is at Implemented step",
			"i18n_msgId": "OH1002I",
			"JUMP_FIND": "",
			"percentComplete": "0.9",
			"REQUEST_ID": "989898",
			"responseStatus": "IN_PROGRESS",
			"i18n_msgParams": [
				"IA13702",
				"L0-CP-INFRA-CONN",
				"Implemented"
			],
			"ORDER_STATE": "completed",
			"userId": "adminusr",
			"serverId": "asonintOTN",
			"eventContext": "CONNECTION_EVENT",
			"PRIMARYCONNECTIONIDs": "8120",
			"ORDER_ID": "16902",
			"ORDER_NUMBER": "IA13702",
			"SERVERCONNECTIONIDs": "8121",
			"CONNECTION_NAME": "L0-CP-INFRA-CONN",
			"i18n_errorData": "{\"errorId\":\"OH1002I\",\"errorParams\":[\"IA13702\",\"L0-CP-INFRA-CONN\",\"Implemented\"]}",
			"CONNECTION_ID": "8119",
			"ORDER_ACTION": "Move order",
			"jobNumber": "989898",
			"ORDER_STEP": "implementation"
		}
	},
	channel=/oms1350/events/otn/prov/jobEvent/989898
}
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
Received event from channel/oms1350/events/otn/prov/jobEvent/989898
{
	id=155541,
	data={
		"type": "CONNECTION_EVENT",
		"targetObj": {
			"className": "L0-CP-INFRA-CONN",
			"id": "8119",
			"key": "L0-CP-INFRA-CONN/8119"
		},
		"attributes": {
			"msg": "Move order to Commissioned action completed successfully for Order Number IA13702 and Connection Name L0-CP-INFRA-CONN",
			"i18n_msgId": "OH1001I",
			"JUMP_FIND": "connectionGroup",
			"percentComplete": "1.0",
			"REQUEST_ID": "989898",
			"responseStatus": "COMPLETED",
			"i18n_msgParams": [
				"Move order",
				"Commissioned",
				"IA13702",
				"L0-CP-INFRA-CONN"
			],
			"ORDER_STATE": "completed",
			"userId": "adminusr",
			"serverId": "asonintOTN",
			"eventContext": "CONNECTION_EVENT",
			"PRIMARYCONNECTIONIDs": "8120",
			"ORDER_ID": "16902",
			"ORDER_NUMBER": "IA13702",
			"SERVERCONNECTIONIDs": "8121",
			"CONNECTION_NAME": "L0-CP-INFRA-CONN",
			"i18n_errorData": "{\"errorId\":\"OH1001I\",\"errorParams\":[\"Move order\",\"Commissioned\",\"IA13702\",\"L0-CP-INFRA-CONN\"]}",
			"CONNECTION_ID": "8119",
			"ORDER_ACTION": "Move order",
			"jobNumber": "989898",
			"ORDER_STEP": "inEffect"
		}
	},
	channel=/oms1350/events/otn/prov/jobEvent/989898
}
--------------------------------------------------------------------------------------------------