package org.onosproject.pcepio.types; | |
import java.util.LinkedList; | |
import java.util.ListIterator; | |
import org.jboss.netty.buffer.ChannelBuffer; | |
import org.onosproject.pcepio.exceptions.PcepParseException; | |
import org.onosproject.pcepio.protocol.PcepErrorObject; | |
import org.onosproject.pcepio.protocol.PcepOpenObject; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
/* | |
* Provide the error object list with open object. | |
*/ | |
public class ErrorObjListWithOpen { | |
//errorObjList is mandatory | |
LinkedList<PcepErrorObject> llerrorObjList; | |
// openObject is optional | |
PcepOpenObject openObject; | |
// flag to check if open object is set or not | |
public boolean isOpenObjectSet; | |
protected static final Logger log = LoggerFactory.getLogger(ErrorObjListWithOpen.class); | |
/* | |
* constructor to initialize errObj,openObj. | |
* | |
* @param errObj error object list | |
* @param openObj open object | |
*/ | |
public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj, PcepOpenObject openObj) { | |
this.llerrorObjList = errObj; | |
this.openObject = openObj; | |
if (openObj != null) { | |
isOpenObjectSet = true; | |
} else { | |
isOpenObjectSet = false; | |
} | |
} | |
/* | |
* constructor to initialize errObj. | |
* | |
* @param errObj error object list | |
*/ | |
public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj) { | |
this.llerrorObjList = errObj; | |
this.openObject = null; | |
isOpenObjectSet = false; | |
} | |
public LinkedList<Integer> getErrorType() { | |
LinkedList<Integer> errorType = new LinkedList<Integer>(); | |
if (llerrorObjList != null) { | |
ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator(); | |
int error; | |
PcepErrorObject errorObj; | |
while (errObjListIterator.hasNext()) { | |
errorObj = errObjListIterator.next(); | |
error = errorObj.getErrorType(); | |
errorType.add(error); | |
} | |
} | |
return errorType; | |
} | |
public LinkedList<Integer> getErrorValue() { | |
LinkedList<Integer> errorValue = new LinkedList<Integer>(); | |
if (llerrorObjList != null) { | |
ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator(); | |
int error; | |
PcepErrorObject errorObj; | |
while (errObjListIterator.hasNext()) { | |
errorObj = errObjListIterator.next(); | |
error = errorObj.getErrorValue(); | |
errorValue.add(error); | |
} | |
} | |
return errorValue; | |
} | |
/* | |
* Checks whether error object list is empty or not. | |
* | |
* @return whether error object list is empty or not | |
*/ | |
public boolean isErrorObjListWithOpenPresent() { | |
// ( <error-obj-list> [<Open>] | |
// At least in this case <error-obj-list> should be present. | |
return (!this.llerrorObjList.isEmpty()) ? true : false; | |
} | |
/* | |
* Write Error Object List and Open Object to channel buffer. | |
* | |
* @param bb of type channel buffer | |
* @throws PcepParseException when mandatory fields are not set | |
*/ | |
public int write(ChannelBuffer bb) throws PcepParseException { | |
int iLenStartIndex = bb.writerIndex(); | |
boolean bIsErrObjListFound = false; | |
//<error-obj-list> is mandatory , if not present throw exception. | |
if (llerrorObjList != null) { | |
ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator(); | |
while (errObjListIterator.hasNext()) { | |
errObjListIterator.next().write(bb); | |
bIsErrObjListFound = true; | |
} | |
} | |
if (!bIsErrObjListFound) { | |
throw new PcepParseException("Error: [ErrorObjListWithOpen::write] <error-obj-list> is mandatory."); | |
} | |
//Open Object is optional , if present write. | |
if (openObject != null) { | |
openObject.write(bb); | |
} | |
return bb.writerIndex() - iLenStartIndex; | |
} | |
/* | |
* Prints the attributes of ErrorObject List with open Object. | |
*/ | |
public void print() { | |
log.debug("ErrorObjListWithOpen:"); | |
ListIterator<PcepErrorObject> pcepErrorObjIterator = llerrorObjList.listIterator(); | |
log.debug("<error-obj-list> :"); | |
while (pcepErrorObjIterator.hasNext()) { | |
pcepErrorObjIterator.next().print(); | |
} | |
log.debug("OpenObject:"); | |
if (openObject != null) { | |
openObject.print(); | |
} | |
} | |
} |