blob: 98ad41eeca378ec4ed9a65fbb42141c6a82d8bf3 [file] [log] [blame]
Thomas Vachuska58de4162015-09-10 16:15:33 -07001/*
2 * Copyright 2015 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Sho SHIMIZU74361c12015-08-11 12:31:48 -070016package org.onosproject.pcepio.types;
17
18import java.util.LinkedList;
Mahesh Poojary Sf1bbd362016-02-25 18:19:59 +053019import java.util.List;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070020import java.util.ListIterator;
21
22import org.jboss.netty.buffer.ChannelBuffer;
23import org.onosproject.pcepio.exceptions.PcepParseException;
24import org.onosproject.pcepio.protocol.PcepErrorObject;
25import org.onosproject.pcepio.protocol.PcepOpenObject;
26import org.slf4j.Logger;
27import org.slf4j.LoggerFactory;
28
bharat saraswalf7364db2015-08-11 13:39:31 +053029import com.google.common.base.MoreObjects;
bharat saraswalf7364db2015-08-11 13:39:31 +053030
bharat saraswale1806302015-08-21 12:16:46 +053031/**
Sho SHIMIZU74361c12015-08-11 12:31:48 -070032 * Provide the error object list with open object.
33 */
34public class ErrorObjListWithOpen {
35 //errorObjList is mandatory
Mahesh Poojary Sf1bbd362016-02-25 18:19:59 +053036 private List<PcepErrorObject> llerrorObjList;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070037 // openObject is optional
bharat saraswalf7364db2015-08-11 13:39:31 +053038 private PcepOpenObject openObject;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070039 // flag to check if open object is set or not
bharat saraswale1806302015-08-21 12:16:46 +053040 private boolean isOpenObjectSet;
Sho SHIMIZU74361c12015-08-11 12:31:48 -070041 protected static final Logger log = LoggerFactory.getLogger(ErrorObjListWithOpen.class);
42
bharat saraswale1806302015-08-21 12:16:46 +053043 /**
44 * Constructor to initialize Error and OPEN object.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070045 *
bharat saraswale1806302015-08-21 12:16:46 +053046 * @param errObj ERROR object list
47 * @param openObj OPEN object
Sho SHIMIZU74361c12015-08-11 12:31:48 -070048 */
Mahesh Poojary Sf1bbd362016-02-25 18:19:59 +053049 public ErrorObjListWithOpen(List<PcepErrorObject> errObj, PcepOpenObject openObj) {
Sho SHIMIZU74361c12015-08-11 12:31:48 -070050 this.llerrorObjList = errObj;
51 this.openObject = openObj;
52 if (openObj != null) {
53 isOpenObjectSet = true;
54 } else {
55 isOpenObjectSet = false;
56 }
57 }
58
bharat saraswale1806302015-08-21 12:16:46 +053059 /**
60 * Constructor to initialize ERROR Object.
Sho SHIMIZU74361c12015-08-11 12:31:48 -070061 *
bharat saraswale1806302015-08-21 12:16:46 +053062 * @param errObj ERROR Object list
Sho SHIMIZU74361c12015-08-11 12:31:48 -070063 */
Mahesh Poojary Sf1bbd362016-02-25 18:19:59 +053064 public ErrorObjListWithOpen(List<PcepErrorObject> errObj) {
Sho SHIMIZU74361c12015-08-11 12:31:48 -070065 this.llerrorObjList = errObj;
66 this.openObject = null;
67 isOpenObjectSet = false;
68 }
69
bharat saraswalf7364db2015-08-11 13:39:31 +053070 /**
bharat saraswale1806302015-08-21 12:16:46 +053071 * Return list of Error Types.
bharat saraswalf7364db2015-08-11 13:39:31 +053072 *
bharat saraswale1806302015-08-21 12:16:46 +053073 * @return error types list
bharat saraswalf7364db2015-08-11 13:39:31 +053074 */
Mahesh Poojary Sf1bbd362016-02-25 18:19:59 +053075 public List<Integer> getErrorType() {
76 List<Integer> errorType = new LinkedList<>();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070077 if (llerrorObjList != null) {
78 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
79 int error;
80 PcepErrorObject errorObj;
81 while (errObjListIterator.hasNext()) {
bharat saraswalf7364db2015-08-11 13:39:31 +053082 errorObj = errObjListIterator.next();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070083 error = errorObj.getErrorType();
84 errorType.add(error);
85 }
86 }
87 return errorType;
88 }
89
bharat saraswalf7364db2015-08-11 13:39:31 +053090 /**
bharat saraswale1806302015-08-21 12:16:46 +053091 * Return list of Error Values.
bharat saraswalf7364db2015-08-11 13:39:31 +053092 *
bharat saraswale1806302015-08-21 12:16:46 +053093 * @return error values list
bharat saraswalf7364db2015-08-11 13:39:31 +053094 */
Mahesh Poojary Sf1bbd362016-02-25 18:19:59 +053095 public List<Integer> getErrorValue() {
96 List<Integer> errorValue = new LinkedList<>();
Sho SHIMIZU74361c12015-08-11 12:31:48 -070097 if (llerrorObjList != null) {
98 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
99 int error;
100 PcepErrorObject errorObj;
101 while (errObjListIterator.hasNext()) {
bharat saraswalf7364db2015-08-11 13:39:31 +0530102 errorObj = errObjListIterator.next();
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700103 error = errorObj.getErrorValue();
104 errorValue.add(error);
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700105 }
106 }
107 return errorValue;
108 }
bharat saraswalf7364db2015-08-11 13:39:31 +0530109
110 /**
bharat saraswale1806302015-08-21 12:16:46 +0530111 * Checks whether ERROR Object list is empty or not.
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700112 *
bharat saraswale1806302015-08-21 12:16:46 +0530113 * @return true if ERROR Object list is empty otherwise false
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700114 */
115 public boolean isErrorObjListWithOpenPresent() {
116 // ( <error-obj-list> [<Open>]
117 // At least in this case <error-obj-list> should be present.
Phanendra Mandaf346ea82015-09-04 15:21:39 -0700118 return !this.llerrorObjList.isEmpty();
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700119 }
120
bharat saraswalf7364db2015-08-11 13:39:31 +0530121 /**
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700122 * Write Error Object List and Open Object to channel buffer.
123 *
bharat saraswale1806302015-08-21 12:16:46 +0530124 * @param cb output channel buffer
125 * @return length of written Error object list with open
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700126 * @throws PcepParseException when mandatory fields are not set
127 */
bharat saraswale1806302015-08-21 12:16:46 +0530128 public int write(ChannelBuffer cb) throws PcepParseException {
129 int iLenStartIndex = cb.writerIndex();
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700130 boolean bIsErrObjListFound = false;
131
132 //<error-obj-list> is mandatory , if not present throw exception.
133 if (llerrorObjList != null) {
134 ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
135 while (errObjListIterator.hasNext()) {
bharat saraswale1806302015-08-21 12:16:46 +0530136 errObjListIterator.next().write(cb);
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700137 bIsErrObjListFound = true;
138 }
139 }
140
141 if (!bIsErrObjListFound) {
bharat saraswale1806302015-08-21 12:16:46 +0530142 throw new PcepParseException("<error-obj-list> is mandatory.");
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700143 }
144
145 //Open Object is optional , if present write.
146 if (openObject != null) {
bharat saraswale1806302015-08-21 12:16:46 +0530147 openObject.write(cb);
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700148 }
149
bharat saraswale1806302015-08-21 12:16:46 +0530150 return cb.writerIndex() - iLenStartIndex;
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700151 }
bharat saraswalf7364db2015-08-11 13:39:31 +0530152
153 @Override
154 public String toString() {
Sho SHIMIZU7cdbcf72015-09-03 14:43:05 -0700155 return MoreObjects.toStringHelper(getClass())
156 .omitNullValues()
157 .add("ErrorObjList", llerrorObjList)
158 .add("Open", openObject)
159 .toString();
bharat saraswalf7364db2015-08-11 13:39:31 +0530160 }
Sho SHIMIZU74361c12015-08-11 12:31:48 -0700161}