1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.xml.dom;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.CharacterData;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMException;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Provides a straightforward implementation of the corresponding W3C DOM
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * interface. The class is used internally only, thus only notable members that
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are not in the original interface are documented (the W3C docs are quite
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * extensive). Hope that's ok.
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Some of the fields may have package visibility, so other classes belonging to
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the DOM implementation can easily access them while maintaining the DOM tree
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * structure.
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class CharacterDataImpl extends LeafNodeImpl implements
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CharacterData {
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
358092253eb6a1cff91f0e4953f1387165169157b5Jesse Wilson    protected StringBuffer buffer;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    CharacterDataImpl(DocumentImpl document, String data) {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(document);
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        setData(data);
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void appendData(String arg) throws DOMException {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buffer.append(arg);
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void deleteData(int offset, int count) throws DOMException {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buffer.delete(offset, offset + count);
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getData() throws DOMException {
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return buffer.toString();
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilson    /**
55bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilson     * Appends this node's text content to the given builder.
56bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilson     */
57bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilson    public void appendDataTo(StringBuilder stringBuilder) {
58bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilson        stringBuilder.append(buffer);
59bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilson    }
60bda224da00c0372a7752b1304aeda98e2930c4afJesse Wilson
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getLength() {
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return buffer.length();
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getNodeValue() {
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return getData();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void insertData(int offset, String arg) throws DOMException {
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            buffer.insert(offset, arg);
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (ArrayIndexOutOfBoundsException ex) {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new DOMException(DOMException.INDEX_SIZE_ERR, null);
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void replaceData(int offset, int count, String arg)
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws DOMException {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            buffer.replace(offset, offset + count, arg);
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (ArrayIndexOutOfBoundsException ex) {
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new DOMException(DOMException.INDEX_SIZE_ERR, null);
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void setData(String data) throws DOMException {
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buffer = new StringBuffer(data);
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String substringData(int offset, int count) throws DOMException {
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return buffer.substring(offset, offset + count);
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (ArrayIndexOutOfBoundsException ex) {
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new DOMException(DOMException.INDEX_SIZE_ERR, null);
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
100