blob: a183b55e8c82d72ec0a236f02d5522414efcb0af [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;
14import com.google.common.base.MoreObjects.ToStringHelper;
15
bharat saraswale1806302015-08-21 12:16:46 +053016/**
Sho SHIMIZU74361c12015-08-11 12:31:48 -070017 * Provide the error object list with open object.
18 */
19public class ErrorObjListWithOpen {
20 //errorObjList is mandatory
bharat saraswalf7364db2015-08-11 13:39:31 +053021 private LinkedList<PcepErrorObject> llerrorObjList;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070022 // openObject is optional
bharat saraswalf7364db2015-08-11 13:39:31 +053023 private PcepOpenObject openObject;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070024 // flag to check if open object is set or not
bharat saraswale1806302015-08-21 12:16:46 +053025 private boolean isOpenObjectSet;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070026 protected static final Logger log = LoggerFactory.getLogger(ErrorObjListWithOpen.class);
27
bharat saraswale1806302015-08-21 12:16:46 +053028 /**
29 * Constructor to initialize Error and OPEN object.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070030 *
bharat saraswale1806302015-08-21 12:16:46 +053031 * @param errObj ERROR object list
32 * @param openObj OPEN object
Sho SHIMIZU74361c12015-08-11 12:31:48 -070033 */
34 public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj, PcepOpenObject openObj) {
35 this.llerrorObjList = errObj;
36 this.openObject = openObj;
37 if (openObj != null) {
38 isOpenObjectSet = true;
39 } else {
40 isOpenObjectSet = false;
41 }
42 }
43
bharat saraswale1806302015-08-21 12:16:46 +053044 /**
45 * Constructor to initialize ERROR Object.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070046 *
bharat saraswale1806302015-08-21 12:16:46 +053047 * @param errObj ERROR Object list
Sho SHIMIZU74361c12015-08-11 12:31:48 -070048 */
49 public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj) {
50 this.llerrorObjList = errObj;
51 this.openObject = null;
52 isOpenObjectSet = false;
53 }
54
bharat saraswalf7364db2015-08-11 13:39:31 +053055 /**
bharat saraswale1806302015-08-21 12:16:46 +053056 * Return list of Error Types.
bharat saraswalf7364db2015-08-11 13:39:31 +053057 *
bharat saraswale1806302015-08-21 12:16:46 +053058 * @return error types list
bharat saraswalf7364db2015-08-11 13:39:31 +053059 */
Sho SHIMIZU74361c12015-08-11 12:31:48 -070060 public LinkedList<Integer> getErrorType() {
61 LinkedList<Integer> errorType = new LinkedList<Integer>();
62 if (llerrorObjList != null) {
63 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
64 int error;
65 PcepErrorObject errorObj;
66 while (errObjListIterator.hasNext()) {
bharat saraswalf7364db2015-08-11 13:39:31 +053067 errorObj = errObjListIterator.next();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070068 error = errorObj.getErrorType();
69 errorType.add(error);
70 }
71 }
72 return errorType;
73 }
74
bharat saraswalf7364db2015-08-11 13:39:31 +053075 /**
bharat saraswale1806302015-08-21 12:16:46 +053076 * Return list of Error Values.
bharat saraswalf7364db2015-08-11 13:39:31 +053077 *
bharat saraswale1806302015-08-21 12:16:46 +053078 * @return error values list
bharat saraswalf7364db2015-08-11 13:39:31 +053079 */
Sho SHIMIZU74361c12015-08-11 12:31:48 -070080 public LinkedList<Integer> getErrorValue() {
81 LinkedList<Integer> errorValue = new LinkedList<Integer>();
82 if (llerrorObjList != null) {
83 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
84 int error;
85 PcepErrorObject errorObj;
86 while (errObjListIterator.hasNext()) {
bharat saraswalf7364db2015-08-11 13:39:31 +053087 errorObj = errObjListIterator.next();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070088 error = errorObj.getErrorValue();
89 errorValue.add(error);
Sho SHIMIZU74361c12015-08-11 12:31:48 -070090 }
91 }
92 return errorValue;
93 }
bharat saraswalf7364db2015-08-11 13:39:31 +053094
95 /**
bharat saraswale1806302015-08-21 12:16:46 +053096 * Checks whether ERROR Object list is empty or not.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070097 *
bharat saraswale1806302015-08-21 12:16:46 +053098 * @return true if ERROR Object list is empty otherwise false
Sho SHIMIZU74361c12015-08-11 12:31:48 -070099 */
100 public boolean isErrorObjListWithOpenPresent() {
101 // ( <error-obj-list> [<Open>]
102 // At least in this case <error-obj-list> should be present.
103 return (!this.llerrorObjList.isEmpty()) ? true : false;
104 }
105
bharat saraswalf7364db2015-08-11 13:39:31 +0530106 /**
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700107 * Write Error Object List and Open Object to channel buffer.
108 *
bharat saraswale1806302015-08-21 12:16:46 +0530109 * @param cb output channel buffer
110 * @return length of written Error object list with open
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700111 * @throws PcepParseException when mandatory fields are not set
112 */
bharat saraswale1806302015-08-21 12:16:46 +0530113 public int write(ChannelBuffer cb) throws PcepParseException {
114 int iLenStartIndex = cb.writerIndex();
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700115 boolean bIsErrObjListFound = false;
116
117 //<error-obj-list> is mandatory , if not present throw exception.
118 if (llerrorObjList != null) {
119 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
120 while (errObjListIterator.hasNext()) {
bharat saraswale1806302015-08-21 12:16:46 +0530121 errObjListIterator.next().write(cb);
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700122 bIsErrObjListFound = true;
123 }
124 }
125
126 if (!bIsErrObjListFound) {
bharat saraswale1806302015-08-21 12:16:46 +0530127 throw new PcepParseException("<error-obj-list> is mandatory.");
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700128 }
129
130 //Open Object is optional , if present write.
131 if (openObject != null) {
bharat saraswale1806302015-08-21 12:16:46 +0530132 openObject.write(cb);
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700133 }
134
bharat saraswale1806302015-08-21 12:16:46 +0530135 return cb.writerIndex() - iLenStartIndex;
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700136 }
bharat saraswalf7364db2015-08-11 13:39:31 +0530137
138 @Override
139 public String toString() {
140 ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
141
bharat saraswale1806302015-08-21 12:16:46 +0530142 toStrHelper.add("ErrorObjList", llerrorObjList);
143
144 // OPEN Object is optional
145 if (openObject != null) {
146 toStrHelper.add("Open", openObject);
bharat saraswalf7364db2015-08-11 13:39:31 +0530147 }
148 return toStrHelper.toString();
149 }
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700150}