svn.filsa.org sketches

Rev

Blame | Last modification | View Log | RSS feed

package org.filsa.devfest.patchwork;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

/**
 * A GridCell represents one cell of the grid. It has a "color",
 * and it knows where it is located within the grid.
 *
 * @author Phil Suh (http://filsa.net/)
 */

public class GridCell implements Comparable<GridCell> {

        private final int x;
        private final int y;
        private final char color;
        private boolean isProcessed = false;
       
        private boolean marked = false;

        public GridCell(char colorCode, int col, int row) {
                this.x = col;
                this.y = row;
                this.color = colorCode;
        }

        public int getCol() {
                return x;
        }

        public int getRow() {
                return y;
        }

        public char getColor() {
                if (this.marked) { return '_';}
                return this.color;
        }

        @Override
        public int hashCode() {
                return new HashCodeBuilder(17, 93).append(x + 1031).append(y).append(
                                color).toHashCode();
        }

        @Override
        public boolean equals(Object obj) {
                if (obj == null) {
                        return false;
                }
                if (obj == this) {
                        return true;
                }
                if (obj.getClass() != getClass()) {
                        return false;
                }
                GridCell rhs = (GridCell) obj;
                return new EqualsBuilder().appendSuper(super.equals(obj)).append(x,
                                rhs.x).append(y, rhs.y).isEquals();
        }

        /**
         * 処理済みかどうか
         *
         * @return
         */

        public boolean isProcessed() {
                return this.isProcessed;
        }

        /**
         * 処理済みフラグを設定する。
         */

        public void finishedProcessing() {
                this.isProcessed = true;
        }

        public int compareTo(GridCell obj) {

                return (this.x * this.y + 17) - (obj.getCol() * obj.getRow() + 17);
        }

        /**
         *
         */

        public void setMark() {
                this.marked = true;
        }
       
        public boolean isMarked() {
                return this.marked;
        }

        /**
         *
         */

        @Override
        public String toString() {
                return "GridCell@" + hashCode() + "[color=" + this.color + ", row="
                                + this.y + ", col=" + this.x + ", processed="
                                + ((this.isProcessed) ? "Yes" : "No") + "]";
        }

}