1/*
2 * Copyright (C) 2007-2008 Esmertec AG.
3 * Copyright (C) 2007-2008 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.parser;
19
20import android.util.Log;
21
22import org.xml.sax.Attributes;
23import org.xml.sax.helpers.DefaultHandler;
24import org.w3c.dom.smil.SMILDocument;
25import org.w3c.dom.Element;
26import org.w3c.dom.Node;
27
28import com.android.mms.dom.smil.SmilDocumentImpl;
29
30public class SmilContentHandler extends DefaultHandler {
31    private static final String TAG = "SmilContentHandler";
32    private static final boolean DEBUG = false;
33    private static final boolean LOCAL_LOGV = false;
34
35    private SMILDocument mSmilDocument;
36    private Node mCurrentNode;
37
38    /**
39     * Resets this handler.
40     *
41     */
42    public void reset() {
43        mSmilDocument = new SmilDocumentImpl();
44        mCurrentNode = mSmilDocument;
45    }
46
47    /**
48     * Returns the SMILDocument.
49     * @return The SMILDocument instance
50     */
51    public SMILDocument getSmilDocument() {
52        return mSmilDocument;
53    }
54
55    @Override
56    public void startElement(String uri, String localName, String qName, Attributes attributes) {
57        if (LOCAL_LOGV) {
58            Log.v(TAG, "SmilContentHandler.startElement. Creating element " + localName);
59        }
60        Element element = mSmilDocument.createElement(localName);
61        if (attributes != null) {
62            for (int i = 0; i < attributes.getLength(); i++) {
63                if (LOCAL_LOGV) {
64                    Log.v(TAG, "Attribute " + i +
65                        " lname = " + attributes.getLocalName(i) +
66                        " value = " + attributes.getValue(i));
67                }
68                element.setAttribute(attributes.getLocalName(i),
69                        attributes.getValue(i));
70            }
71        }
72        if (LOCAL_LOGV) {
73            Log.v(TAG, "Appending " + localName + " to " + mCurrentNode.getNodeName());
74        }
75        mCurrentNode.appendChild(element);
76
77        mCurrentNode = element;
78    }
79
80    @Override
81    public void endElement(String uri, String localName, String qName) {
82        if (LOCAL_LOGV) {
83            Log.v(TAG, "SmilContentHandler.endElement. localName " + localName);
84        }
85        mCurrentNode = mCurrentNode.getParentNode();
86    }
87
88    @Override
89    public void characters(char[] ch, int start, int length) {
90        if (LOCAL_LOGV) {
91            Log.v(TAG, "SmilContentHandler.characters. ch = " + new String(ch, start, length));
92        }
93    }
94}
95