/**
@header@
*/
package org.pcmm.gates.impl;
import org.pcmm.base.IPCMMBaseObject;
import org.pcmm.gates.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
/**
*
* = []
*
*
*/
public class PCMMGateReq implements IPCMMGate {
public final static Logger logger = LoggerFactory.getLogger(PCMMGateReq.class);
private boolean multicast;
private IGateID gateID;
private IAMID iamid;
private IPCMMError error;
private ISubscriberID subscriberID;
private ITransactionID transactionID;
private IGateSpec gateSpec;
private ITrafficProfile trafficProfile;
private IClassifier classifier;
public PCMMGateReq() {
}
public PCMMGateReq(byte[] data) {
short len, offset;
byte sNum, sType;
len = offset = 0;
sNum = sType = (byte) 0;
while (offset + 5 < data.length) {
len = 0;
len |= ((short) data[offset]) << 8;
len |= ((short) data[offset + 1]) & 0xFF;
sNum = data[offset + 2];
sType = data[offset + 3];
byte[] dataBuffer = Arrays.copyOfRange(data, offset, offset + len);
switch (sNum) {
case IGateID.SNUM:
setGateID(new GateID(dataBuffer));
break;
case IAMID.SNUM:
setAMID(new AMID(dataBuffer));
break;
case ISubscriberID.SNUM:
setSubscriberID(new SubscriberID(dataBuffer));
break;
case ITransactionID.SNUM:
setTransactionID(new TransactionID(dataBuffer));
break;
case IGateSpec.SNUM:
setGateSpec(new GateSpec(dataBuffer));
break;
case ITrafficProfile.SNUM:
setTrafficProfile(new BestEffortService(dataBuffer));
break;
case IClassifier.SNUM:
setClassifier(new Classifier(dataBuffer));
break;
case IPCMMError.SNUM:
error = new PCMMError(dataBuffer);
break;
default:
logger.warn("Unhandled Object skept : S-NUM=" + sNum
+ " S-TYPE=" + sType + " LEN=" + len);
}
offset += len;
}
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#isMulticast()
*/
@Override
public boolean isMulticast() {
// TODO Auto-generated method stub
return multicast;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#setGateID(short)
*/
@Override
public void setGateID(IGateID gateid) {
this.gateID = gateid;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#setAMID(org.pcmm.gates.IAMID)
*/
@Override
public void setAMID(IAMID iamid) {
this.iamid = iamid;
}
/*
* (non-Javadoc)
*
* @see
* org.pcmm.gates.IPCMMGate#getSubscriberID(org.pcmm.gates.ISubscriberID)
*/
@Override
public void setSubscriberID(ISubscriberID subscriberID) {
this.subscriberID = subscriberID;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getGateSpec(org.pcmm.gates.IGateSpec)
*/
@Override
public void setGateSpec(IGateSpec gateSpec) {
this.gateSpec = gateSpec;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getClassifier(org.pcmm.gates.IClassifier)
*/
@Override
public void setClassifier(IClassifier classifier) {
this.classifier = classifier;
}
/*
* (non-Javadoc)
*
* @see
* org.pcmm.gates.IPCMMGate#getTrafficProfile(org.pcmm.gates.ITrafficProfile
* )
*/
@Override
public void setTrafficProfile(ITrafficProfile profile) {
this.trafficProfile = profile;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getGateID()
*/
@Override
public IGateID getGateID() {
return gateID;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getAMID()
*/
@Override
public IAMID getAMID() {
return iamid;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getSubscriberID()
*/
@Override
public ISubscriberID getSubscriberID() {
return subscriberID;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getGateSpec()
*/
@Override
public IGateSpec getGateSpec() {
return gateSpec;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getClassifier()
*/
@Override
public IClassifier getClassifier() {
return classifier;
}
/*
* (non-Javadoc)
*
* @see org.pcmm.gates.IPCMMGate#getTrafficProfile()
*/
@Override
public ITrafficProfile getTrafficProfile() {
return trafficProfile;
}
@Override
public void setTransactionID(ITransactionID transactionID) {
this.transactionID = transactionID;
}
@Override
public ITransactionID getTransactionID() {
return transactionID;
}
public IPCMMError getError() {
return error;
}
public void setError(IPCMMError error) {
this.error = error;
}
@Override
public byte[] getData() {
byte[] array = new byte[0];
if (getTransactionID() != null) {
array = fill(array, getTransactionID());
}
if (getGateID() != null) {
array = fill(array, getGateID());
}
if (getAMID() != null) {
array = fill(array, getAMID());
}
if (getSubscriberID() != null) {
array = fill(array, getSubscriberID());
}
if (getGateSpec() != null) {
array = fill(array, getGateSpec());
}
if (getTrafficProfile() != null) {
array = fill(array, getTrafficProfile());
}
if (getClassifier() != null) {
array = fill(array, getClassifier());
}
return array;
}
private byte[] fill(byte[] array, IPCMMBaseObject obj) {
byte[] a = obj.getAsBinaryArray();
int offset = array.length;
array = Arrays.copyOf(array, offset + a.length);
System.arraycopy(a, 0, array, offset, a.length);
return array;
}
}