class EidasCycle0And1MatchRequestSentStateController extends EidasMatchRequestSentStateController<EidasCycle0And1MatchRequestSentState> {

    @Override
    protected void transitionToNextStateForNoMatchResponse() {
        Optional<String> selfAssertedAttributeName = transactionsConfigProxy.getMatchingProcess(state.getRequestIssuerEntityId()).getAttributeName();
        if (selfAssertedAttributeName.isPresent()) {
            hubEventLogger.logWaitingForCycle3AttributesEvent(
                    state.getSessionId(),
                    state.getRequestIssuerEntityId(),
                    state.getRequestId(),
                    state.getSessionExpiryTimestamp());

            stateTransitionAction.transitionTo(getAwaitingCycle3DataState());
            return;
        }

        List<UserAccountCreationAttribute> userAccountCreationAttributes = transactionsConfigProxy.getUserAccountCreationAttributes(state.getRequestIssuerEntityId());
        if (!userAccountCreationAttributes.isEmpty()) {
            EidasAttributeQueryRequestDto attributeQueryRequestDto = createAttributeQuery(
                    userAccountCreationAttributes,
                    state.getEncryptedIdentityAssertion(),
                    state.getPersistentId(),
                    state.getCountrySignedResponseContainer());
            transitionToUserAccountCreationRequestSentState(attributeQueryRequestDto);
            return;
        }

        hubEventLogger.logCycle01NoMatchEvent(
                state.getSessionId(),
                state.getRequestIssuerEntityId(),
                state.getRequestId(),
                state.getSessionExpiryTimestamp());

        stateTransitionAction.transitionTo(createNoMatchState());
    }

    public  EidasCycle0And1MatchRequestSentStateController(
            final EidasCycle0And1MatchRequestSentState state,
            final StateTransitionAction stateTransitionAction,
            final HubEventLogger hubEventLogger,
            final PolicyConfiguration policyConfiguration,
            final LevelOfAssuranceValidator validator,
            final ResponseFromHubFactory responseFromHubFactory,
            final AttributeQueryService attributeQueryService,
            final TransactionsConfigProxy transactionsConfigProxy,
            final MatchingServiceConfigProxy matchingServiceConfigProxy);

}