Class TariffSpecification

  • All Implemented Interfaces:
    ValidatableMessage

    @Domain(fields={"broker","powerType","expiration","minDuration","signupPayment","earlyWithdrawPayment","periodicPayment","supersedes"})
    public class TariffSpecification
    extends TariffMessage
    Represents a Tariff offered by a Broker to customers. A TariffSpecification may specify upfront and periodic payments, and aggregates a set of Rate instances that specify prices for energy in various circumstances. This class is a value type -- a serializable, immutable data structure. You need to initialize a Tariff from it to make serious use of it. New tariffs and their Rates are communicated to Customers and to Brokers when tariffs are published.

    TariffSpecifications and their associated Rates and HourlyCharges are specified from the Customer's viewpoint in terms of quantities and charges. In other words, a positive charge means the broker pays the customer, while a positive energy quantity means the broker sends energy to the customer.

    Note: Must be serialized "deep" to gather up the Rates and associated HourlyCharge instances.

    State log entry format for new instance:
    long brokerId, PowerType powerType

    State log fields for readResolve():
    long brokerId, PowerType powerType, long minDuration,
      double signupPayment, double earlyWithdrawPayment,
      double periodicPayment, List supersedes

    Author:
    John Collins
    • Constructor Detail

      • TariffSpecification

        public TariffSpecification​(Broker broker,
                                   PowerType powerType)
        Creates a new TariffSpecification for a broker and a specific powerType. Attributes are provided by the fluent withX() methods.
      • TariffSpecification

        protected TariffSpecification()
    • Method Detail

      • getPowerType

        public PowerType getPowerType()
      • getExpiration

        public org.joda.time.Instant getExpiration()
      • withExpiration

        public TariffSpecification withExpiration​(org.joda.time.Instant expiration)
        Sets the expiration date for this tariff. After this date, customers will no longer be allowed to subscribe.
      • getMinDuration

        public long getMinDuration()
      • withMinDuration

        @StateChange
        public TariffSpecification withMinDuration​(long minDuration)
        Sets the minimum duration of a subscription for this tariff. If a customer wishes to withdraw earlier than the minimum duration, it may be required to pay a fee as specified by the withdrawPayment.
      • getSignupPayment

        public double getSignupPayment()
      • withSignupPayment

        @StateChange
        public TariffSpecification withSignupPayment​(double signupPayment)
        Sets the signup payment for new subscriptions. This is a positive number if the broker pays the customer.
      • getEarlyWithdrawPayment

        public double getEarlyWithdrawPayment()
      • withEarlyWithdrawPayment

        @StateChange
        public TariffSpecification withEarlyWithdrawPayment​(double earlyWithdrawPayment)
        Sets the payment for a customer who withdraws from a subscription to this tariff before the minimumDuration has expired. A negative number indicates that the customer pays the broker.
      • getPeriodicPayment

        public double getPeriodicPayment()
      • withPeriodicPayment

        @StateChange
        public TariffSpecification withPeriodicPayment​(double periodicPayment)
        Sets the daily payment per customer for subscriptions to this tariff. A negative number indicates that the customer pays the broker.
      • getRates

        public List<Rate> getRates()
        Returns the Rate instances from among the rates in this tariff spec.
      • getRegulationRates

        public List<RegulationRate> getRegulationRates()
        Returns the RegulationRate instances from among the rates in this tariff spec.
      • hasRegulationRate

        public boolean hasRegulationRate()
        Returns true just in case this tariff has one or more RegulationRates.
      • getSupersedes

        public List<Long> getSupersedes()
      • addSupersedes

        @StateChange
        public TariffSpecification addSupersedes​(long specId)
        Indicates that this tariff supersedes the tariff specified by the specId, the id of the superseded tariff. Setting this value has no effect unless the superseded tariff is revoked by sending a TariffRevoke message for that tariff.
      • modifyLogArgs

        public static void modifyLogArgs​(String[] args)
        Modify read-resolve args when reading state log -- see Issue #1056
      • isValid

        public boolean isValid()
        A TariffSpecification is valid if
        • it has a least one Rate, and all its Rates are valid;
        • minDuration is non-negative;
        Specified by:
        isValid in interface ValidatableMessage
        Overrides:
        isValid in class TariffMessage
      • toString

        public String toString()
        Returns a String giving the id, broker username, and powertype
        Overrides:
        toString in class Object