Rename ManagedStyle to PossiblyUpdatedStyle and add documentation

This commit is contained in:
Antoine Lamirault 2021-03-30 14:04:40 +02:00
parent 774fb643e0
commit 1dccfb1203
No known key found for this signature in database
GPG Key ID: 33AB3D058FEC12B4
7 changed files with 52 additions and 43 deletions

View File

@ -4,6 +4,10 @@ namespace Box\Spout\Writer\Common\Manager;
use Box\Spout\Common\Entity\Style\Style; use Box\Spout\Common\Entity\Style\Style;
/**
* Class RegisteredStyle
* Allow to know if this style must replace actual row style.
*/
class RegisteredStyle class RegisteredStyle
{ {
/** /**
@ -14,12 +18,12 @@ class RegisteredStyle
/** /**
* @var bool * @var bool
*/ */
private $isRowStyle; private $isMatchingRowStyle;
public function __construct(Style $style, bool $isRowStyle) public function __construct(Style $style, bool $isMatchingRowStyle)
{ {
$this->style = $style; $this->style = $style;
$this->isRowStyle = $isRowStyle; $this->isMatchingRowStyle = $isMatchingRowStyle;
} }
public function getStyle() : Style public function getStyle() : Style
@ -27,8 +31,8 @@ class RegisteredStyle
return $this->style; return $this->style;
} }
public function isRowStyle() : bool public function isMatchingRowStyle() : bool
{ {
return $this->isRowStyle; return $this->isMatchingRowStyle;
} }
} }

View File

@ -4,7 +4,12 @@ namespace Box\Spout\Writer\Common\Manager\Style;
use Box\Spout\Common\Entity\Style\Style; use Box\Spout\Common\Entity\Style\Style;
class ManagedStyle /**
* Class PossiblyUpdatedStyle
* Indicates if style is updated.
* It allow to know if style registration must be done.
*/
class PossiblyUpdatedStyle
{ {
private $style; private $style;
private $isUpdated; private $isUpdated;

View File

@ -50,9 +50,9 @@ class StyleManager implements StyleManagerInterface
* Typically, set "wrap text" if a cell contains a new line. * Typically, set "wrap text" if a cell contains a new line.
* *
* @param Cell $cell * @param Cell $cell
* @return ManagedStyle The eventually updated style * @return PossiblyUpdatedStyle The eventually updated style
*/ */
public function applyExtraStylesIfNeeded(Cell $cell) : ManagedStyle public function applyExtraStylesIfNeeded(Cell $cell) : PossiblyUpdatedStyle
{ {
return $this->applyWrapTextIfCellContainsNewLine($cell); return $this->applyWrapTextIfCellContainsNewLine($cell);
} }
@ -67,9 +67,9 @@ class StyleManager implements StyleManagerInterface
* on the Windows version of Excel... * on the Windows version of Excel...
* *
* @param Cell $cell The cell the style should be applied to * @param Cell $cell The cell the style should be applied to
* @return ManagedStyle The eventually updated style * @return PossiblyUpdatedStyle The eventually updated style
*/ */
protected function applyWrapTextIfCellContainsNewLine(Cell $cell) : ManagedStyle protected function applyWrapTextIfCellContainsNewLine(Cell $cell) : PossiblyUpdatedStyle
{ {
$cellStyle = $cell->getStyle(); $cellStyle = $cell->getStyle();
@ -77,9 +77,9 @@ class StyleManager implements StyleManagerInterface
if (!$cellStyle->hasSetWrapText() && $cell->isString() && \strpos($cell->getValue(), "\n") !== false) { if (!$cellStyle->hasSetWrapText() && $cell->isString() && \strpos($cell->getValue(), "\n") !== false) {
$cellStyle->setShouldWrapText(); $cellStyle->setShouldWrapText();
return new ManagedStyle($cellStyle, true); return new PossiblyUpdatedStyle($cellStyle, true);
} }
return new ManagedStyle($cellStyle, false); return new PossiblyUpdatedStyle($cellStyle, false);
} }
} }

View File

@ -24,7 +24,7 @@ interface StyleManagerInterface
* Typically, set "wrap text" if a cell contains a new line. * Typically, set "wrap text" if a cell contains a new line.
* *
* @param Cell $cell * @param Cell $cell
* @return ManagedStyle The eventually updated style * @return PossiblyUpdatedStyle The eventually updated style
*/ */
public function applyExtraStylesIfNeeded(Cell $cell) : ManagedStyle; public function applyExtraStylesIfNeeded(Cell $cell) : PossiblyUpdatedStyle;
} }

View File

