public Orchestrator()

in aws-datastore/src/main/java/com/amplifyframework/datastore/syncengine/Orchestrator.java [89:152]


    public Orchestrator(
            @NonNull final ModelProvider modelProvider,
            @NonNull final SchemaRegistry schemaRegistry,
            @NonNull final LocalStorageAdapter localStorageAdapter,
            @NonNull final AppSync appSync,
            @NonNull final DataStoreConfigurationProvider dataStoreConfigurationProvider,
            @NonNull final Supplier<State> targetState,
            final boolean isSyncRetryEnabled) {
        Objects.requireNonNull(schemaRegistry);
        Objects.requireNonNull(modelProvider);
        Objects.requireNonNull(appSync);
        Objects.requireNonNull(localStorageAdapter);

        this.mutationOutbox = new PersistentMutationOutbox(localStorageAdapter);
        VersionRepository versionRepository = new VersionRepository(localStorageAdapter);
        Merger merger = new Merger(mutationOutbox, versionRepository, localStorageAdapter);
        SyncTimeRegistry syncTimeRegistry = new SyncTimeRegistry(localStorageAdapter);
        ConflictResolver conflictResolver = new ConflictResolver(dataStoreConfigurationProvider, appSync);
        this.queryPredicateProvider = new QueryPredicateProvider(dataStoreConfigurationProvider);

        this.mutationProcessor = MutationProcessor.builder()
            .merger(merger)
            .versionRepository(versionRepository)
            .schemaRegistry(schemaRegistry)
            .mutationOutbox(mutationOutbox)
            .appSync(appSync)
            .conflictResolver(conflictResolver)
            .build();
        this.syncProcessor = SyncProcessor.builder()
            .modelProvider(modelProvider)
            .schemaRegistry(schemaRegistry)
            .syncTimeRegistry(syncTimeRegistry)
            .appSync(appSync)
            .merger(merger)
            .dataStoreConfigurationProvider(dataStoreConfigurationProvider)
            .queryPredicateProvider(queryPredicateProvider)
            .retryHandler(new RetryHandler())
                .isSyncRetryEnabled(isSyncRetryEnabled)
            .build();
        this.subscriptionProcessor = SubscriptionProcessor.builder()
                .appSync(appSync)
                .modelProvider(modelProvider)
                .schemaRegistry(schemaRegistry)
                .merger(merger)
                .queryPredicateProvider(queryPredicateProvider)
                .onFailure(this::onApiSyncFailure)
                .build();
        this.storageObserver = new StorageObserver(localStorageAdapter, mutationOutbox);
        this.currentState = new AtomicReference<>(State.STOPPED);
        this.targetState = targetState;
        this.disposables = new CompositeDisposable();

        // Operation times out after 60 seconds. If there are more than 5 models,
        // then 20 seconds are added to the timer per additional model count.
        this.adjustedTimeoutSeconds = Math.max(
                NETWORK_OP_TIMEOUT_SECONDS,
                TIMEOUT_SECONDS_PER_MODEL * Math.max(
                        modelProvider.models().size(),
                        modelProvider.modelSchemas().size()
                )
        );
        this.startStopSemaphore = new Semaphore(1);

    }