private void checkPendingEvent(String eventId) throws UnexpectedResultReturnedFromDatabaseException { try { String eventTypeCode = openContractBusinessTransactionDao.getEventType(eventId); String contractHash; String negotiationId; String negotiationIdFromDatabase; ContractType contractType; BusinessTransactionMetadata businessTransactionMetadata; ContractTransactionStatus contractTransactionStatus; if (eventTypeCode.equals(EventType.INCOMING_BUSINESS_TRANSACTION_CONTRACT_HASH.getCode())) { // Check if contract is created: List<Transaction<BusinessTransactionMetadata>> pendingTransactionList = transactionTransmissionManager.getPendingTransactions(Specialist.UNKNOWN_SPECIALIST); for (Transaction<BusinessTransactionMetadata> record : pendingTransactionList) { businessTransactionMetadata = record.getInformation(); contractHash = businessTransactionMetadata.getContractHash(); if (openContractBusinessTransactionDao.isContractHashExists(contractHash)) { negotiationId = businessTransactionMetadata.getNegotiationId(); negotiationIdFromDatabase = businessTransactionMetadata.getNegotiationId(); if (negotiationId.equals(negotiationIdFromDatabase)) { contractTransactionStatus = ContractTransactionStatus.PENDING_CONFIRMATION; } else { contractTransactionStatus = ContractTransactionStatus.HASH_REJECTED; } openContractBusinessTransactionDao.updateContractTransactionStatus( contractHash, contractTransactionStatus); openContractBusinessTransactionDao.updateEventStatus( contractHash, EventStatus.NOTIFIED); transactionTransmissionManager.confirmReception(record.getTransactionID()); } } } if (eventTypeCode.equals( EventType.INCOMING_CONFIRM_BUSINESS_TRANSACTION_CONTRACT.getCode())) { // Check if contract hash was sent. List<Transaction<BusinessTransactionMetadata>> pendingTransactionList = transactionTransmissionManager.getPendingTransactions(Specialist.UNKNOWN_SPECIALIST); for (Transaction<BusinessTransactionMetadata> record : pendingTransactionList) { businessTransactionMetadata = record.getInformation(); contractHash = businessTransactionMetadata.getContractHash(); if (openContractBusinessTransactionDao.isContractHashSentConfirmation(contractHash)) { openContractBusinessTransactionDao.updateContractTransactionStatus( contractHash, ContractTransactionStatus.PENDING_RESPONSE); openContractBusinessTransactionDao.updateEventStatus( contractHash, EventStatus.NOTIFIED); transactionTransmissionManager.confirmReception(record.getTransactionID()); } } } if (eventTypeCode.equals( EventType.INCOMING_CONFIRM_BUSINESS_TRANSACTION_RESPONSE.getCode())) { // TODO: check if contract hash was sent. List<Transaction<BusinessTransactionMetadata>> pendingTransactionList = transactionTransmissionManager.getPendingTransactions(Specialist.UNKNOWN_SPECIALIST); for (Transaction<BusinessTransactionMetadata> record : pendingTransactionList) { businessTransactionMetadata = record.getInformation(); contractHash = businessTransactionMetadata.getContractHash(); if (openContractBusinessTransactionDao.isContractHashPendingResponse(contractHash)) { openContractBusinessTransactionDao.updateContractTransactionStatus( contractHash, ContractTransactionStatus.CONTRACT_OPENED); openContractBusinessTransactionDao.updateEventStatus( contractHash, EventStatus.NOTIFIED); contractType = openContractBusinessTransactionDao.getContractType(contractHash); switch (contractType) { case PURCHASE: customerBrokerContractPurchaseManager .updateStatusCustomerBrokerPurchaseContractStatus( contractHash, ContractStatus.PENDING_PAYMENT); } transactionTransmissionManager.confirmReception(record.getTransactionID()); raiseNewContractEvent(); } } } // TODO: look a better way to deal with this exceptions } catch (CantDeliverPendingTransactionsException e) { e.printStackTrace(); } catch (CantUpdateRecordException e) { e.printStackTrace(); } catch (CantupdateCustomerBrokerContractPurchaseException e) { e.printStackTrace(); } catch (CantConfirmTransactionException e) { e.printStackTrace(); } }