@ -128,8 +128,8 @@ class WorksheetManager implements WorksheetManagerInterface
if ($nextCell === null || $cell->getValue() !== $nextCell->getValue()) { if ($nextCell === null || $cell->getValue() !== $nextCell->getValue()) {
$registeredStyle = $this->applyStyleAndRegister($cell, $rowStyle); $registeredStyle = $this->applyStyleAndRegister($cell, $rowStyle);
$cellStyle = $registeredStyle->getStyle(); $cellStyle = $registeredStyle->getStyle();
if ($registeredStyle->isRowStyle()) { if ($registeredStyle->isMatchingRowStyle()) {
$rowStyle = $cellStyle; $rowStyle = $cellStyle; // Replace actual rowStyle (possibly with null id) by registered style (with id)
} }
$data .= $this->getCellXMLWithStyle($cell, $cellStyle, $currentCellIndex, $nextCellIndex); $data .= $this->getCellXMLWithStyle($cell, $cellStyle, $currentCellIndex, $nextCellIndex);
@ -161,25 +161,25 @@ class WorksheetManager implements WorksheetManagerInterface
*/ */
private function applyStyleAndRegister(Cell $cell, Style $rowStyle) : RegisteredStyle private function applyStyleAndRegister(Cell $cell, Style $rowStyle) : RegisteredStyle
{ {
$isRowStyle = false; $isMatchingRowStyle = false;
if ($cell->getStyle()->isEmpty()) { if ($cell->getStyle()->isEmpty()) {
$cell->setStyle($rowStyle); $cell->setStyle($rowStyle);
$managedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell); $possiblyUpdatedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell);
if ($managedStyle->isUpdated()) { if ($possiblyUpdatedStyle->isUpdated()) {
$registeredStyle = $this->styleManager->registerStyle($managedStyle->getStyle()); $registeredStyle = $this->styleManager->registerStyle($possiblyUpdatedStyle->getStyle());
} else { } else {
$registeredStyle = $this->styleManager->registerStyle($rowStyle); $registeredStyle = $this->styleManager->registerStyle($rowStyle);
$isRowStyle = true; $isMatchingRowStyle = true;
} }
} else { } else {
$mergedCellAndRowStyle = $this->styleMerger->merge($cell->getStyle(), $rowStyle); $mergedCellAndRowStyle = $this->styleMerger->merge($cell->getStyle(), $rowStyle);
$cell->setStyle($mergedCellAndRowStyle); $cell->setStyle($mergedCellAndRowStyle);
$managedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell); $possiblyUpdatedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell);
if ($managedStyle->isUpdated()) { if ($possiblyUpdatedStyle->isUpdated()) {
$newCellStyle = $managedStyle->getStyle(); $newCellStyle = $possiblyUpdatedStyle->getStyle();
} else { } else {
$newCellStyle = $mergedCellAndRowStyle; $newCellStyle = $mergedCellAndRowStyle;
} }
@ -187,7 +187,7 @@ class WorksheetManager implements WorksheetManagerInterface
$registeredStyle = $this->styleManager->registerStyle($newCellStyle); $registeredStyle = $this->styleManager->registerStyle($newCellStyle);
} }
return new RegisteredStyle($registeredStyle, $isRowStyle); return new RegisteredStyle($registeredStyle, $isMatchingRowStyle);
} }
private function getCellXMLWithStyle(Cell $cell, Style $style, int $currentCellIndex, int $nextCellIndex) : string private function getCellXMLWithStyle(Cell $cell, Style $style, int $currentCellIndex, int $nextCellIndex) : string

View File

