/*
* TeleStax, Open Source Cloud Communications Copyright 2012.
* and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.mobicents.protocols.ss7.cap.EsiGprs;
import java.io.IOException;
import org.mobicents.protocols.asn.AsnException;
import org.mobicents.protocols.asn.AsnInputStream;
import org.mobicents.protocols.asn.AsnOutputStream;
import org.mobicents.protocols.asn.Tag;
import org.mobicents.protocols.ss7.cap.api.CAPException;
import org.mobicents.protocols.ss7.cap.api.CAPParsingComponentException;
import org.mobicents.protocols.ss7.cap.api.CAPParsingComponentExceptionReason;
import org.mobicents.protocols.ss7.cap.api.EsiGprs.PdpContextchangeOfPositionSpecificInformation;
import org.mobicents.protocols.ss7.cap.api.primitives.TimeAndTimezone;
import org.mobicents.protocols.ss7.cap.api.service.gprs.primitive.AccessPointName;
import org.mobicents.protocols.ss7.cap.api.service.gprs.primitive.EndUserAddress;
import org.mobicents.protocols.ss7.cap.api.service.gprs.primitive.QualityOfService;
import org.mobicents.protocols.ss7.cap.primitives.SequenceBase;
import org.mobicents.protocols.ss7.cap.primitives.TimeAndTimezoneImpl;
import org.mobicents.protocols.ss7.cap.service.gprs.primitive.AccessPointNameImpl;
import org.mobicents.protocols.ss7.cap.service.gprs.primitive.EndUserAddressImpl;
import org.mobicents.protocols.ss7.cap.service.gprs.primitive.QualityOfServiceImpl;
import org.mobicents.protocols.ss7.map.api.MAPException;
import org.mobicents.protocols.ss7.map.api.MAPParsingComponentException;
import org.mobicents.protocols.ss7.map.api.primitives.GSNAddress;
import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.GPRSChargingID;
import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.LocationInformationGPRS;
import org.mobicents.protocols.ss7.map.primitives.GSNAddressImpl;
import org.mobicents.protocols.ss7.map.service.mobility.subscriberInformation.GPRSChargingIDImpl;
import org.mobicents.protocols.ss7.map.service.mobility.subscriberInformation.LocationInformationGPRSImpl;
/**
*
* @author Lasith Waruna Perera
*
*/
public class PdpContextchangeOfPositionSpecificInformationImpl extends SequenceBase implements
PdpContextchangeOfPositionSpecificInformation {
public static final int _ID_accessPointName = 0;
public static final int _ID_chargingID = 1;
public static final int _ID_locationInformationGPRS = 2;
public static final int _ID_endUserAddress = 3;
public static final int _ID_qualityOfService = 4;
public static final int _ID_timeAndTimezone = 5;
public static final int _ID_gsnAddress = 6;
public static final int _ID_PdpContextchangeOfPositionSpecificInformation = 1;
private AccessPointName accessPointName;
private GPRSChargingID chargingID;
private LocationInformationGPRS locationInformationGPRS;
private EndUserAddress endUserAddress;
private QualityOfService qualityOfService;
private TimeAndTimezone timeAndTimezone;
private GSNAddress gsnAddress;
public PdpContextchangeOfPositionSpecificInformationImpl() {
super("PdpContextchangeOfPositionSpecificInformation");
}
public PdpContextchangeOfPositionSpecificInformationImpl(AccessPointName accessPointName, GPRSChargingID chargingID,
LocationInformationGPRS locationInformationGPRS, EndUserAddress endUserAddress, QualityOfService qualityOfService,
TimeAndTimezone timeAndTimezone, GSNAddress gsnAddress) {
super("PdpContextchangeOfPositionSpecificInformation");
this.accessPointName = accessPointName;
this.chargingID = chargingID;
this.locationInformationGPRS = locationInformationGPRS;
this.endUserAddress = endUserAddress;
this.qualityOfService = qualityOfService;
this.timeAndTimezone = timeAndTimezone;
this.gsnAddress = gsnAddress;
}
@Override
public AccessPointName getAccessPointName() {
return this.accessPointName;
}
@Override
public GPRSChargingID getChargingID() {
return this.chargingID;
}
@Override
public LocationInformationGPRS getLocationInformationGPRS() {
return this.locationInformationGPRS;
}
@Override
public EndUserAddress getEndUserAddress() {
return this.endUserAddress;
}
@Override
public QualityOfService getQualityOfService() {
return this.qualityOfService;
}
@Override
public TimeAndTimezone getTimeAndTimezone() {
return this.timeAndTimezone;
}
@Override
public GSNAddress getGSNAddress() {
return this.gsnAddress;
}
public int getTag() throws CAPException {
return Tag.SEQUENCE;
}
public int getTagClass() {
return Tag.CLASS_CONTEXT_SPECIFIC;
}
@Override
protected void _decode(AsnInputStream asnIS, int length) throws CAPParsingComponentException, IOException, AsnException,
MAPParsingComponentException {
this.accessPointName = null;
this.chargingID = null;
this.locationInformationGPRS = null;
this.endUserAddress = null;
this.qualityOfService = null;
this.timeAndTimezone = null;
this.gsnAddress = null;
AsnInputStream ais = asnIS.readSequenceStreamData(length);
while (true) {
if (ais.available() == 0)
break;
int tag = ais.readTag();
if (ais.getTagClass() == Tag.CLASS_CONTEXT_SPECIFIC) {
switch (tag) {
case _ID_accessPointName:
if (!ais.isTagPrimitive())
throw new CAPParsingComponentException("Error while decoding " + _PrimitiveName
+ ".accessPointName: Parameter is not primitive",
CAPParsingComponentExceptionReason.MistypedParameter);
this.accessPointName = new AccessPointNameImpl();
((AccessPointNameImpl) this.accessPointName).decodeAll(ais);
break;
case _ID_chargingID:
if (!ais.isTagPrimitive())
throw new CAPParsingComponentException("Error while decoding " + _PrimitiveName
+ ".chargingID: Parameter is not primitive",
CAPParsingComponentExceptionReason.MistypedParameter);
this.chargingID = new GPRSChargingIDImpl();
((GPRSChargingIDImpl) this.chargingID).decodeAll(ais);
break;
case _ID_locationInformationGPRS:
if (ais.isTagPrimitive())
throw new CAPParsingComponentException("Error while decoding " + _PrimitiveName
+ ".locationInformationGPRS: Parameter is primitive",
CAPParsingComponentExceptionReason.MistypedParameter);
this.locationInformationGPRS = new LocationInformationGPRSImpl();
((LocationInformationGPRSImpl) this.locationInformationGPRS).decodeAll(ais);
break;
case _ID_endUserAddress:
if (ais.isTagPrimitive())
throw new CAPParsingComponentException("Error while decoding " + _PrimitiveName
+ ".endUserAddress: Parameter is primitive",
CAPParsingComponentExceptionReason.MistypedParameter);
this.endUserAddress = new EndUserAddressImpl();
((EndUserAddressImpl) this.endUserAddress).decodeAll(ais);
break;
case _ID_qualityOfService:
if (ais.isTagPrimitive())
throw new CAPParsingComponentException("Error while decoding " + _PrimitiveName
+ ".qualityOfService: Parameter is primitive",
CAPParsingComponentExceptionReason.MistypedParameter);
this.qualityOfService = new QualityOfServiceImpl();
((QualityOfServiceImpl) this.qualityOfService).decodeAll(ais);
break;
case _ID_timeAndTimezone:
if (!ais.isTagPrimitive())
throw new CAPParsingComponentException("Error while decoding " + _PrimitiveName
+ ".timeAndTimezone: Parameter is not primitive",
CAPParsingComponentExceptionReason.MistypedParameter);
this.timeAndTimezone = new TimeAndTimezoneImpl();
((TimeAndTimezoneImpl) this.timeAndTimezone).decodeAll(ais);
break;
case _ID_gsnAddress:
if (!ais.isTagPrimitive())
throw new CAPParsingComponentException("Error while decoding " + _PrimitiveName
+ ".gsnAddress: Parameter is not primitive",
CAPParsingComponentExceptionReason.MistypedParameter);
this.gsnAddress = new GSNAddressImpl();
((GSNAddressImpl) this.gsnAddress).decodeAll(ais);
break;
default:
ais.advanceElement();
break;
}
} else {
ais.advanceElement();
}
}
}
@Override
public void encodeData(AsnOutputStream asnOs) throws CAPException {
try {
if (this.accessPointName != null)
((AccessPointNameImpl) this.accessPointName).encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC, _ID_accessPointName);
if (this.chargingID != null)
((GPRSChargingIDImpl) this.chargingID).encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC, _ID_chargingID);
if (this.locationInformationGPRS != null)
((LocationInformationGPRSImpl) this.locationInformationGPRS).encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC,
_ID_locationInformationGPRS);
if (this.endUserAddress != null)
((EndUserAddressImpl) this.endUserAddress).encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC, _ID_endUserAddress);
if (this.qualityOfService != null)
((QualityOfServiceImpl) this.qualityOfService).encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC,
_ID_qualityOfService);
if (this.timeAndTimezone != null)
((TimeAndTimezoneImpl) this.timeAndTimezone).encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC, _ID_timeAndTimezone);
if (this.gsnAddress != null)
((GSNAddressImpl) this.gsnAddress).encodeAll(asnOs, Tag.CLASS_CONTEXT_SPECIFIC, _ID_gsnAddress);
} catch (MAPException e) {
throw new CAPException("MAPException when encoding " + _PrimitiveName + ": " + e.getMessage(), e);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(_PrimitiveName + " [");
if (this.accessPointName != null) {
sb.append("accessPointName=");
sb.append(this.accessPointName.toString());
sb.append(", ");
}
if (this.chargingID != null) {
sb.append("chargingID=");
sb.append(this.chargingID.toString());
sb.append(", ");
}
if (this.locationInformationGPRS != null) {
sb.append("locationInformationGPRS=");
sb.append(this.locationInformationGPRS.toString());
sb.append(", ");
}
if (this.endUserAddress != null) {
sb.append("endUserAddress=");
sb.append(this.endUserAddress.toString());
sb.append(", ");
}
if (this.qualityOfService != null) {
sb.append("qualityOfService=");
sb.append(this.qualityOfService.toString());
sb.append(", ");
}
if (this.timeAndTimezone != null) {
sb.append("timeAndTimezone=");
sb.append(this.timeAndTimezone.toString());
sb.append(", ");
}
if (this.gsnAddress != null) {
sb.append("gsnAddress=");
sb.append(this.gsnAddress.toString());
sb.append(" ");
}
sb.append("]");
return sb.toString();
}
}