1/*
2 * Copyright (C) 2007 Esmertec AG.
3 * Copyright (C) 2007 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package com.android.mms.dom.smil;
19
20import java.util.ArrayList;
21
22import org.w3c.dom.DOMException;
23import org.w3c.dom.NodeList;
24import org.w3c.dom.events.DocumentEvent;
25import org.w3c.dom.events.Event;
26import org.w3c.dom.smil.ElementParallelTimeContainer;
27import org.w3c.dom.smil.ElementTime;
28import org.w3c.dom.smil.SMILParElement;
29import org.w3c.dom.smil.Time;
30import org.w3c.dom.smil.TimeList;
31
32public class SmilParElementImpl extends SmilElementImpl implements SMILParElement {
33    public final static String SMIL_SLIDE_START_EVENT = "SmilSlideStart";
34    public final static String SMIL_SLIDE_END_EVENT = "SmilSlideEnd";
35
36    ElementParallelTimeContainer mParTimeContainer =
37        new ElementParallelTimeContainerImpl(this) {
38        @Override
39        public TimeList getBegin() {
40            /*
41             * For children of a sequence, the only legal value for begin is
42             * a (single) non-negative offset value.
43             */
44            TimeList beginTimeList = super.getBegin();
45            if (beginTimeList.getLength() > 1) {
46                ArrayList<Time> singleTimeContainer = new ArrayList<Time>();
47                singleTimeContainer.add(beginTimeList.item(0));
48                beginTimeList = new TimeListImpl(singleTimeContainer);
49            }
50            return beginTimeList;
51        }
52
53        public NodeList getTimeChildren() {
54            return getChildNodes();
55        }
56
57        public boolean beginElement() {
58            DocumentEvent doc = (DocumentEvent) SmilParElementImpl.this.getOwnerDocument();
59            Event startEvent = doc.createEvent("Event");
60            startEvent.initEvent(SMIL_SLIDE_START_EVENT, false, false);
61            dispatchEvent(startEvent);
62            return true;
63        }
64
65        public boolean endElement() {
66            DocumentEvent doc = (DocumentEvent) SmilParElementImpl.this.getOwnerDocument();
67            Event endEvent = doc.createEvent("Event");
68            endEvent.initEvent(SMIL_SLIDE_END_EVENT, false, false);
69            dispatchEvent(endEvent);
70            return true;
71        }
72
73        public void pauseElement() {
74            // TODO Auto-generated method stub
75
76        }
77
78        public void resumeElement() {
79            // TODO Auto-generated method stub
80
81        }
82
83        public void seekElement(float seekTo) {
84            // TODO Auto-generated method stub
85
86        }
87
88        ElementTime getParentElementTime() {
89            return ((SmilDocumentImpl) mSmilElement.getOwnerDocument()).mSeqTimeContainer;
90        }
91    };
92
93    /*
94     * Internal Interface
95     */
96
97    SmilParElementImpl(SmilDocumentImpl owner, String tagName)
98    {
99        super(owner, tagName.toUpperCase());
100    }
101
102    int getBeginConstraints() {
103        /*
104         * For children of a sequence, the only legal value for begin is
105         * a (single) non-negative offset value.
106         */
107        return (TimeImpl.ALLOW_OFFSET_VALUE); // Do not set ALLOW_NEGATIVE_VALUE
108    }
109
110    /*
111     * ElementParallelTimeContainer
112     */
113
114    public String getEndSync() {
115        return mParTimeContainer.getEndSync();
116    }
117
118    public float getImplicitDuration() {
119        return mParTimeContainer.getImplicitDuration();
120    }
121
122    public void setEndSync(String endSync) throws DOMException {
123        mParTimeContainer.setEndSync(endSync);
124    }
125
126    public NodeList getActiveChildrenAt(float instant) {
127        return mParTimeContainer.getActiveChildrenAt(instant);
128    }
129
130    public NodeList getTimeChildren() {
131        return mParTimeContainer.getTimeChildren();
132    }
133
134    public boolean beginElement() {
135        return mParTimeContainer.beginElement();
136    }
137
138    public boolean endElement() {
139        return mParTimeContainer.endElement();
140    }
141
142    public TimeList getBegin() {
143        return mParTimeContainer.getBegin();
144    }
145
146    public float getDur() {
147        return mParTimeContainer.getDur();
148    }
149
150    public TimeList getEnd() {
151        return mParTimeContainer.getEnd();
152    }
153
154    public short getFill() {
155        return mParTimeContainer.getFill();
156    }
157
158    public short getFillDefault() {
159        return mParTimeContainer.getFillDefault();
160    }
161
162    public float getRepeatCount() {
163        return mParTimeContainer.getRepeatCount();
164    }
165
166    public float getRepeatDur() {
167        return mParTimeContainer.getRepeatDur();
168    }
169
170    public short getRestart() {
171        return mParTimeContainer.getRestart();
172    }
173
174    public void pauseElement() {
175        mParTimeContainer.pauseElement();
176    }
177
178    public void resumeElement() {
179        mParTimeContainer.resumeElement();
180    }
181
182    public void seekElement(float seekTo) {
183        mParTimeContainer.seekElement(seekTo);
184    }
185
186    public void setBegin(TimeList begin) throws DOMException {
187        mParTimeContainer.setBegin(begin);
188    }
189
190    public void setDur(float dur) throws DOMException {
191        mParTimeContainer.setDur(dur);
192    }
193
194    public void setEnd(TimeList end) throws DOMException {
195        mParTimeContainer.setEnd(end);
196    }
197
198    public void setFill(short fill) throws DOMException {
199        mParTimeContainer.setFill(fill);
200    }
201
202    public void setFillDefault(short fillDefault) throws DOMException {
203        mParTimeContainer.setFillDefault(fillDefault);
204    }
205
206    public void setRepeatCount(float repeatCount) throws DOMException {
207        mParTimeContainer.setRepeatCount(repeatCount);
208    }
209
210    public void setRepeatDur(float repeatDur) throws DOMException {
211        mParTimeContainer.setRepeatDur(repeatDur);
212    }
213
214    public void setRestart(short restart) throws DOMException {
215        mParTimeContainer.setRestart(restart);
216    }
217}
218