private void processDirectoryResponse(OMMItemEvent event)
    {
        OMMMsg responseMessage = event.getMsg();
        ItemClosure itemClosure = (ItemClosure)event.getClosure();
        int itemIdx = itemClosure._idx;

        System.out.println(_className + ":* Received Directory Response from consumer - "
                + OMMMsg.MsgType.toString(responseMessage.getMsgType()));

        // update; onpass to providerNI only if a refresh had been received previously
        // a provider disconnect sends a directory update with service down
        if (responseMessage.getMsgType() == OMMMsg.MsgType.UPDATE_RESP)
        {
            if (_cachedItemsList[itemIdx]._bRefreshReceived == true)
                _parent.publishMessage2ProviderNI(responseMessage, itemClosure._publishToken);

            return;
        }
        else if (responseMessage.getMsgType() == OMMMsg.MsgType.GENERIC)
        {
            System.out.println("Received generic message type, not supported. ");
        }

        // stream is closed; cleanup;
        // onpass to providerNI only if a refresh had been received previously
        if (responseMessage.isFinal())
        {
            if (_cachedItemsList[itemIdx]._bRefreshReceived == true)
                _parent.publishMessage2ProviderNI(responseMessage, itemClosure._publishToken);

            _cachedItemsList[itemIdx]._bRefreshReceived = false;
            _cachedItemsList[itemIdx]._handle = null;
            _cachedItemsList[itemIdx]._publishToken = null;

            return;
        }

        // refresh; set flag to indicate refresh has been received;
        // change response type from SOLICITED to UNSOLOCITED;
        // request items
        if (responseMessage.getMsgType() == OMMMsg.MsgType.REFRESH_RESP)
        {
            _cachedItemsList[itemIdx]._bRefreshReceived = true;
            OMMMsg reEncodedMessage = OMMMsgReencoder.changeResponseTypeToUnsolicited(event
                    .getMsg(), 1000);
            // Would need to replace map key from consumer with the correct
            // service name for provider.
            // For the time being make sure that the service name is the same
            // for provider, this hybrid application & the source distributor service name
            _parent.publishMessage2ProviderNI(reEncodedMessage, itemClosure._publishToken);
            makeItemRequests();
        }

        // disconnect; onpass this providerNI
        // not necessary to check if a previous refresh had been received;
        // this is because a previous login suspect message will reset
        // the refreshReceived status
        if (responseMessage.getMsgType() == OMMMsg.MsgType.STATUS_RESP)
        {
            // inform the providerNI that service is down
            _parent.publishMessage2ProviderNI(responseMessage, itemClosure._publishToken);
        }
    }