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