001/*
002 * SVG Salamander
003 * Copyright (c) 2004, Mark McKay
004 * All rights reserved.
005 *
006 * Redistribution and use in source and binary forms, with or 
007 * without modification, are permitted provided that the following
008 * conditions are met:
009 *
010 *   - Redistributions of source code must retain the above 
011 *     copyright notice, this list of conditions and the following
012 *     disclaimer.
013 *   - Redistributions in binary form must reproduce the above
014 *     copyright notice, this list of conditions and the following
015 *     disclaimer in the documentation and/or other materials 
016 *     provided with the distribution.
017 *
018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
019 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
020 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
021 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
022 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
023 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
025 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
026 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
027 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
029 * OF THE POSSIBILITY OF SUCH DAMAGE. 
030 * 
031 * Mark McKay can be contacted at mark@kitfox.com.  Salamander and other
032 * projects can be found at http://www.kitfox.com
033 *
034 * Created on August 15, 2004, 3:33 AM
035 */
036
037package com.kitfox.svg.animation;
038
039import java.util.Collections;
040import java.util.Iterator;
041import java.util.List;
042import java.util.regex.Pattern;
043
044
045/**
046 * This represents a summation of other time elements.  It is used for complex
047 * timing events with offsets.
048 *
049 * @author Mark McKay
050 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>
051 */
052public class TimeCompound extends TimeBase
053{
054    static final Pattern patPlus = Pattern.compile("\\+");
055    
056    /**
057     * This is a list of times.  This element's time is calculated as the greatest
058     * member that is less than the current time.
059    */
060    final List componentTimes;
061
062    private AnimationElement parent;
063    
064    /** Creates a new instance of TimeDiscrete */
065    public TimeCompound(List timeBases)
066    {
067        componentTimes = Collections.unmodifiableList(timeBases);
068    }
069    
070    public double evalTime()
071    {
072        double agg = 0.0;
073        
074        for (Iterator it = componentTimes.iterator(); it.hasNext();)
075        {
076            TimeBase timeEle = (TimeBase)it.next();
077            double time = timeEle.evalTime();
078            agg += time;
079        }
080        
081        return agg;
082    }
083    
084    public void setParentElement(AnimationElement ele)
085    {
086        this.parent = ele;
087        
088        for (Iterator it = componentTimes.iterator(); it.hasNext();)
089        {
090            TimeBase timeEle = (TimeBase)it.next();
091            timeEle.setParentElement(ele);
092        }
093    }
094}