/* * Copyright 2015-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.pcepio.types; import java.util.LinkedList; import java.util.List; 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; import com.google.common.base.MoreObjects; /** * Provide the error object list with open object. */ public class ErrorObjListWithOpen { //errorObjList is mandatory private List<PcepErrorObject> llerrorObjList; // openObject is optional private PcepOpenObject openObject; // flag to check if open object is set or not private boolean isOpenObjectSet; protected static final Logger log = LoggerFactory.getLogger(ErrorObjListWithOpen.class); /** * Constructor to initialize Error and OPEN object. * * @param errObj ERROR object list * @param openObj OPEN object */ public ErrorObjListWithOpen(List<PcepErrorObject> errObj, PcepOpenObject openObj) { this.llerrorObjList = errObj; this.openObject = openObj; if (openObj != null) { isOpenObjectSet = true; } else { isOpenObjectSet = false; } } /** * Constructor to initialize ERROR Object. * * @param errObj ERROR Object list */ public ErrorObjListWithOpen(List<PcepErrorObject> errObj) { this.llerrorObjList = errObj; this.openObject = null; isOpenObjectSet = false; } /** * Return list of Error Types. * * @return error types list */ public List<Integer> getErrorType() { List<Integer> errorType = new LinkedList<>(); 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; } /** * Return list of Error Values. * * @return error values list */ public List<Integer> getErrorValue() { List<Integer> errorValue = new LinkedList<>(); 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 true if ERROR Object list is empty otherwise false */ public boolean isErrorObjListWithOpenPresent() { // ( <error-obj-list> [<Open>] // At least in this case <error-obj-list> should be present. return !this.llerrorObjList.isEmpty(); } /** * Write Error Object List and Open Object to channel buffer. * * @param cb output channel buffer * @return length of written Error object list with open * @throws PcepParseException when mandatory fields are not set */ public int write(ChannelBuffer cb) throws PcepParseException { int iLenStartIndex = cb.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(cb); bIsErrObjListFound = true; } } if (!bIsErrObjListFound) { throw new PcepParseException("<error-obj-list> is mandatory."); } //Open Object is optional , if present write. if (openObject != null) { openObject.write(cb); } return cb.writerIndex() - iLenStartIndex; } @Override public String toString() { return MoreObjects.toStringHelper(getClass()) .omitNullValues() .add("ErrorObjList", llerrorObjList) .add("Open", openObject) .toString(); } }