blob: 5730026f8ca21408f76d82cb5c4f910bd7e59fbb [file] [log] [blame]
Sho SHIMIZU74361c12015-08-11 12:31:48 -07001package org.onosproject.pcepio.types;
2
3import java.util.LinkedList;
4import java.util.ListIterator;
5
6import org.jboss.netty.buffer.ChannelBuffer;
7import org.onosproject.pcepio.exceptions.PcepParseException;
8import org.onosproject.pcepio.protocol.PcepErrorObject;
9import org.onosproject.pcepio.protocol.PcepOpenObject;
10import org.slf4j.Logger;
11import org.slf4j.LoggerFactory;
12
bharat saraswalf7364db2015-08-11 13:39:31 +053013import com.google.common.base.MoreObjects;
bharat saraswalf7364db2015-08-11 13:39:31 +053014
bharat saraswale1806302015-08-21 12:16:46 +053015/**
Sho SHIMIZU74361c12015-08-11 12:31:48 -070016 * Provide the error object list with open object.
17 */
18public class ErrorObjListWithOpen {
19 //errorObjList is mandatory
bharat saraswalf7364db2015-08-11 13:39:31 +053020 private LinkedList<PcepErrorObject> llerrorObjList;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070021 // openObject is optional
bharat saraswalf7364db2015-08-11 13:39:31 +053022 private PcepOpenObject openObject;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070023 // flag to check if open object is set or not
bharat saraswale1806302015-08-21 12:16:46 +053024 private boolean isOpenObjectSet;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070025 protected static final Logger log = LoggerFactory.getLogger(ErrorObjListWithOpen.class);
26
bharat saraswale1806302015-08-21 12:16:46 +053027 /**
28 * Constructor to initialize Error and OPEN object.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070029 *
bharat saraswale1806302015-08-21 12:16:46 +053030 * @param errObj ERROR object list
31 * @param openObj OPEN object
Sho SHIMIZU74361c12015-08-11 12:31:48 -070032 */
33 public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj, PcepOpenObject openObj) {
34 this.llerrorObjList = errObj;
35 this.openObject = openObj;
36 if (openObj != null) {
37 isOpenObjectSet = true;
38 } else {
39 isOpenObjectSet = false;
40 }
41 }
42
bharat saraswale1806302015-08-21 12:16:46 +053043 /**
44 * Constructor to initialize ERROR Object.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070045 *
bharat saraswale1806302015-08-21 12:16:46 +053046 * @param errObj ERROR Object list
Sho SHIMIZU74361c12015-08-11 12:31:48 -070047 */
48 public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj) {
49 this.llerrorObjList = errObj;
50 this.openObject = null;
51 isOpenObjectSet = false;
52 }
53
bharat saraswalf7364db2015-08-11 13:39:31 +053054 /**
bharat saraswale1806302015-08-21 12:16:46 +053055 * Return list of Error Types.
bharat saraswalf7364db2015-08-11 13:39:31 +053056 *
bharat saraswale1806302015-08-21 12:16:46 +053057 * @return error types list
bharat saraswalf7364db2015-08-11 13:39:31 +053058 */
Sho SHIMIZU74361c12015-08-11 12:31:48 -070059 public LinkedList<Integer> getErrorType() {
Sho SHIMIZU9b8274c2015-09-04 15:54:24 -070060 LinkedList<Integer> errorType = new LinkedList<>();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070061 if (llerrorObjList != null) {
62 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
63 int error;
64 PcepErrorObject errorObj;
65 while (errObjListIterator.hasNext()) {
bharat saraswalf7364db2015-08-11 13:39:31 +053066 errorObj = errObjListIterator.next();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070067 error = errorObj.getErrorType();
68 errorType.add(error);
69 }
70 }
71 return errorType;
72 }
73
bharat saraswalf7364db2015-08-11 13:39:31 +053074 /**
bharat saraswale1806302015-08-21 12:16:46 +053075 * Return list of Error Values.
bharat saraswalf7364db2015-08-11 13:39:31 +053076 *
bharat saraswale1806302015-08-21 12:16:46 +053077 * @return error values list
bharat saraswalf7364db2015-08-11 13:39:31 +053078 */
Sho SHIMIZU74361c12015-08-11 12:31:48 -070079 public LinkedList<Integer> getErrorValue() {
Sho SHIMIZU9b8274c2015-09-04 15:54:24 -070080 LinkedList<Integer> errorValue = new LinkedList<>();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070081 if (llerrorObjList != null) {
82 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
83 int error;
84 PcepErrorObject errorObj;
85 while (errObjListIterator.hasNext()) {
bharat saraswalf7364db2015-08-11 13:39:31 +053086 errorObj = errObjListIterator.next();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070087 error = errorObj.getErrorValue();
88 errorValue.add(error);
Sho SHIMIZU74361c12015-08-11 12:31:48 -070089 }
90 }
91 return errorValue;
92 }
bharat saraswalf7364db2015-08-11 13:39:31 +053093
94 /**
bharat saraswale1806302015-08-21 12:16:46 +053095 * Checks whether ERROR Object list is empty or not.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070096 *
bharat saraswale1806302015-08-21 12:16:46 +053097 * @return true if ERROR Object list is empty otherwise false
Sho SHIMIZU74361c12015-08-11 12:31:48 -070098 */
99 public boolean isErrorObjListWithOpenPresent() {
100 // ( <error-obj-list> [<Open>]
101 // At least in this case <error-obj-list> should be present.
Phanendra Mandaf346ea82015-09-04 15:21:39 -0700102 return !this.llerrorObjList.isEmpty();
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700103 }
104
bharat saraswalf7364db2015-08-11 13:39:31 +0530105 /**
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700106 * Write Error Object List and Open Object to channel buffer.
107 *
bharat saraswale1806302015-08-21 12:16:46 +0530108 * @param cb output channel buffer
109 * @return length of written Error object list with open
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700110 * @throws PcepParseException when mandatory fields are not set
111 */
bharat saraswale1806302015-08-21 12:16:46 +0530112 public int write(ChannelBuffer cb) throws PcepParseException {
113 int iLenStartIndex = cb.writerIndex();
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700114 boolean bIsErrObjListFound = false;
115
116 //<error-obj-list> is mandatory , if not present throw exception.
117 if (llerrorObjList != null) {
118 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
119 while (errObjListIterator.hasNext()) {
bharat saraswale1806302015-08-21 12:16:46 +0530120 errObjListIterator.next().write(cb);
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700121 bIsErrObjListFound = true;
122 }
123 }
124
125 if (!bIsErrObjListFound) {
bharat saraswale1806302015-08-21 12:16:46 +0530126 throw new PcepParseException("<error-obj-list> is mandatory.");
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700127 }
128
129 //Open Object is optional , if present write.
130 if (openObject != null) {
bharat saraswale1806302015-08-21 12:16:46 +0530131 openObject.write(cb);
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700132 }
133
bharat saraswale1806302015-08-21 12:16:46 +0530134 return cb.writerIndex() - iLenStartIndex;
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700135 }
bharat saraswalf7364db2015-08-11 13:39:31 +0530136
137 @Override
138 public String toString() {
Sho SHIMIZU7cdbcf72015-09-03 14:43:05 -0700139 return MoreObjects.toStringHelper(getClass())
140 .omitNullValues()
141 .add("ErrorObjList", llerrorObjList)
142 .add("Open", openObject)
143 .toString();
bharat saraswalf7364db2015-08-11 13:39:31 +0530144 }
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700145}