Class SimpleMeter

  • All Implemented Interfaces:
    ResourceMeter, ResourceRequest
    Direct Known Subclasses:
    NotifyingMeter


    public class SimpleMeter
    extends Object
    implements ResourceMeter, ResourceRequest
    A SimpleMeter counts resource requests and releases and allocates from an optional parent. The amount is validated before requesting allocation from the parent. Subclasses can override the validation to include bounds checking, notification, callbacks, etc.
    Since:
    8u40
    • Constructor Detail

      • SimpleMeter

        protected SimpleMeter​(ResourceType type,
                              ResourceRequest parent)
        Constructor for subclasses.
        Parameters:
        type - the ResourceType for the meter
        parent - a ResourceRequest used as the parent to allocate from; may be null
    • Method Detail

      • create

        public static SimpleMeter create​(ResourceType type)
        Returns a new SimpleMeter with the ResourceType.
        Parameters:
        type - the ResourceType
        Returns:
        a new SimpleMeter
      • create

        public static SimpleMeter create​(ResourceType type,
                                         ResourceRequest parent)
        Returns a new SimpleMeter with the ResourceType and allocating from a parent.
        Parameters:
        type - the ResourceType
        parent - the parent ResourceMeter; may be null
        Returns:
        a new SimpleMeter
      • getValue

        public final long getValue​()
        Description copied from interface: ResourceMeter
        Returns the current net value of the ResourceMeter. The net value is the difference between the cumulative amounts allocated minus all amounts released.
        Specified by:
        getValue in interface ResourceMeter
        Returns:
        the current net value of the meter
      • getAllocated

        public final long getAllocated​()
        Description copied from interface: ResourceMeter
        Returns the cumulative total of allocations from the ResourceMeter.
        Specified by:
        getAllocated in interface ResourceMeter
        Returns:
        the total allocated from the meter
      • getParent

        public final ResourceRequest getParent​()
        Returns the parent ResourceRequest.
        Returns:
        Returns the parent ResourceRequest; may be null
      • request

        public final long request​(long amount,
                                  ResourceId id)
        Returns the validated and allocated amount and adjusts the meter. For allocation, amount greater than zero, the amount is applied to the meter before validation so it is immediately visible. If the validation or allocation from the parent is for a different amount the delta is restored to the meter. For releasing a resource, amount less than zero, the amount is applied after validation to avoid premature release of the resource.
        Specified by:
        request in interface ResourceRequest
        Parameters:
        amount - the amount to allocate; if zero nothing is done
        id - the ResourceId for the resource instance; may be null
        Returns:
        the allocated amount, zero, positive or negative
      • validate

        protected long validate​(long previous,
                                long amount,
                                ResourceId id)
                         throws ResourceRequestDeniedException
        Validate the amount returning the validated amount. Override to apply bounds checks and callbacks.

        For allocation, positive amounts, the amount is applied to the meter before validation so it is immediately visible. For releasing a resource, negative amounts, the amount is applied after validation to avoid premature release of the resource. If the amount returned is different than requested the meter will be corrected with the difference.

        Parameters:
        previous - the meter value before the current request
        amount - an amount, positive to allocate, negative to release
        id - the ResourceId for the resource instance; may be null
        Returns:
        the validated amount, zero or throw an exception to deny; return a value with the same sign as the amount
        Throws:
        ResourceRequestDeniedException - if the amount cannot be satisfied
      • toString

        public String toString​()
        Returns a string representation of the meter.
        Overrides:
        toString in class Object
        Returns:
        a string representation of the meter
      • equals

        public final boolean equals​(Object obj)
        Indicates whether some other object is the same object as this one.
        Overrides:
        equals in class Object
        Parameters:
        obj - the reference object with which to compare
        Returns:
        true if this object is the same as the obj argument; false otherwise
        See Also:
        Object.hashCode(), HashMap