Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FEATURE: Deprecate WorkspaceFinder and introduce new API #5279

Merged
merged 3 commits into from
Oct 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
mhsdesign marked this conversation as resolved.
Show resolved Hide resolved
{
return $this->getWorkspaceFinder()->findOneByName($workspaceName);
}

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

/**
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::findWorkspaces()} 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,8 +23,9 @@
use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceTitle;

/**
* Workspace Finder
* The legacy Workspace Finder
*
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::findWorkspaces()} and {@see ContentRepository::findWorkspaceByName()} instead.
* @api
*/
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::findWorkspaces()} 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 @@ -93,6 +105,7 @@ public function findOneByCurrentContentStreamId(
/**
* @return array<string,Workspace>
* @throws DBALException
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::findWorkspaces()} and {@see Workspaces::getDependantWorkspaces()} instead.
*/
public function findByBaseWorkspace(WorkspaceName $baseWorkspace): array
{
Expand All @@ -116,6 +129,10 @@ 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
* For Neos.Neos please use {@see \Neos\Neos\Domain\Service\WorkspaceService::getPersonalWorkspaceForUser()}
*/
public function findOneByWorkspaceOwner(string $owner): ?Workspace
{
$workspaceRow = $this->dbal->executeQuery(
Expand All @@ -135,6 +152,9 @@ public function findOneByWorkspaceOwner(string $owner): ?Workspace
return $this->createWorkspaceFromDatabaseRow($workspaceRow);
}

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

/**
* @deprecated with 9.0.0-beta14 please use {@see ContentRepository::findWorkspaces()} 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 @@ -92,6 +92,16 @@ public function getBaseWorkspaces(WorkspaceName $workspaceName): Workspaces
return Workspaces::fromArray($baseWorkspaces);
}

/**
* Get all dependent workspaces (if they are included in this result set).
*/
public function getDependantWorkspaces(WorkspaceName $workspaceName): Workspaces
{
return $this->filter(
static fn (Workspace $potentiallyDependentWorkspace) => $potentiallyDependentWorkspace->baseWorkspaceName?->equals($workspaceName) ?? false
);
}

/**
* @return \Traversable<int,Workspace>
*/
Expand All @@ -100,8 +110,44 @@ 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;
}

/**
* @template T
* @param \Closure(Workspace): T $callback
* @return list<T>
*/
public function map(\Closure $callback): array
{
return array_map($callback, array_values($this->workspaces));
}

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

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