/* * reserved comment block * DO NOT REMOVE OR ALTER! */ /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sun.org.apache.xerces.internal.impl.xs.opti; import org.w3c.dom.DOMException; import org.w3c.dom.Node; /** * @xerces.internal * * @author Neil Graham, IBM * @version $Id: TextImpl.java,v 1.2.6.1 2005/09/08 11:16:14 sunithareddy Exp $ */ public class TextImpl extends DefaultText { // Data String fData = null; SchemaDOM fSchemaDOM = null; int fRow; int fCol; public TextImpl(StringBuffer str, SchemaDOM sDOM, int row, int col) { fData = str.toString(); fSchemaDOM = sDOM; fRow = row; fCol = col; rawname = prefix = localpart = uri = null; nodeType = Node.TEXT_NODE; } // // org.w3c.dom.Node methods // public Node getParentNode() { return fSchemaDOM.relations[fRow][0]; } public Node getPreviousSibling() { if (fCol == 1) { return null; } return fSchemaDOM.relations[fRow][fCol-1]; } public Node getNextSibling() { if (fCol == fSchemaDOM.relations[fRow].length-1) { return null; } return fSchemaDOM.relations[fRow][fCol+1]; } // CharacterData methods /** * The character data of the node that implements this interface. The DOM * implementation may not put arbitrary limits on the amount of data * that may be stored in a <code>CharacterData</code> node. However, * implementation limits may mean that the entirety of a node's data may * not fit into a single <code>DOMString</code>. In such cases, the user * may call <code>substringData</code> to retrieve the data in * appropriately sized pieces. * @exception DOMException * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly. * @exception DOMException * DOMSTRING_SIZE_ERR: Raised when it would return more characters than * fit in a <code>DOMString</code> variable on the implementation * platform. */ public String getData() throws DOMException { return fData; } /** * The number of 16-bit units that are available through <code>data</code> * and the <code>substringData</code> method below. This may have the * value zero, i.e., <code>CharacterData</code> nodes may be empty. */ public int getLength() { if(fData == null) return 0; return fData.length(); } /** * Extracts a range of data from the node. * @param offset Start offset of substring to extract. * @param count The number of 16-bit units to extract. * @return The specified substring. If the sum of <code>offset</code> and * <code>count</code> exceeds the <code>length</code>, then all 16-bit * units to the end of the data are returned. * @exception DOMException * INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is * negative or greater than the number of 16-bit units in * <code>data</code>, or if the specified <code>count</code> is * negative. * <br>DOMSTRING_SIZE_ERR: Raised if the specified range of text does * not fit into a <code>DOMString</code>. */ public String substringData(int offset, int count) throws DOMException { if(fData == null) return null; if(count < 0 || offset < 0 || offset > fData.length()) throw new DOMException(DOMException.INDEX_SIZE_ERR, "parameter error"); if(offset+count >= fData.length()) return fData.substring(offset); return fData.substring(offset, offset+count); } }