Class LetterCluster

java.lang.Object
com.slinky.hackmaster.model.cell.LetterCluster
All Implemented Interfaces:
CellCluster

public class LetterCluster extends Object
A specialised implementation of AbstractCluster that groups LetterCells. This class ensures that only cells containing letter characters are added to the cluster.

The LetterCluster class enforces that only instances of LetterCell can be added, and validates that the content of each cell is a letter.

Author:
Kheagen Haskins
  • Nested Class Summary

    Nested classes/interfaces inherited from interface com.slinky.hackmaster.model.cell.CellCluster

    CellCluster.ClusterCloseException
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    The minimum acceptable size of a word.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    addCell(Cell cell)
    Adds a Cell to the cluster, ensuring it is an instance of LetterCell.
    void
    Clears all internal Cell references if the cluster has not yet been closed.
    void
    Handles the internal behaviour triggered by a click on this cluster.
    boolean
    Closes the cluster, marking it as complete and preventing any further modifications such as adding, removing, or clearing cells within the cluster.
    boolean
    contains(Cell cell)
    Checks if the cluster contains a specific Cell.
    void
    fill(char c)
    Sets the content of each Cell within this cluster to the specified character.
    void
    Forcefully clears all internal Cell references, regardless of the cluster's state.
    getCellAt(int index)
    Retrieves the Cell at the specified index within the cluster.
    Retrieves the list of Cells in the cluster.
    Retrieves the first Cell in the cluster.
    int
    Retrieves the index of the specified Cell within the cluster.
    Retrieves the last Cell in the cluster.
    int
    Returns the number of Cells in the cluster.
    Concatenates the content of all Cells in the cluster into a single string.
    boolean
    Checks if the cluster is currently active.
    boolean
    Checks if the cluster has been closed.
    boolean
    Checks if the cluster is empty.
    boolean
    Removes a Cell from the cluster.
    void
    setActive(boolean newState)
    Sets the active state of the cluster.
    Returns a string representation of the CellCluster object.
    boolean
    Validates that all cells in this cluster contain letter characters.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • MIN_WORD_SIZE

      public static final int MIN_WORD_SIZE
      The minimum acceptable size of a word. Clusters that close with fewer Cells as specified by this value will throw an exception.
      See Also:
  • Constructor Details

    • LetterCluster

      public LetterCluster()
  • Method Details

    • addCell

      public boolean addCell(Cell cell)
      Adds a Cell to the cluster, ensuring it is an instance of LetterCell.
      Specified by:
      addCell in interface CellCluster
      Parameters:
      cell - The Cell to be added to the cluster.
      Returns:
      true if the cell was added successfully, false otherwise.
      Throws:
      IllegalArgumentException - If the given cell is not an instance of LetterCell.
    • validate

      public boolean validate()
      Validates that all cells in this cluster contain letter characters.

      This method checks each cell in the cluster to ensure its content is a letter. Normally, this validation should pass, as the addCell(Cell cell) method is designed to prevent non-letter cells from being added.

      Returns:
      true if all cells in the cluster contain letters, false otherwise.
    • click

      public void click()
      Handles the internal behaviour triggered by a click on this cluster. This implmentation first fills each cell with a '.' and then deactivating the cluster and force clearing it.
      Specified by:
      click in interface CellCluster
    • getCells

      public List<Cell> getCells()
      Retrieves the list of Cells in the cluster.
      Specified by:
      getCells in interface CellCluster
      Returns:
      a List of all Cells contained in the cluster.
    • getSize

      public int getSize()
      Returns the number of Cells in the cluster.
      Specified by:
      getSize in interface CellCluster
      Returns:
      the size of the cluster, i.e., the number of Cells it contains.
    • isActive

      public boolean isActive()
      Checks if the cluster is currently active.
      Specified by:
      isActive in interface CellCluster
      Returns:
      true if the cluster is active, false otherwise.
    • isClosed

      public boolean isClosed()
      Checks if the cluster has been closed.
      Specified by:
      isClosed in interface CellCluster
      Returns:
      true if the cluster is closed, false otherwise.
    • isEmpty

      public boolean isEmpty()
      Checks if the cluster is empty.
      Specified by:
      isEmpty in interface CellCluster
      Returns:
      true if the cluster contains no Cells, false otherwise.
    • getIndexOf

      public int getIndexOf(Cell cell)
      Retrieves the index of the specified Cell within the cluster.
      Specified by:
      getIndexOf in interface CellCluster
      Parameters:
      cell - the Cell to find the index of. Must not be null.
      Returns:
      the index of the specified Cell, or -1 if the Cell is not found in the cluster.
      Throws:
      IllegalArgumentException - if the provided Cell is null.
    • getCellAt

      public Cell getCellAt(int index)
      Retrieves the Cell at the specified index within the cluster.

      This method checks if the provided index is within the valid range (0 inclusive to the size of the cluster exclusive). If the index is out of bounds, an IllegalArgumentException is thrown.

      Specified by:
      getCellAt in interface CellCluster
      Parameters:
      index - the position of the cell to retrieve, must be between 0 (inclusive) and the current size of the cluster (exclusive).
      Returns:
      the Cell at the specified index in the cluster.
      Throws:
      IllegalArgumentException - if the index is out of bounds, indicating that it is either negative or greater than or equal to the current size of the cluster.
    • getText

      public String getText()
      Concatenates the content of all Cells in the cluster into a single string.
      Specified by:
      getText in interface CellCluster
      Returns:
      a String representing the combined content of all cells in the cluster. If the cluster is empty, an empty string is returned.
    • getFirstCell

      public Cell getFirstCell()
      Retrieves the first Cell in the cluster.
      Specified by:
      getFirstCell in interface CellCluster
      Returns:
      the first Cell in the cluster, or null if the cluster is empty.
    • getLastCell

      public Cell getLastCell()
      Retrieves the last Cell in the cluster.
      Specified by:
      getLastCell in interface CellCluster
      Returns:
      the last Cell in the cluster, or null if the cluster is empty.
    • setActive

      public void setActive(boolean newState)
      Sets the active state of the cluster.
      Specified by:
      setActive in interface CellCluster
      Parameters:
      newState - the new active state to be set for the cluster.
    • removeCell

      public boolean removeCell(Cell cell)
      Removes a Cell from the cluster.
      Specified by:
      removeCell in interface CellCluster
      Parameters:
      cell - the Cell to be removed from the cluster. Must not be null.
      Returns:
      true if the cell was successfully removed, false if the cell was not found.
      Throws:
      IllegalArgumentException - if the provided Cell is null.
    • contains

      public boolean contains(Cell cell)
      Checks if the cluster contains a specific Cell.
      Specified by:
      contains in interface CellCluster
      Parameters:
      cell - the Cell to check for within the cluster.
      Returns:
      true if the cell is found in the cluster, false if the cell is not found or is null.
    • close

      public boolean close()
      Closes the cluster, marking it as complete and preventing any further modifications such as adding, removing, or clearing cells within the cluster. This method performs a validation on the internal state of the Cells to ensure the cluster is in a valid and consistent state. If the cluster is already closed, the method returns true immediately.
      Specified by:
      close in interface CellCluster
      Returns:
      true if the cluster was successfully closed and validated, false otherwise.
    • clear

      public void clear()
      Clears all internal Cell references if the cluster has not yet been closed. This method is typically used during the cluster's construction phase when the cluster is determined to be invalid or needs to be reset, particularly SymbolClusters.
      Specified by:
      clear in interface CellCluster
    • forceClear

      public void forceClear()
      Forcefully clears all internal Cell references, regardless of the cluster's state. This method is intended to be used after the cluster has been closed, ensuring that all internal data is removed.
      Specified by:
      forceClear in interface CellCluster
    • fill

      public void fill(char c)
      Sets the content of each Cell within this cluster to the specified character. This method floods the cluster with the given content.
      Specified by:
      fill in interface CellCluster
      Parameters:
      c - the character to set as the content for all cells in the cluster.
    • toString

      public String toString()
      Returns a string representation of the CellCluster object.

      This method overrides the toString method to provide a detailed representation of the CellCluster instance. It includes the name "LetterCluster" followed by the string representation of the superclass, and then appends the text content of the cluster using the getText() method.

      Overrides:
      toString in class Object
      Returns:
      A string that represents the CellCluster, including its superclass representation and text content.