blob: dad9fece3caa0793a40ec5612b1c101b8567ea1d [file] [log] [blame]
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();
}
}
}