Class TimedElement

  • All Implemented Interfaces:
    SMILConstants
    Direct Known Subclasses:
    SVGAnimationElementBridge.SVGTimedElement, TimeContainer

    public abstract class TimedElement
    extends java.lang.Object
    implements SMILConstants
    An abstract base class for elements that can have timing applied to them. The concrete versions of this class do not necessarily have to be the same as the DOM class, and in fact, this will mostly be impossible unless creating new DOM classes that inherit from these elements.
    • Field Detail

      • RESTART_WHEN_NOT_ACTIVE

        public static final int RESTART_WHEN_NOT_ACTIVE
        See Also:
        Constant Field Values
      • parent

        protected TimeContainer parent
        The parent time container.
      • beginTimes

        protected TimingSpecifier[] beginTimes
        Timing specifiers for the begin times of this element.
      • endTimes

        protected TimingSpecifier[] endTimes
        Timing specifiers for the end times of this element.
      • simpleDur

        protected float simpleDur
        Duration of this element, if durMedia = false. If unspecified, it will be UNRESOLVED.
      • durMedia

        protected boolean durMedia
        Whether the simple duration of this element should be equal to the implicit duration.
      • repeatCount

        protected float repeatCount
        The number of repeats. If unspecified, it will be UNRESOLVED.
      • repeatDur

        protected float repeatDur
        The duration of repeats. If unspecified, it will be UNRESOLVED.
      • currentRepeatIteration

        protected int currentRepeatIteration
        The current repeat iteration.
      • lastRepeatTime

        protected float lastRepeatTime
        The local active time of the last repeat.
      • fillMode

        protected int fillMode
        The fill mode for this element. Uses the FILL_* constants defined in this class.
      • restartMode

        protected int restartMode
        The restart mode for this element. Uses the RESTART_* constants defined in this class.
      • min

        protected float min
        The minimum active duration of this element. If minMedia = true, it will be 0f.
      • minMedia

        protected boolean minMedia
        Whether the min value was specified as 'media'.
      • max

        protected float max
        The maximum active duration of this element. If maxMedia = true, it will be INDEFINITE.
      • maxMedia

        protected boolean maxMedia
        Whether the max value was specified as 'media'.
      • isActive

        protected boolean isActive
        Whether the element is currently active.
      • isFrozen

        protected boolean isFrozen
        Whether the element is currently frozen.
      • lastSampleTime

        protected float lastSampleTime
        The current time of this element in local active time.
      • repeatDuration

        protected float repeatDuration
        The computed repeat duration of the element.
      • beginInstanceTimes

        protected java.util.List beginInstanceTimes
        List of begin InstanceTimes.
      • endInstanceTimes

        protected java.util.List endInstanceTimes
        List of end InstanceTimes.
      • currentInterval

        protected Interval currentInterval
        The current Interval.
      • lastIntervalEnd

        protected float lastIntervalEnd
        The end time of the previous interval, initially Float.NEGATIVE_INFINITY.
      • previousInterval

        protected Interval previousInterval
        The previous interval.
      • beginDependents

        protected java.util.LinkedList beginDependents
        List of TimingSpecifiers on other elements that depend on this element's begin times.
      • endDependents

        protected java.util.LinkedList endDependents
        List of TimingSpecifiers on other elements that depend on this element's end times.
      • shouldUpdateCurrentInterval

        protected boolean shouldUpdateCurrentInterval
        Whether the list of instance times should be checked to update the current interval.
      • hasParsed

        protected boolean hasParsed
        Whether this timed element has parsed its timing attributes yet.
      • handledEvents

        protected java.util.Map handledEvents
        Map of Event objects to HashSets of TimingSpecifiers that caught them.
      • isSampling

        protected boolean isSampling
        Whether this timed element is currently being sampled.
      • hasPropagated

        protected boolean hasPropagated
        Whether an instance time update message has already been propagated to this timed element.
      • RESOURCES

        protected static final java.lang.String RESOURCES
        The error messages bundle class name.
        See Also:
        Constant Field Values
      • localizableSupport

        protected static LocalizableSupport localizableSupport
        The localizable support for the error messages.
    • Constructor Detail

      • TimedElement

        public TimedElement()
        Creates a new TimedElement.
    • Method Detail

      • getRoot

        public TimedDocumentRoot getRoot()
        Returns the root time container of this timed element.
      • getActiveTime

        public float getActiveTime()
        Returns the current active time of this element.
      • getSimpleTime

        public float getSimpleTime()
        Returns the current simple time of this element.
      • addInstanceTime

        protected float addInstanceTime​(InstanceTime time,
                                        boolean isBegin)
        Called by a TimingSpecifier of this element when a new InstanceTime is created. This will be in response to an event firing, a DOM method being called or a new Instance being created by a syncbase element.
      • removeInstanceTime

        protected float removeInstanceTime​(InstanceTime time,
                                           boolean isBegin)
        Called by a TimingSpecifier of this element when an InstanceTime should be removed. This will be in response to the pruning of an Interval.
      • instanceTimeChanged

        protected float instanceTimeChanged​(InstanceTime time,
                                            boolean isBegin)
        Called by a TimingSpecifier of this element when an InstanceTime has been updated. This will be in response to a dependent syncbase change.
      • addDependent

        protected void addDependent​(TimingSpecifier dependent,
                                    boolean forBegin)
        Adds a dependent TimingSpecifier for this element.
      • removeDependent

        protected void removeDependent​(TimingSpecifier dependent,
                                       boolean forBegin)
        Removes a dependent TimingSpecifier for this element.
      • getSimpleDur

        public float getSimpleDur()
        Returns the simple duration time of this element.
      • isUnresolved

        public static boolean isUnresolved​(float t)
        Returns whether the given time value is equal to the UNRESOLVED value.
      • getActiveDur

        public float getActiveDur​(float B,
                                  float end)
        Returns the active duration time of this element.
      • minusTime

        protected float minusTime​(float t1,
                                  float t2)
        Subtracts one simple time from another.
      • multiplyTime

        protected float multiplyTime​(float t,
                                     float n)
        Multiplies one simple time by n.
      • minTime

        protected float minTime​(float t1,
                                float t2)
        Returns the minimum of two time values.
      • maxTime

        protected float maxTime​(float t1,
                                float t2)
        Returns the maximum of two time values.
      • getImplicitDur

        protected float getImplicitDur()
        Returns the implicit duration of the element. Currently, nested time containers are not supported by SVG so this just returns UNRESOLVED by default. This should be overriden in derived classes that play media, since they will have an implicit duration.
      • notifyNewInterval

        protected float notifyNewInterval​(Interval interval)
        Notifies dependents of a new interval.
      • notifyRemoveInterval

        protected float notifyRemoveInterval​(Interval interval)
        Notifies dependents of a removed interval.
      • sampleAt

        protected float sampleAt​(float parentSimpleTime,
                                 boolean hyperlinking)
        Calculates the local simple time. Currently the hyperlinking parameter is ignored, so DOM timing events are fired during hyperlinking seeks. If we were following SMIL 2.1 rather than SMIL Animation, then these events would have to be suppressed.
        Returns:
        the number of seconds until this element becomes active again if it currently is not, Float.POSITIVE_INFINITY if this element will become active at some undetermined point in the future (because of unresolved begin times, for example) or will never become active again, or 0f if the element is currently active.
      • endHasEventConditions

        protected boolean endHasEventConditions()
        Returns whether the end timing specifier list contains any eventbase, accesskey or repeat timing specifiers.
      • selectNewInterval

        protected float selectNewInterval​(float time,
                                          Interval interval)
        Sets the current interval to the one specified. This will notify dependents and fire the 'begin' and any necessary 'repeat' events.
        Parameters:
        time - the current sampling time
        interval - the Interval object to select to be current
        Returns:
        the minimum time the animation engine can safely wait, as determined by dependents of the interval
      • computeInterval

        protected Interval computeInterval​(boolean first,
                                           boolean fixedBegin,
                                           float beginAfter,
                                           boolean incl)
        Computes an interval from the begin and end instance time lists.
        Parameters:
        first - indicates whether this is the first interval to compute
        fixedBegin - if true, specifies that the value given for beginAfter is taken to be the actual begin time for the interval; only the end value is computed.
        beginAfter - the earliest possible begin time for the computed interval.
        incl - if true (and !fixedBegin), specifies that the new interval's begin time must be greater than beginAfter; otherwise, the begin time must be greater than or equal to beginAfter.
      • reset

        protected void reset​(boolean clearCurrentBegin)
        Resets this element.
      • parseAttributes

        public void parseAttributes​(java.lang.String begin,
                                    java.lang.String dur,
                                    java.lang.String end,
                                    java.lang.String min,
                                    java.lang.String max,
                                    java.lang.String repeatCount,
                                    java.lang.String repeatDur,
                                    java.lang.String fill,
                                    java.lang.String restart)
        Parses the animation attributes for this timed element.
      • parseBegin

        protected void parseBegin​(java.lang.String begin)
        Parses a new 'begin' attribute.
      • parseDur

        protected void parseDur​(java.lang.String dur)
        Parses a new 'dur' attribute.
      • parseClockValue

        protected float parseClockValue​(java.lang.String s,
                                        boolean parseOffset)
                                 throws ParseException
        Parses a clock value or offset and returns it as a float.
        Throws:
        ParseException
      • parseEnd

        protected void parseEnd​(java.lang.String end)
        Parses a new 'end' attribute.
      • parseMin

        protected void parseMin​(java.lang.String min)
        Parses a new 'min' attribute.
      • parseMax

        protected void parseMax​(java.lang.String max)
        Parses a new 'max' attribute.
      • parseRepeatCount

        protected void parseRepeatCount​(java.lang.String repeatCount)
        Parses a new 'repeatCount' attribute.
      • parseRepeatDur

        protected void parseRepeatDur​(java.lang.String repeatDur)
        Parses a new 'repeatDur' attribute.
      • parseFill

        protected void parseFill​(java.lang.String fill)
        Parses a new 'fill' attribute.
      • parseRestart

        protected void parseRestart​(java.lang.String restart)
        Parses a new 'restart' attribute.
      • initialize

        public void initialize()
        Initializes this timed element.
      • deinitialize

        public void deinitialize()
        Deinitializes this timed element.
      • beginElement

        public void beginElement()
        Adds a time to the begin time instance list that will cause the element to begin immediately (if restart semantics allow it).
      • beginElement

        public void beginElement​(float offset)
        Adds a time to the begin time instance list that will cause the element to begin at some offset to the current time (if restart semantics allow it).
      • endElement

        public void endElement()
        Adds a time to the end time instance list that will cause the element to end immediately (if restart semantics allow it).
      • endElement

        public void endElement​(float offset)
        Adds a time to the end time instance list that will cause the element to end at some offset to the current time (if restart semantics allow it).
      • getLastSampleTime

        public float getLastSampleTime()
        Returns the last sample time of this element, in local active time.
      • getCurrentBeginTime

        public float getCurrentBeginTime()
        Returns the begin time of the current interval, in parent simple time, or Float.NaN if the element is not active.
      • canBegin

        public boolean canBegin()
        Returns whether this element can be begun or restarted currently.
      • canEnd

        public boolean canEnd()
        Returns whether this element can be ended currently.
      • getHyperlinkBeginTime

        public float getHyperlinkBeginTime()
        Returns the time that the document would seek to if this animation element were hyperlinked to, or NaN if there is no such begin time.
      • getBeginTimingSpecifiers

        public TimingSpecifier[] getBeginTimingSpecifiers()
        Returns an array of the begin timing specifiers on this timed element. XXX Note that this is an experimental public API and is subject to change, when somebody gets around to thinking of a better model for exposing animation information from the document.
      • getEndTimingSpecifiers

        public TimingSpecifier[] getEndTimingSpecifiers()
        Returns an array of the end timing specifiers on this timed element. XXX Note that this is an experimental public API and is subject to change, when somebody gets around to thinking of a better model for exposing animation information from the document.
      • fireTimeEvent

        protected void fireTimeEvent​(java.lang.String eventType,
                                     float time,
                                     int detail)
        Fires a TimeEvent of the given type on this element.
        Parameters:
        eventType - the type of TimeEvent ("beginEvent", "endEvent" or "repeatEvent").
        time - the timestamp of the event object
        detail - the repeat iteration, if this event is a repeat event
      • fireTimeEvent

        protected abstract void fireTimeEvent​(java.lang.String eventType,
                                              java.util.Calendar time,
                                              int detail)
        Fires a TimeEvent of the given type on this element.
        Parameters:
        eventType - the type of TimeEvent ("beginEvent", "endEvent" or "repeatEvent").
        time - the timestamp of the event object
      • toActive

        protected abstract void toActive​(float begin)
        Invoked to indicate this timed element became active at the specified time.
        Parameters:
        begin - the time the element became active, in document simple time
      • toInactive

        protected abstract void toInactive​(boolean stillActive,
                                           boolean isFrozen)
        Invoked to indicate that this timed element became inactive.
        Parameters:
        stillActive - if true, indicates that the element is still actually active, but between the end of the computed repeat duration and the end of the interval
        isFrozen - whether the element is frozen or not
      • removeFill

        protected abstract void removeFill()
        Invoked to indicate that this timed element has had its fill removed.
      • sampledAt

        protected abstract void sampledAt​(float simpleTime,
                                          float simpleDur,
                                          int repeatIteration)
        Invoked to indicate that this timed element has been sampled at the given time.
        Parameters:
        simpleTime - the sample time in local simple time
        simpleDur - the simple duration of the element
        repeatIteration - the repeat iteration during which the element was sampled
      • sampledLastValue

        protected abstract void sampledLastValue​(int repeatIteration)
        Invoked to indicate that this timed element has been sampled at the end of its active time, at an integer multiple of the simple duration. This is the "last" value that will be used for filling, which cannot be sampled normally.
      • getTimedElementById

        protected abstract TimedElement getTimedElementById​(java.lang.String id)
        Returns the timed element with the given ID.
      • getEventTargetById

        protected abstract EventTarget getEventTargetById​(java.lang.String id)
        Returns the event target with the given ID.
      • getRootEventTarget

        protected abstract EventTarget getRootEventTarget()
        Returns the event target that should be listened to for access key events.
      • getElement

        public abstract org.w3c.dom.Element getElement()
        Returns the DOM element that corresponds to this timed element, if such a DOM element exists.
      • getAnimationEventTarget

        protected abstract EventTarget getAnimationEventTarget()
        Returns the target of this animation as an EventTarget. Used for eventbase timing specifiers where the element ID is omitted.
      • isBefore

        public abstract boolean isBefore​(TimedElement other)
        Returns whether this timed element comes before the given timed element in document order.
      • isConstantAnimation

        protected abstract boolean isConstantAnimation()
        Returns whether this timed element is for a constant animation (i.e., a 'set' animation.
      • formatMessage

        public static java.lang.String formatMessage​(java.lang.String key,
                                                     java.lang.Object[] args)
                                              throws java.util.MissingResourceException
        Throws:
        java.util.MissingResourceException
      • toString

        public static java.lang.String toString​(float time)
        Returns a string representation of the given time value.