blob: 9ff2c8b3b26742e8ff08a7a6a200b3103a7c11ab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.dtd.core.internal;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.wst.dtd.core.internal.text.RegionIterator;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
// interface for nodes that can exist at the top level in a dtdfile
// eg. entity, notation, element, comment, attlist, or unrecognized stuff (ie
// <junk dkfjdl>
public abstract class TopLevelNode extends DTDNode {
private ArrayList flatNodes = new ArrayList();
public TopLevelNode(DTDFile dtdFile, IStructuredDocumentRegion flatNode) {
super(dtdFile, flatNode);
flatNodes.add(flatNode);
}
public void addWhitespaceStructuredDocumentRegion(IStructuredDocumentRegion node) {
flatNodes.add(node);
}
// specialize this so we delete the objects flat node range
// AND any whitespace
public void delete() {
beginRecording(getDTDFile(), DTDCoreMessages._UI_LABEL_TOP_LEVEL_NODE_DELETE); //$NON-NLS-1$
IStructuredDocumentRegion first = (IStructuredDocumentRegion) flatNodes.get(0);
IStructuredDocumentRegion last = (IStructuredDocumentRegion) flatNodes.get(flatNodes.size() - 1);
int startOffset = first.getStartOffset();
int endOffset = last.getEndOffset();
replaceText(getDTDFile(), startOffset, endOffset - startOffset, ""); //$NON-NLS-1$
endRecording(getDTDFile());
}
public ITextRegion getEndRegion() {
int size = flatNode.getRegions().size();
if (size > 0) {
return flatNode.getRegions().get(size - 1);
}
return null;
}
// includes what gettext gives us plus any whitespace
// trailing it
public String getFullText() {
StringBuffer sb = new StringBuffer();
Iterator iter = flatNodes.iterator();
while (iter.hasNext()) {
IStructuredDocumentRegion fNode = (IStructuredDocumentRegion) iter.next();
sb.append(fNode.getText());
}
return sb.toString();
}
public ITextRegion getStartRegion() {
if (flatNode.getRegions().size() > 0) {
return flatNode.getRegions().get(0);
}
return null;
}
public RegionIterator iterator() {
// System.out.println("create region iter " + this.getClass() + " with
// start , end = " + getStartOffset() + ", " +getEndOffset());
return new RegionIterator(flatNode, getStartOffset(), getEndOffset());
}
}