/*******************************************************************************
 * Copyright (c) 2005, 2011 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
 *******************************************************************************/
package org.eclipse.jdt.internal.debug.core.refactoring;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;

/**
 * Specialization of a {@link BreakpointChange}
 * @since 3.2
 */
public abstract class LineBreakpointChange extends BreakpointChange {

	private int fCharEnd, fCharStart, fLineNumber;
	private boolean fConditionEnabled, fConditionSuspendOnTrue;
	private String fCondition;

	/**
	 * Constructor
	 * @param breakpoint
	 * @throws CoreException
	 */
	public LineBreakpointChange(IJavaLineBreakpoint breakpoint) throws CoreException {
		super(breakpoint);
		fCharEnd = breakpoint.getCharEnd();
		fCharStart = breakpoint.getCharStart();
		fLineNumber = breakpoint.getLineNumber();
		if (breakpoint.supportsCondition()) {
			fCondition = breakpoint.getCondition();
			fConditionEnabled = breakpoint.isConditionEnabled();
			fConditionSuspendOnTrue = breakpoint.isConditionSuspendOnTrue();
		}
	}

	/**
	 * Applies the original attributes to the new breakpoint
	 * @param breakpoint
	 * @throws CoreException
	 */
	protected void apply(IJavaLineBreakpoint breakpoint) throws CoreException {
		super.apply(breakpoint);
		if (breakpoint.supportsCondition()) {
			breakpoint.setCondition(fCondition);
			breakpoint.setConditionEnabled(fConditionEnabled);
			breakpoint.setConditionSuspendOnTrue(fConditionSuspendOnTrue);
		}
	}

	/**
	 * @see org.eclipse.jdt.internal.debug.core.refactoring.BreakpointChange#getLineNumber()
	 */
	@Override
	protected int getLineNumber() {
		return fLineNumber;
	}

	/**
	 * Returns the char end attribute of the underlying line breakpoint
	 * @return the char end attribute of the underlying line breakpoint
	 */
	protected int getCharEnd() {
		return fCharEnd;
	}

	/**
	 * Returns the char start attribute of the underlying line breakpoint
	 * @return the char start attribute of the underlying line breakpoint
	 */
	protected int getCharStart() {
		return fCharStart;
	}

}
