- All Implemented Interfaces:
CellCluster
SymbolCluster class extends AbstractCluster and is
designed to manage a collection of SymbolCell objects. This
specialised cluster ensures that the cells it contains are of type
SymbolCell and provides validation to ensure that the cluster
structure adheres to specific rules regarding opening and closing symbols.
The SymbolCluster enforces that it must begin with an opening symbol
and end with a corresponding closing symbol of the same type. Validation
checks are performed to ensure this structural integrity when the cluster is
closed.
This class also throws specific exceptions if an attempt is made to add an incompatible cell type or if the cluster does not conform to the required structure.
- Author:
- Kheagen Haskins
-
Nested Class Summary
Nested classes/interfaces inherited from interface com.slinky.hackmaster.model.cell.CellCluster
CellCluster.ClusterCloseException -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanAdds aCellto theSymbolCluster.voidclear()Clears all internalCellreferences if the cluster has not yet been closed.voidclick()Handles the internal behaviour triggered by a click on this cluster.booleanclose()Closes the cluster, marking it as complete and preventing any further modifications such as adding, removing, or clearing cells within the cluster.booleanChecks if the cluster contains a specificCell.voidfill(char c) Sets the content of eachCellwithin this cluster to the specified character.voidForcefully clears all internalCellreferences, regardless of the cluster's state.getCellAt(int index) Retrieves theCellat the specified index within the cluster.getCells()Retrieves the list ofCells in the cluster.Retrieves the firstCellin the cluster.intgetIndexOf(Cell cell) Retrieves the index of the specifiedCellwithin the cluster.Retrieves the lastCellin the cluster.intgetSize()Returns the number ofCells in the cluster.getText()Concatenates the content of allCells in the cluster into a single string.booleanisActive()Checks if the cluster is currently active.booleanisClosed()Checks if the cluster has been closed.booleanisEmpty()Checks if the cluster is empty.booleanremoveCell(Cell cell) Removes aCellfrom the cluster.voidsetActive(boolean newState) Sets the active state of the cluster.toString()Returns a string representation of theCellClusterobject.booleanvalidate()Validates theSymbolClusterto ensure it meets the required structure: it must start with an opening symbol and end with a corresponding closing symbol.
-
Constructor Details
-
SymbolCluster
public SymbolCluster()
-
-
Method Details
-
addCell
Adds aCellto theSymbolCluster. The cell must be an instance ofSymbolCell. If the cell is not aSymbolCell, anIllegalArgumentExceptionis thrown.- Specified by:
addCellin interfaceCellCluster- Parameters:
cell- theCellto be added to the cluster.- Returns:
trueif the cell was successfully added,falseotherwise.- Throws:
IllegalArgumentException- if the cell is not an instance ofSymbolCell.
-
validate
public boolean validate()Validates theSymbolClusterto ensure it meets the required structure: it must start with an opening symbol and end with a corresponding closing symbol.If the cluster is empty, or if the first and last cells do not form a valid opening and closing pair, specific exceptions are thrown to indicate the structural issues.
- Returns:
trueif the cluster is valid,falseif the cluster is empty.- Throws:
CellCluster.ClusterCloseException- if the cluster is incomplete, does not start with an opening symbol, or does not end with a matching closing symbol.
-
getCells
Retrieves the list ofCells in the cluster.- Specified by:
getCellsin interfaceCellCluster- Returns:
- a
Listof allCells contained in the cluster.
-
getSize
public int getSize()Returns the number ofCells in the cluster.- Specified by:
getSizein interfaceCellCluster- 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:
isActivein interfaceCellCluster- Returns:
trueif the cluster is active,falseotherwise.
-
isClosed
public boolean isClosed()Checks if the cluster has been closed.- Specified by:
isClosedin interfaceCellCluster- Returns:
trueif the cluster is closed,falseotherwise.
-
isEmpty
public boolean isEmpty()Checks if the cluster is empty.- Specified by:
isEmptyin interfaceCellCluster- Returns:
trueif the cluster contains noCells,falseotherwise.
-
getIndexOf
Retrieves the index of the specifiedCellwithin the cluster.- Specified by:
getIndexOfin interfaceCellCluster- Parameters:
cell- theCellto find the index of. Must not benull.- Returns:
- the index of the specified
Cell, or-1if theCellis not found in the cluster. - Throws:
IllegalArgumentException- if the providedCellisnull.
-
getCellAt
Retrieves theCellat 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
IllegalArgumentExceptionis thrown.- Specified by:
getCellAtin interfaceCellCluster- Parameters:
index- the position of the cell to retrieve, must be between 0 (inclusive) and the current size of the cluster (exclusive).- Returns:
- the
Cellat 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
Concatenates the content of allCells in the cluster into a single string.- Specified by:
getTextin interfaceCellCluster- Returns:
- a
Stringrepresenting the combined content of all cells in the cluster. If the cluster is empty, an empty string is returned.
-
getFirstCell
Retrieves the firstCellin the cluster.- Specified by:
getFirstCellin interfaceCellCluster- Returns:
- the first
Cellin the cluster, ornullif the cluster is empty.
-
getLastCell
Retrieves the lastCellin the cluster.- Specified by:
getLastCellin interfaceCellCluster- Returns:
- the last
Cellin the cluster, ornullif the cluster is empty.
-
setActive
public void setActive(boolean newState) Sets the active state of the cluster.- Specified by:
setActivein interfaceCellCluster- Parameters:
newState- the new active state to be set for the cluster.
-
removeCell
Removes aCellfrom the cluster.- Specified by:
removeCellin interfaceCellCluster- Parameters:
cell- theCellto be removed from the cluster. Must not benull.- Returns:
trueif the cell was successfully removed,falseif the cell was not found.- Throws:
IllegalArgumentException- if the providedCellisnull.
-
contains
Checks if the cluster contains a specificCell.- Specified by:
containsin interfaceCellCluster- Parameters:
cell- theCellto check for within the cluster.- Returns:
trueif the cell is found in the cluster,falseif the cell is not found or isnull.
-
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 theCells to ensure the cluster is in a valid and consistent state. If the cluster is already closed, the method returnstrueimmediately.- Specified by:
closein interfaceCellCluster- Returns:
trueif the cluster was successfully closed and validated,falseotherwise.
-
clear
public void clear()Clears all internalCellreferences 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, particularlySymbolClusters.- Specified by:
clearin interfaceCellCluster
-
forceClear
public void forceClear()Forcefully clears all internalCellreferences, 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:
forceClearin interfaceCellCluster
-
fill
public void fill(char c) Sets the content of eachCellwithin this cluster to the specified character. This method floods the cluster with the given content.- Specified by:
fillin interfaceCellCluster- Parameters:
c- the character to set as the content for all cells in the cluster.
-
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:
clickin interfaceCellCluster
-
toString
Returns a string representation of theCellClusterobject.This method overrides the
toStringmethod to provide a detailed representation of theCellClusterinstance. It includes the name "LetterCluster" followed by the string representation of the superclass, and then appends the text content of the cluster using thegetText()method.
-