Class TimedElement

java.lang.Object
io.sf.carte.echosvg.anim.timing.TimedElement
All Implemented Interfaces:
SMILConstants
Direct Known Subclasses:
SVGAnimationElementBridge.SVGTimedElement, TimeContainer

public abstract class TimedElement extends 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 Details

    • FILL_REMOVE

      public static final int FILL_REMOVE
      See Also:
    • FILL_FREEZE

      public static final int FILL_FREEZE
      See Also:
    • RESTART_ALWAYS

      public static final int RESTART_ALWAYS
      See Also:
    • RESTART_WHEN_NOT_ACTIVE

      public static final int RESTART_WHEN_NOT_ACTIVE
      See Also:
    • RESTART_NEVER

      public static final int RESTART_NEVER
      See Also:
    • INDEFINITE

      public static final float INDEFINITE
      See Also:
    • UNRESOLVED

      public static final float UNRESOLVED
      See Also:
    • root

      protected TimedDocumentRoot root
      The root time container.
    • 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 List<InstanceTime> beginInstanceTimes
      List of begin InstanceTimes.
    • endInstanceTimes

      protected List<InstanceTime> 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 LinkedList<TimingSpecifier> beginDependents
      List of TimingSpecifiers on other elements that depend on this element's begin times.
    • endDependents

      protected LinkedList<TimingSpecifier> 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 Map<Event,Set<TimingSpecifier>> 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 String RESOURCES
      The error messages bundle class name.
      See Also:
    • localizableSupport

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

    • TimedElement

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

    • 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(String begin, String dur, String end, String min, String max, String repeatCount, String repeatDur, String fill, String restart)
      Parses the animation attributes for this timed element.
    • parseBegin

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

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

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

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

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

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

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

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

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

      protected void parseRestart(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(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(String eventType, 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(String id)
      Returns the timed element with the given ID.
    • getEventTargetById

      protected abstract EventTarget getEventTargetById(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 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.
    • createException

      public AnimationException createException(String code, Object[] params)
      Creates and returns a new AnimationException.
    • setLocale

      public static void setLocale(Locale l)
    • getLocale

      public static Locale getLocale()
    • formatMessage

      public static String formatMessage(String key, Object[] args) throws MissingResourceException
      Throws:
      MissingResourceException
    • toString

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