@ -163,8 +163,8 @@ EOD;
foreach ($row->getCells() as $columnIndexZeroBased => $cell) { foreach ($row->getCells() as $columnIndexZeroBased => $cell) {
$registeredStyle = $this->applyStyleAndRegister($cell, $rowStyle); $registeredStyle = $this->applyStyleAndRegister($cell, $rowStyle);
$cellStyle = $registeredStyle->getStyle(); $cellStyle = $registeredStyle->getStyle();
if ($registeredStyle->isRowStyle()) { if ($registeredStyle->isMatchingRowStyle()) {
$rowStyle = $cellStyle; $rowStyle = $cellStyle; // Replace actual rowStyle (possibly with null id) by registered style (with id)
} }
$rowXML .= $this->getCellXML($rowIndexOneBased, $columnIndexZeroBased, $cell, $cellStyle->getId()); $rowXML .= $this->getCellXML($rowIndexOneBased, $columnIndexZeroBased, $cell, $cellStyle->getId());
} }
@ -188,26 +188,26 @@ EOD;
*/ */
private function applyStyleAndRegister(Cell $cell, Style $rowStyle) : RegisteredStyle private function applyStyleAndRegister(Cell $cell, Style $rowStyle) : RegisteredStyle
{ {
$isRowStyle = false; $isMatchingRowStyle = false;
if ($cell->getStyle()->isEmpty()) { if ($cell->getStyle()->isEmpty()) {
$cell->setStyle($rowStyle); $cell->setStyle($rowStyle);
$managedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell); $possiblyUpdatedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell);
if ($managedStyle->isUpdated()) { if ($possiblyUpdatedStyle->isUpdated()) {
$registeredStyle = $this->styleManager->registerStyle($managedStyle->getStyle()); $registeredStyle = $this->styleManager->registerStyle($possiblyUpdatedStyle->getStyle());
} else { } else {
$registeredStyle = $this->styleManager->registerStyle($rowStyle); $registeredStyle = $this->styleManager->registerStyle($rowStyle);
$isRowStyle = true; $isMatchingRowStyle = true;
} }
} else { } else {
$mergedCellAndRowStyle = $this->styleMerger->merge($cell->getStyle(), $rowStyle); $mergedCellAndRowStyle = $this->styleMerger->merge($cell->getStyle(), $rowStyle);
$cell->setStyle($mergedCellAndRowStyle); $cell->setStyle($mergedCellAndRowStyle);
$managedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell); $possiblyUpdatedStyle = $this->styleManager->applyExtraStylesIfNeeded($cell);
if ($managedStyle->isUpdated()) { if ($possiblyUpdatedStyle->isUpdated()) {
$newCellStyle = $managedStyle->getStyle(); $newCellStyle = $possiblyUpdatedStyle->getStyle();
} else { } else {
$newCellStyle = $mergedCellAndRowStyle; $newCellStyle = $mergedCellAndRowStyle;
} }
@ -215,7 +215,7 @@ EOD;
$registeredStyle = $this->styleManager->registerStyle($newCellStyle); $registeredStyle = $this->styleManager->registerStyle($newCellStyle);
} }
return new RegisteredStyle($registeredStyle, $isRowStyle); return new RegisteredStyle($registeredStyle, $isMatchingRowStyle);
} }
/** /**

View File

@ -28,10 +28,10 @@ class StyleManagerTest extends TestCase
$this->assertFalse($style->shouldWrapText()); $this->assertFalse($style->shouldWrapText());
$styleManager = $this->getStyleManager(); $styleManager = $this->getStyleManager();
$managedStyle = $styleManager->applyExtraStylesIfNeeded(new Cell("multi\nlines", $style)); $possiblyUpdatedStyle = $styleManager->applyExtraStylesIfNeeded(new Cell("multi\nlines", $style));
$this->assertTrue($managedStyle->isUpdated()); $this->assertTrue($possiblyUpdatedStyle->isUpdated());
$this->assertTrue($managedStyle->getStyle()->shouldWrapText()); $this->assertTrue($possiblyUpdatedStyle->getStyle()->shouldWrapText());
} }
public function testApplyExtraStylesIfNeededShouldReturnNullIfWrapTextNotNeeded() : void public function testApplyExtraStylesIfNeededShouldReturnNullIfWrapTextNotNeeded() : void
@ -40,9 +40,9 @@ class StyleManagerTest extends TestCase
$this->assertFalse($style->shouldWrapText()); $this->assertFalse($style->shouldWrapText());
$styleManager = $this->getStyleManager(); $styleManager = $this->getStyleManager();
$managedStyle = $styleManager->applyExtraStylesIfNeeded(new Cell('oneline', $style)); $possiblyUpdatedStyle = $styleManager->applyExtraStylesIfNeeded(new Cell('oneline', $style));
$this->assertFalse($managedStyle->isUpdated()); $this->assertFalse($possiblyUpdatedStyle->isUpdated());
} }
public function testApplyExtraStylesIfNeededShouldReturnNullIfWrapTextAlreadyApplied() : void public function testApplyExtraStylesIfNeededShouldReturnNullIfWrapTextAlreadyApplied() : void
@ -51,8 +51,8 @@ class StyleManagerTest extends TestCase
$this->assertTrue($style->shouldWrapText()); $this->assertTrue($style->shouldWrapText());
$styleManager = $this->getStyleManager(); $styleManager = $this->getStyleManager();
$managedStyle = $styleManager->applyExtraStylesIfNeeded(new Cell("multi\nlines", $style)); $possiblyUpdatedStyle = $styleManager->applyExtraStylesIfNeeded(new Cell("multi\nlines", $style));
$this->assertFalse($managedStyle->isUpdated()); $this->assertFalse($possiblyUpdatedStyle->isUpdated());
} }
} }