blob: 3a04f24f5cba682c9c0584065a1a98675f06e331 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. 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:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.commands.range;
import org.eclipse.jst.pagedesigner.dom.EditModelQuery;
import org.w3c.dom.Node;
/**
* @author mengbo
*/
public final class WorkNode {
private WorkNode parent;
private WorkNode previous;
private WorkNode next;
private Node node;
private final int pos[];
private boolean isRoot;
/**
* @param node
* @param pos1
* @param pos2
*/
public WorkNode(Node node, final int pos1, final int pos2) {
this.pos = resoveOffsets(node, pos1, pos2);
this.node = node;
}
/**
* @return Returns the node.
*/
public Node getNode() {
return node;
}
/**
* @param node
* The node to set.
*/
public void setNode(Node node) {
this.node = node;
}
/**
* @return the offsets
*/
int[] getQualifiedOffsets() {
int result[] = new int[] { getPosOffsets()[0], getPosOffsets()[1] };
result[0] = result[0] < 0 ? 0 : result[0];
int length = EditModelQuery.getNodeLenth(node);
result[0] = result[0] > length ? length : result[0];
result[1] = result[1] < 0 ? 0 : result[1];
result[1] = result[1] > length ? length : result[1];
return result;
}
/**
* @return Returns the pos.
*/
public int[] getPosOffsets() {
return pos;
}
/**
* @return Returns the isRoot.
*/
public boolean isRoot() {
return isRoot;
}
/**
* @param isRoot
* The isRoot to set.
*/
public void setRoot(boolean isRoot) {
this.isRoot = isRoot;
}
/**
* @return Returns the next.
*/
public WorkNode getNext() {
return next;
}
/**
* @param next
* The next to set.
*/
public void setNext(WorkNode next) {
this.next = next;
}
/**
* @return Returns the parent.
*/
public WorkNode getParent() {
return parent;
}
/**
* @param parent
* The parent to set.
*/
public void setParent(WorkNode parent) {
this.parent = parent;
}
/**
* @return Returns the previous.
*/
public WorkNode getPrevious() {
return previous;
}
/**
* @param previous
* The previous to set.
*/
public void setPrevious(WorkNode previous) {
this.previous = previous;
}
private int[] resoveOffsets(Node node1, int pos1, int pos2) {
int left = EditModelQuery.getNodeStartIndex(node1);
return new int[] { pos1 - left, pos2 - left };
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Node:").append(node).append(" pos[]:").append(pos);
return sb.toString();
}
boolean isWholeSelected() {
int start = EditModelQuery.getNodeStartIndex(node);
int end = EditModelQuery.getNodeEndIndex(node);
return getQualifiedOffsets()[0] <= 0
&& getQualifiedOffsets()[1] >= end - start;
}
}