blob: 9b2f5aadf02908b858267444d2a96f88bacbb18d [file] [log] [blame]
/*
* Copyright 2015-present Open Networking Foundation
*
* 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.protocol.ver1;
import org.jboss.netty.buffer.ChannelBuffer;
import org.onosproject.pcepio.exceptions.PcepParseException;
import org.onosproject.pcepio.protocol.PcepAttribute;
import org.onosproject.pcepio.protocol.PcepEroObject;
import org.onosproject.pcepio.protocol.PcepMsgPath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.MoreObjects;
/**
* Provides PCEP Message PAth for update message.
* Reference :PCE extensions for stateful draft-ietf-pce-stateful-pce-10.
*/
public class PcepMsgPathVer1 implements PcepMsgPath {
/*
* <path> ::= <ERO><attribute-list>
*/
private static final Logger log = LoggerFactory.getLogger(PcepMsgPathVer1.class);
//PcepEroObject
private PcepEroObject eroObj;
private boolean isEroObjectSet;
// PcepAttribute
private PcepAttribute attrList;
private boolean isAttributeListSet;
/**
* constructor to initialize objects.
*/
public PcepMsgPathVer1() {
eroObj = null;
attrList = null;
isEroObjectSet = false;
isAttributeListSet = false;
}
@Override
public PcepEroObject getEroObject() {
return eroObj;
}
@Override
public PcepAttribute getPcepAttribute() {
return attrList;
}
@Override
public void setEroObject(PcepEroObject eroObj) {
this.eroObj = eroObj;
}
@Override
public void setPcepAttribute(PcepAttribute attrList) {
this.attrList = attrList;
}
/**
* constructor to initialize member variables.
*
* @param eroObj pcep ero object
* @param attrList pcep attribute
*/
public PcepMsgPathVer1(PcepEroObject eroObj, PcepAttribute attrList) {
this.eroObj = eroObj;
isEroObjectSet = true;
this.attrList = attrList;
if (attrList == null) {
isAttributeListSet = false;
} else {
isAttributeListSet = true;
}
}
@Override
public PcepMsgPath read(ChannelBuffer cb) throws PcepParseException {
PcepEroObject eroObj;
PcepAttribute attrList;
eroObj = PcepEroObjectVer1.read(cb);
attrList = PcepAttributeVer1.read(cb);
return new PcepMsgPathVer1(eroObj, attrList);
}
@Override
public int write(ChannelBuffer cb) throws PcepParseException {
int iLenStartIndex = cb.writerIndex();
//write Object header
if (this.isEroObjectSet) {
this.eroObj.write(cb);
}
if (this.isAttributeListSet) {
attrList.write(cb);
}
return cb.writerIndex() - iLenStartIndex;
}
/**
* Builder class for PCEP Message path.
*/
public static class Builder implements PcepMsgPath.Builder {
private boolean bIsEroObjectSet = false;
private boolean bIsPcepAttributeSet = false;
//PCEP ERO Object
private PcepEroObject eroObject;
//PCEP Attribute list
private PcepAttribute pcepAttribute;
@Override
public PcepMsgPath build() throws PcepParseException {
//PCEP ERO Object
PcepEroObject eroObject = null;
//PCEP Attribute list
PcepAttribute pcepAttribute = null;
if (!this.bIsEroObjectSet) {
throw new PcepParseException("ERO Object NOT Set while building PcepMsgPath.");
} else {
eroObject = this.eroObject;
}
if (!this.bIsPcepAttributeSet) {
throw new PcepParseException("Pcep Attributes NOT Set while building PcepMsgPath.");
} else {
pcepAttribute = this.pcepAttribute;
}
return new PcepMsgPathVer1(eroObject, pcepAttribute);
}
@Override
public PcepEroObject getEroObject() {
return this.eroObject;
}
@Override
public PcepAttribute getPcepAttribute() {
return this.pcepAttribute;
}
@Override
public Builder setEroObject(PcepEroObject eroObject) {
this.eroObject = eroObject;
this.bIsEroObjectSet = true;
return this;
}
@Override
public Builder setPcepAttribute(PcepAttribute pcepAttribute) {
this.pcepAttribute = pcepAttribute;
this.bIsPcepAttributeSet = true;
return this;
}
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
.add("EroObject", eroObj)
.add("AttributeList", attrList)
.toString();
}
}