/*******************************************************************************
 * Copyright (c) 2000, 2010 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.draw2d;

import org.eclipse.draw2d.geometry.Point;

/**
 * Supports an anchor in the XY layout. This anchor exists independently without
 * an owner.
 */
public class XYAnchor extends ConnectionAnchorBase {

	private Point location;

	/**
	 * Constructs an XYAnchor at the Point p.
	 * 
	 * @param p
	 *            the point where this anchor will be located
	 * @since 2.0
	 */
	public XYAnchor(Point p) {
		location = new Point(p);
	}

	/**
	 * Returns the location of this anchor relative to the reference point given
	 * in as input. Since this is XY layout, the location of the point is
	 * independent of the reference point.
	 * 
	 * @see ConnectionAnchor#getLocation(Point)
	 */
	public Point getLocation(Point reference) {
		return location;
	}

	/**
	 * Returns <code>null</code> as these anchors inherently do not depend on
	 * other figures for their location.
	 * 
	 * @see ConnectionAnchor#getOwner()
	 * @since 2.0
	 */
	public IFigure getOwner() {
		return null;
	}

	/**
	 * Returns the point which is used as the reference by this connection
	 * anchor. In the case of the XYAnchor, this point is the same as its
	 * location.
	 * 
	 * @see ConnectionAnchor#getReferencePoint()
	 */
	public Point getReferencePoint() {
		return location;
	}

	/**
	 * Sets the location of this anchor and notifies all the listeners of the
	 * update.
	 * 
	 * @param p
	 *            the new location of this anchor
	 * @see #getLocation(Point)
	 * @since 2.0
	 */
	public void setLocation(Point p) {
		location.setLocation(p);
		fireAnchorMoved();
	}

}
