blob: df4ebbc48fa0e2a99074458f1e9f2b40afa60c50 [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
Sho SHIMIZU74361c12015-08-11 12:31:48 -070016/*
17 * 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
25 public boolean isOpenObjectSet;
26 protected static final Logger log = LoggerFactory.getLogger(ErrorObjListWithOpen.class);
27
28 /*
29 * constructor to initialize errObj,openObj.
30 *
31 * @param errObj error object list
32 * @param openObj open object
33 */
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
44 /*
45 * constructor to initialize errObj.
46 *
47 * @param errObj error object list
48 */
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 /**
56 * Returns error type.
57 *
58 * @return error type
59 */
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 /**
76 * Returns error value.
77 *
78 * @return error value
79 */
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);
90
91 }
92 }
93 return errorValue;
94 }
bharat saraswalf7364db2015-08-11 13:39:31 +053095
96 /**
Sho SHIMIZU74361c12015-08-11 12:31:48 -070097 * Checks whether error object list is empty or not.
98 *
99 * @return whether error object list is empty or not
100 */
101 public boolean isErrorObjListWithOpenPresent() {
102 // ( <error-obj-list> [<Open>]
103 // At least in this case <error-obj-list> should be present.
104 return (!this.llerrorObjList.isEmpty()) ? true : false;
105 }
106
bharat saraswalf7364db2015-08-11 13:39:31 +0530107 /**
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700108 * Write Error Object List and Open Object to channel buffer.
109 *
110 * @param bb of type channel buffer
111 * @throws PcepParseException when mandatory fields are not set
112 */
113 public int write(ChannelBuffer bb) throws PcepParseException {
114 int iLenStartIndex = bb.writerIndex();
115 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()) {
121 errObjListIterator.next().write(bb);
122 bIsErrObjListFound = true;
123 }
124 }
125
126 if (!bIsErrObjListFound) {
127 throw new PcepParseException("Error: [ErrorObjListWithOpen::write] <error-obj-list> is mandatory.");
128 }
129
130 //Open Object is optional , if present write.
131 if (openObject != null) {
132 openObject.write(bb);
133 }
134
135 return bb.writerIndex() - iLenStartIndex;
136 }
137
bharat saraswalf7364db2015-08-11 13:39:31 +0530138 /**
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700139 * Prints the attributes of ErrorObject List with open Object.
140 */
141 public void print() {
142 log.debug("ErrorObjListWithOpen:");
143 ListIterator<PcepErrorObject> pcepErrorObjIterator = llerrorObjList.listIterator();
144 log.debug("<error-obj-list> :");
145 while (pcepErrorObjIterator.hasNext()) {
146 pcepErrorObjIterator.next().print();
147 }
148
149 log.debug("OpenObject:");
150 if (openObject != null) {
151 openObject.print();
152 }
153 }
bharat saraswalf7364db2015-08-11 13:39:31 +0530154
155 @Override
156 public String toString() {
157 ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
158
159 if (openObject == null) {
160 toStrHelper
161 .add("error Obj List", llerrorObjList);
162 } else {
163 toStrHelper
164 .add("error Obj List", llerrorObjList)
165 .add("open Object", openObject);
166 }
167 return toStrHelper.toString();
168 }
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700169}