getSourceRepository($data); if ($sourceRepository === null) { return new ActionResult( ActionStatus::FAILED, 'Could not find source repository' ); } $destinationRepository = $this->getDestinationRepository($data); if ($destinationRepository === null) { return new ActionResult( ActionStatus::FAILED, 'Could not find destination repository' ); } $this->handleFilters($sourceRepository, $destinationRepository, $data); $action = $this->reconcileAction(); return $action->reconcileRepositories($sourceRepository, $destinationRepository); } /** * Get the reconcile action. * * @return ReconcileRepositoriesAction */ abstract protected function reconcileAction(): ReconcileRepositoriesAction; /** * Get source repository. * * @param array $data * @return RepositoryInterface|null */ abstract protected function getSourceRepository(array $data = []): ?RepositoryInterface; /** * Get destination repository. * * @param array $data * @return RepositoryInterface|null */ abstract protected function getDestinationRepository(array $data = []): ?RepositoryInterface; /** * Apply filters to repositories before reconciliation. * * @param RepositoryInterface $sourceRepository * @param RepositoryInterface $destinationRepository * @param array $data * @return void */ protected function handleFilters( RepositoryInterface $sourceRepository, RepositoryInterface $destinationRepository, array $data = [] ): void { // Not supported by default } }