Skip to content

Commit

Permalink
TASK: Deprecate WorkspaceFinder and introduce forward-compatible API
Browse files Browse the repository at this point in the history
Based on neos#5146
Required to ease migration to neos#5096
  • Loading branch information
mhsdesign committed Oct 10, 2024
1 parent 5d31a15 commit f15eabc
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 8 deletions.
25 changes: 20 additions & 5 deletions Neos.ContentRepository.Core/Classes/ContentRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@
use Neos\ContentRepository\Core\Projection\ProjectionStateInterface;
use Neos\ContentRepository\Core\Projection\ProjectionStatuses;
use Neos\ContentRepository\Core\Projection\WithMarkStaleInterface;
use Neos\ContentRepository\Core\Projection\Workspace\Workspace;
use Neos\ContentRepository\Core\Projection\Workspace\WorkspaceFinder;
use Neos\ContentRepository\Core\Projection\Workspace\Workspaces;
use Neos\ContentRepository\Core\SharedModel\ContentRepository\ContentRepositoryId;
use Neos\ContentRepository\Core\SharedModel\ContentRepository\ContentRepositoryStatus;
use Neos\ContentRepository\Core\SharedModel\Exception\WorkspaceDoesNotExist;
Expand Down Expand Up @@ -234,11 +236,6 @@ public function resetProjectionState(string $projectionClassName): void
$projection->reset();
}

public function getNodeTypeManager(): NodeTypeManager
{
return $this->nodeTypeManager;
}

/**
* @throws WorkspaceDoesNotExist if the workspace does not exist
*/
Expand All @@ -247,6 +244,19 @@ public function getContentGraph(WorkspaceName $workspaceName): ContentGraphInter
return $this->projectionState(ContentGraphFinder::class)->getByWorkspaceName($workspaceName);
}

public function findWorkspaceByName(WorkspaceName $workspaceName): ?Workspace
{
return $this->getWorkspaceFinder()->findOneByName($workspaceName);
}

public function getWorkspaces(): Workspaces
{
return $this->getWorkspaceFinder()->findAll();
}

/**
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::getWorkspaces()} and {@see ContentRepository::findWorkspaceByName()} instead.
*/
public function getWorkspaceFinder(): WorkspaceFinder
{
return $this->projectionState(WorkspaceFinder::class);
Expand All @@ -257,6 +267,11 @@ public function getContentStreamFinder(): ContentStreamFinder
return $this->projectionState(ContentStreamFinder::class);
}

public function getNodeTypeManager(): NodeTypeManager
{
return $this->nodeTypeManager;
}

public function getVariationGraph(): InterDimensionalVariationGraph
{
return $this->variationGraph;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,4 +129,9 @@ public function isPublicWorkspace(): bool
{
return $this->baseWorkspaceName === null && $this->workspaceOwner === null;
}

public function isRootWorkspace(): bool
{
return $this->baseWorkspaceName !== null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@
use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceTitle;

/**
* Workspace Finder
* The legacy Workspace Finder
*
* @api
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::getWorkspaces()} and {@see ContentRepository::findWorkspaceByName()} instead.
* @internal
*/
final class WorkspaceFinder implements ProjectionStateInterface
{
Expand All @@ -36,7 +37,9 @@ public function __construct(
) {
}


/**
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::findWorkspaceByName()} instead
*/
public function findOneByName(WorkspaceName $name): ?Workspace
{
$workspace = $this->workspaceRuntimeCache->getWorkspaceByName($name);
Expand All @@ -63,6 +66,15 @@ public function findOneByName(WorkspaceName $name): ?Workspace
return $workspace;
}

/**
* @deprecated with 9.0.0-beta14 discouraged. You should just operate on workspace names instead.
* To still archive the functionality please use {@see ContentRepository::getWorkspaces()} instead and filter the result:
*
* $this->contentRepository->getWorkspaces()->find(
* fn (Workspace $workspace) => $workspace->currentContentStreamId->equals($contentStreamId)
* )
*
*/
public function findOneByCurrentContentStreamId(
ContentStreamId $contentStreamId
): ?Workspace {
Expand Down Expand Up @@ -91,6 +103,7 @@ public function findOneByCurrentContentStreamId(
}

/**
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::getWorkspaces()} and {@see Workspaces::getBaseWorkspaces()} instead.
* @return array<string,Workspace>
* @throws DBALException
*/
Expand All @@ -116,6 +129,9 @@ public function findByBaseWorkspace(WorkspaceName $baseWorkspace): array
return $result;
}

/**
* @deprecated with 9.0.0-beta14 owners/collaborators should be assigned to workspaces outside the Content Repository core
*/
public function findOneByWorkspaceOwner(string $owner): ?Workspace
{
$workspaceRow = $this->dbal->executeQuery(
Expand All @@ -135,6 +151,9 @@ public function findOneByWorkspaceOwner(string $owner): ?Workspace
return $this->createWorkspaceFromDatabaseRow($workspaceRow);
}

/**
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::getWorkspaces()} instead
*/
public function findAll(): Workspaces
{
$result = [];
Expand All @@ -154,6 +173,12 @@ public function findAll(): Workspaces
}

/**
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::getWorkspaces()} instead and filter the result:
*
* $this->contentRepository->getWorkspaces()->filter(
* fn (Workspace $workspace) => $workspace->status === WorkspaceStatus::OUTDATED
* )
*
* @return array<string,Workspace>
* @throws \Doctrine\DBAL\Driver\Exception
* @throws DBALException
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,34 @@ public function getIterator(): \Traversable
yield from array_values($this->workspaces);
}

/**
* @param \Closure(Workspace): bool $callback
*/
public function filter(\Closure $callback): self
{
return new self(array_filter($this->workspaces, $callback));
}

/**
* @param \Closure(Workspace): bool $callback
*/
public function find(\Closure $callback): ?Workspace
{
foreach ($this->workspaces as $workspace) {
if ($callback($workspace)) {
return $workspace;
}
}
return null;
}

public function count(): int
{
return count($this->workspaces);
}

public function isEmpty(): bool
{
return $this->workspaces === [];
}
}

0 comments on commit f15eabc

Please sign in to comment.