001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.xerces.impl.xs.opti;
019:
020: import org.w3c.dom.DOMException;
021: import org.w3c.dom.Node;
022:
023: /**
024: * @xerces.internal
025: *
026: * @author Neil Graham, IBM
027: * @version $Id: TextImpl.java 446728 2006-09-15 20:43:46Z mrglavas $
028: */
029:
030: public class TextImpl extends DefaultText {
031:
032: // Data
033: String fData = null;
034: SchemaDOM fSchemaDOM = null;
035: int fRow;
036: int fCol;
037:
038: public TextImpl(StringBuffer str, SchemaDOM sDOM, int row, int col) {
039: fData = str.toString();
040: fSchemaDOM = sDOM;
041: fRow = row;
042: fCol = col;
043: rawname = prefix = localpart = uri = null;
044: nodeType = Node.TEXT_NODE;
045: }
046:
047: //
048: // org.w3c.dom.Node methods
049: //
050:
051: public Node getParentNode() {
052: return fSchemaDOM.relations[fRow][0];
053: }
054:
055: public Node getPreviousSibling() {
056: if (fCol == 1) {
057: return null;
058: }
059: return fSchemaDOM.relations[fRow][fCol - 1];
060: }
061:
062: public Node getNextSibling() {
063: if (fCol == fSchemaDOM.relations[fRow].length - 1) {
064: return null;
065: }
066: return fSchemaDOM.relations[fRow][fCol + 1];
067: }
068:
069: // CharacterData methods
070:
071: /**
072: * The character data of the node that implements this interface. The DOM
073: * implementation may not put arbitrary limits on the amount of data
074: * that may be stored in a <code>CharacterData</code> node. However,
075: * implementation limits may mean that the entirety of a node's data may
076: * not fit into a single <code>DOMString</code>. In such cases, the user
077: * may call <code>substringData</code> to retrieve the data in
078: * appropriately sized pieces.
079: * @exception DOMException
080: * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly.
081: * @exception DOMException
082: * DOMSTRING_SIZE_ERR: Raised when it would return more characters than
083: * fit in a <code>DOMString</code> variable on the implementation
084: * platform.
085: */
086: public String getData() throws DOMException {
087: return fData;
088: }
089:
090: /**
091: * The number of 16-bit units that are available through <code>data</code>
092: * and the <code>substringData</code> method below. This may have the
093: * value zero, i.e., <code>CharacterData</code> nodes may be empty.
094: */
095: public int getLength() {
096: if (fData == null)
097: return 0;
098: return fData.length();
099: }
100:
101: /**
102: * Extracts a range of data from the node.
103: * @param offset Start offset of substring to extract.
104: * @param count The number of 16-bit units to extract.
105: * @return The specified substring. If the sum of <code>offset</code> and
106: * <code>count</code> exceeds the <code>length</code>, then all 16-bit
107: * units to the end of the data are returned.
108: * @exception DOMException
109: * INDEX_SIZE_ERR: Raised if the specified <code>offset</code> is
110: * negative or greater than the number of 16-bit units in
111: * <code>data</code>, or if the specified <code>count</code> is
112: * negative.
113: * <br>DOMSTRING_SIZE_ERR: Raised if the specified range of text does
114: * not fit into a <code>DOMString</code>.
115: */
116: public String substringData(int offset, int count)
117: throws DOMException {
118: if (fData == null)
119: return null;
120: if (count < 0 || offset < 0 || offset > fData.length())
121: throw new DOMException(DOMException.INDEX_SIZE_ERR,
122: "parameter error");
123: if (offset + count >= fData.length())
124: return fData.substring(offset);
125: return fData.substring(offset, offset + count);
126: }
127:
128: }
|