package com.pcee.protocol.message.objectframe.impl.erosubobjects;
import com.pcee.protocol.message.PCEPComputationFactory;
public class GeneralizedLabelEROSubobject extends LabelEROSubobject {
/*
*
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Grid | C.S. | Identifier | n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
protected String grid;
protected String channelSpacing;
protected String identifier;
protected String n;
private int gridStartBit = 32;
private int gridEndBit = 34;
private int gridLength = 3;
private int channelSpacingStartBit = 35;
private int channelSpacingEndBit = 38;
private int channelSpacingLength = 4;
private int identifierStartBit = 39;
private int identifierEndBit = 47;
private int identifierLength = 9;
private int nStartBit = 48;
private int nEndBit = 63;
private int nLength = 16;
public GeneralizedLabelEROSubobject(String binaryString) {
NAME = "GeneralizedLabelEROSubobject";
this.setObjectBinaryString(binaryString);
}
/**
* grid
*/
public int getGridDecimalValue() {
int gridValue = (int) PCEPComputationFactory.getDecimalValue(grid);
return gridValue;
}
public String getGridBinaryString() {
return this.grid;
}
public void setGridDecimalValue(int decimalValue) {
int binaryLength = gridLength;
int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength);
String tmp = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength);
this.grid = tmp;
}
public void setGridBinaryString(String binaryString) {
this.grid= binaryString;
}
/**
* channelSpacing
*/
public int getChannelSpacingDecimalValue() {
int channelSpacingValue = (int) PCEPComputationFactory.getDecimalValue(channelSpacing);
return channelSpacingValue;
}
public String getChannelSpacingBinaryString() {
return this.channelSpacing;
}
public void setChannelSpacingDecimalValue(int decimalValue) {
int binaryLength = channelSpacingLength;
int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength);
String tmp = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength);
this.channelSpacing = tmp;
}
public void setChannelSpacingBinaryString(String binaryString) {
this.channelSpacing= binaryString;
}
/**
* identifier
*/
public int getIdentifierDecimalValue() {
int identifierValue = (int) PCEPComputationFactory.getDecimalValue(identifier);
return identifierValue;
}
public String getIdentifierBinaryString() {
return this.identifier;
}
public void setIdentifierDecimalValue(int decimalValue) {
int binaryLength = identifierLength;
int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength);
String tmp = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength);
this.identifier = tmp;
}
public void setIdentifierBinaryString(String binaryString) {
this.identifier= binaryString;
}
/**
* identifier
*/
public int getNDecimalValue() {
int nValue = (int) PCEPComputationFactory.getDecimalValue(n);
return nValue;
}
public String getNBinaryString() {
return this.n;
}
public void setNDecimalValue(int decimalValue) {
int binaryLength = nLength;
int maxValue = (int) PCEPComputationFactory.MaxValueFabrication(binaryLength);
String tmp = PCEPComputationFactory.setDecimalValue(decimalValue, maxValue, binaryLength);
this.n = tmp;
}
public void setNBinaryString(String binaryString) {
this.n= binaryString;
}
@Override
public String getObjectBinaryString() {
String binaryString = getLabelObjectHeaderBinaryString() + grid + channelSpacing + identifier + n;
return binaryString;
}
@Override
public void setObjectBinaryString(String binaryString) {
setLabelObjectHeaderBinaryString(binaryString);
String gridBinaryString = binaryString.substring(gridStartBit, gridEndBit + 1);
String channelSpacingBinaryString = binaryString.substring(channelSpacingStartBit, channelSpacingEndBit + 1);
String identifierBinaryString = binaryString.substring(identifierStartBit, identifierEndBit + 1);
String nBinaryString = binaryString.substring(nStartBit, nEndBit + 1);
this.setGridBinaryString(gridBinaryString);
this.setChannelSpacingBinaryString(channelSpacingBinaryString);
this.setIdentifierBinaryString(identifierBinaryString);
this.setNBinaryString(nBinaryString);
}
@Override
public int getByteLength() {
return getLabelObjectHeaderByteLength() + (grid.length() + channelSpacing.length() + identifier.length()+ n.length()) /8;
}
@Override
public String toString() {
String gridInfo = ", Grid =" + this.getGridDecimalValue();
String channelSpacingInfo = ", Channel Spacing =" + this.getChannelSpacingDecimalValue();
String identifierInfo = ", Identifier =" + this.getIdentifierDecimalValue();
String nInfo = ", n =" + this.getNDecimalValue();
String objectInfo = NAME + ":" + headerString() + gridInfo + channelSpacingInfo + identifierInfo + nInfo + ">";
return objectInfo;
}
public String binaryInformation() {
String gridBinaryInfo = "'" + getGridBinaryString();
String channelSpacingBinaryInfo = "'" + getChannelSpacingBinaryString();
String identifierBinaryInfo = "'" + getIdentifierBinaryString();
String nInfo = "'" + getNBinaryString();
String objectInfo = "[" + gridBinaryInfo + channelSpacingBinaryInfo + identifierBinaryInfo + nInfo + "]";
return objectInfo;
}
}