    001    package ifs.example.rpp;
    002
    003    import ifs.model.*;
    004
    005    /**
    006     * Location (value, i.e., a single placement of the rectangle). Location encodes X and Y
    007     * coordinate.
    008     *
    009     * @author <a href="mailto:muller@ktiml.mff.cuni.cz">Tomáš Müller</a>
    010     * @version 1.0
    011     */
    012    public class Location extends Value {
    013        private int iX, iY;
    014        /**
    015         * Constructor
    016         * @param rectangle parent variable
    017         * @param x x coordinate
    018         * @param y y coordinate
    019         */
    020        public Location(Rectangle rectangle, int x, int y) {
    021            super(rectangle);
    022            iX = x;
    023            iY = y;
    024        }
    025
    026        /** Gets x coordinate */
    027        public int getX() {
    028            return  iX;
    029        }
    030
    031        /** Gets y coordinate */
    032        public int getY() {
    033            return iY;
    034        }
    035
    036        /** Compare two coordinates. It is based on comparison of the parent rectangle and x,y coordinates */
    037        public boolean equals(Object object) {
    038            if (object == null || !(object instanceof Location)) {
    039                return false;
    040            }
    041            Location location = (Location) object;
    042
    043            return (variable().equals(location.variable()) && location.getX() == getX() && location.getY() == getY());
    044        }
    045
    046        /** String representation (for debugging and printing purposes).
    047         * For example, rect43=[12,10] where rect43 is the name of the parent rectangle and [12,10] is the location.
    048         */
    049        public String toString() {
    050            return variable().getName() + "=[" + getX() + "," + getY() + "]";
    051        }
    052
    053        /** Location's name. E.g., [12,10] where x=12 and y=10.*/
    054        public String getName() {
    055            return "[" + getX() + "," + getY() + "]";
    056        }
    057
    058        /** Returns true if the given location intersects with this location */
    059        public boolean hasIntersection(Location anotherLocation) {
    060            if (getX() + ((Rectangle) variable()).getWidth() <= anotherLocation.getX()) {
    061                return false;
    062            }
    063            if (getY() + ((Rectangle) variable()).getHeight() <= anotherLocation.getY()) {
    064                return false;
    065            }
    066            if (anotherLocation.getX() + ((Rectangle) anotherLocation.variable()).getWidth() <= getX()) {
    067                return false;
    068            }
    069            if (anotherLocation.getY() + ((Rectangle) anotherLocation.variable()).getHeight() <= getY()) {
    070                return false;
    071            }
    072            return true;
    073        }
    074    }