/*******************************************************************************
 * 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.dom;

import org.eclipse.jst.pagedesigner.viewer.DesignPosition;
import org.eclipse.jst.pagedesigner.viewer.DesignRange;
import org.w3c.dom.Node;

/**
 * @author mengbo
 */
public class DOMRangeHelper {
	public static DOMRange toDOMRange(DesignRange range) {
		if (range.getStartPosition() == range.getEndPosition()) {
			IDOMPosition dp = DOMPositionHelper.toDOMPosition(range
					.getStartPosition());
			return new DOMRange(dp, dp);
		}
        return new DOMRange(DOMPositionHelper.toDOMPosition(range
        		.getStartPosition()), DOMPositionHelper.toDOMPosition(range
        		.getEndPosition()));
	}

	public static DesignRange toDesignRange(DOMRange range) {
		if (range.getStartPosition() == range.getEndPosition()) {
			DesignPosition dp = DOMPositionHelper.toDesignPosition(range
					.getStartPosition());
			return new DesignRange(dp, dp);
		}
		return new DesignRange(DOMPositionHelper.toDesignPosition(range
				.getStartPosition()), DOMPositionHelper.toDesignPosition(range
				.getEndPosition()));
	}

	public static DOMRange handleReplacement(DOMRange range, Node original,
			Node replacement) {
		if (range.getStartPosition() == range.getEndPosition()) {
			IDOMPosition pos = range.getStartPosition().handleReplacement(
					original, replacement);
			return new DOMRange(pos, pos);
		}
        return new DOMRange(range.getStartPosition().handleReplacement(
        		original, replacement), range.getEndPosition()
        		.handleReplacement(original, replacement));
	}
}
