package net.java.slee.resource.diameter.cca;
import net.java.slee.resource.diameter.base.DiameterAvpFactory;
import net.java.slee.resource.diameter.cca.events.avp.CcMoneyAvp;
import net.java.slee.resource.diameter.cca.events.avp.CcUnitType;
import net.java.slee.resource.diameter.cca.events.avp.CostInformationAvp;
import net.java.slee.resource.diameter.cca.events.avp.FinalUnitActionType;
import net.java.slee.resource.diameter.cca.events.avp.FinalUnitIndicationAvp;
import net.java.slee.resource.diameter.cca.events.avp.GSUPoolReferenceAvp;
import net.java.slee.resource.diameter.cca.events.avp.GrantedServiceUnitAvp;
import net.java.slee.resource.diameter.cca.events.avp.MultipleServicesCreditControlAvp;
import net.java.slee.resource.diameter.cca.events.avp.RedirectAddressType;
import net.java.slee.resource.diameter.cca.events.avp.RedirectServerAvp;
import net.java.slee.resource.diameter.cca.events.avp.RequestedServiceUnitAvp;
import net.java.slee.resource.diameter.cca.events.avp.ServiceParameterInfoAvp;
import net.java.slee.resource.diameter.cca.events.avp.SubscriptionIdAvp;
import net.java.slee.resource.diameter.cca.events.avp.SubscriptionIdType;
import net.java.slee.resource.diameter.cca.events.avp.UnitValueAvp;
import net.java.slee.resource.diameter.cca.events.avp.UsedServiceUnitAvp;
import net.java.slee.resource.diameter.cca.events.avp.UserEquipmentInfoAvp;
import net.java.slee.resource.diameter.cca.events.avp.UserEquipmentInfoType;
/**
* Factory to support the creation of Grouped AVP instances.
*
* <br>Super project: mobicents
* <br>10:54:41 AM Dec 30, 2008
* <br>
* @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
*/
public interface CreditControlAVPFactory {
public DiameterAvpFactory getBaseFactory();
/**
* Create an empty CcMoney (Grouped AVP) instance.
*
* @return
*/
CcMoneyAvp createCcMoney();
/**
* Create a CcMoney (Grouped AVP) instance using required AVP values.
*
* @param unitValue
* @return
*/
CcMoneyAvp createCcMoney(UnitValueAvp unitValue);
/**
* Create an empty CostInformation (Grouped AVP) instance.
*
* @return
*/
CostInformationAvp createCostInformation();
/**
* Create a CostInformation (Grouped AVP) instance using required AVP values.
*
* @param unitValue
* @param currencyCode
* @return
*/
CostInformationAvp createCostInformation(UnitValueAvp unitValue, long currencyCode);
/**
* Create an empty FinalUnitIndication (Grouped AVP) instance.
*
* @return
*/
FinalUnitIndicationAvp createFinalUnitIndication();
/**
* Create a FinalUnitIndication (Grouped AVP) instance using required AVP values.
*
* @param finalUnitType
* @return
*/
FinalUnitIndicationAvp createFinalUnitIndication(FinalUnitActionType finalUnitType);
/**
* Create an empty GrantedServiceUnit (Grouped AVP) instance.
*
* @return
*/
GrantedServiceUnitAvp createGrantedServiceUnit();
/**
* Create an empty GSUPoolReference (Grouped AVP) instance.
*
* @return
*/
GSUPoolReferenceAvp createGSUPoolReference();
/**
* Create a GSUPoolReference (Grouped AVP) instance using required AVP values.
*
* @param gsuPoolIdentifier
* @param ccUnitType
* @param unitValue
* @return
*/
GSUPoolReferenceAvp createGSUPoolReference(long gsuPoolIdentifier, CcUnitType ccUnitType, UnitValueAvp unitValue);
/**
* Create an empty MultipleServicesCreditControl (Grouped AVP) instance.
*
* @return
*/
MultipleServicesCreditControlAvp createMultipleServicesCreditControl();
/**
* Create an empty RedirectServer (Grouped AVP) instance.
*
* @return
*/
RedirectServerAvp createRedirectServer();
/**
* Create a RedirectServer (Grouped AVP) instance using required AVP values.
*
* @param redirectAddressType
* @param redirectServerAddress
* @return
*/
RedirectServerAvp createRedirectServer(RedirectAddressType redirectAddressType, String redirectServerAddress);
/**
* Create an empty RequestedServiceUnit (Grouped AVP) instance.
*
* @return
*/
RequestedServiceUnitAvp createRequestedServiceUnit();
/**
* Create an empty ServiceParameterInfo (Grouped AVP) instance.
*
* @return
*/
ServiceParameterInfoAvp createServiceParameterInfo();
/**
* Create a ServiceParameterInfo (Grouped AVP) instance using required AVP values.
*
* @param serviceParameterType
* @param serviceParameterValue
* @return
*/
ServiceParameterInfoAvp createServiceParameterInfo(long serviceParameterType, byte[] serviceParameterValue);
/**
* Create an empty SubscriptionId (Grouped AVP) instance.
*
* @return
*/
SubscriptionIdAvp createSubscriptionId();
/**
* Create a SubscriptionId (Grouped AVP) instance using required AVP values.
*
* @param subscriptionIdType
* @param subscriptionIdData
* @return
*/
SubscriptionIdAvp createSubscriptionId(SubscriptionIdType subscriptionIdType, String subscriptionIdData);
/**
* Create an empty UnitValue (Grouped AVP) instance.
*
* @return
*/
UnitValueAvp createUnitValue();
/**
* Create a UnitValue (Grouped AVP) instance using required AVP values.
*
* @param valueDigits
* @return
*/
UnitValueAvp createUnitValue(long valueDigits);
/**
* Create an empty UsedServiceUnit (Grouped AVP) instance.
*
* @return
*/
UsedServiceUnitAvp createUsedServiceUnit();
/**
* Create an empty EquipmentInfo (Grouped AVP) instance.
*
* @return
*/
UserEquipmentInfoAvp createUserEquipmentInfo();
/**
* Create a UserEquipmentInfo (Grouped AVP) instance using required AVP values.
*
* @param userEquipmentInfoType
* @param userEquipmentInfoValue
* @return
*/
UserEquipmentInfoAvp createUserEquipmentInfo(UserEquipmentInfoType userEquipmentInfoType, byte[] userEquipmentInfoValue);
}