/* * Copyright 2010 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.examples.sudoku; import java.util.HashSet; import java.util.Set; /** * Represents a single cell in the Sudoku grid. */ public class Cell extends SetOfNine { private Integer value; private CellRow cellRow; private CellCol cellCol; private CellSqr cellSqr; private Set<Cell> exCells; /** * Constructor, leaving all references at null. You must call * makeReferences to complete the object. */ public Cell() { super(); } /** * Set references to all cell groups containing this cell. * @param row the cell group for the row * @param col the cell group for the column * @param sqr the cell group for the square 3x3 area */ public void makeReferences(CellRow row, CellCol col, CellSqr sqr) { this.cellRow = row; this.cellCol = col; this.cellSqr = sqr; this.exCells = new HashSet<Cell>(); this.exCells.addAll(this.cellRow.getCells()); this.exCells.addAll(this.cellCol.getCells()); this.exCells.addAll(this.cellSqr.getCells()); this.exCells.remove(this); } /** * Retrieves the value. * @return an Integer or null */ public Integer getValue() { return value; } /** * Set the cell value. * @param value an Integer object */ public void setValue(Integer value) { blockExcept(); this.value = value; } /** * Return the set of Cell objects where contents are mutually exclusive with * this cell; they are in the same row or same column or same block. * * @return a Set of Cell objects not including this cell. */ public Set<Cell> getExCells() { return exCells; } /** * Returns the row group of nine of this cell. * @return a CellRow object. */ public CellRow getCellRow() { return cellRow; } /** * Returns the row number. * @return an int value. */ public int getRowNo() { return cellRow.getNumber(); } /** * Returns the column group of nine of this cell. * @return a CellCol object. */ public CellCol getCellCol() { return cellCol; } /** * Returns the column number. * @return an int value. */ public int getColNo() { return cellCol.getNumber(); } /** * Returns the 3x3 block group of nine of this cell. * @return a cellSqr object. */ public CellSqr getCellSqr() { return cellSqr; } /* * (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return posAsString() + ": " + valueAsString(); } public String valueAsString() { return value == null ? " " : value.toString(); } public String posAsString(){ return "[" + ( cellRow != null ? cellRow.getNumber() : "null" ) + "," + ( cellCol != null ? cellCol.getNumber() : "null" ) + "]"; } }