private boolean isAddressStatusChanged(AddressStatus addressStatus) { lock.lock(); try { AbstractAddress address = addressStatus.getAddress(); String newStatus = addressStatus.getStatus(); if (addressesStatus.containsKey(address)) { String previousStatus = addressesStatus.get(address); if (previousStatus == null) { return newStatus != null; // Status changed if newStatus is not null } else { return !previousStatus.equals(newStatus); } } else { // Unused address, just mark it that we watch it if (newStatus == null) { commitAddressStatus(addressStatus); return false; } else { return true; } } } finally { lock.unlock(); } }
@Override public void onAddressStatusUpdate(AddressStatus status) { log.debug("Got a status {}", status); lock.lock(); try { if (status.getStatus() != null) { if (isAddressStatusChanged(status)) { this.balance = Value.valueOf(this.type, Long.valueOf(status.getStatus())); //if (registerStatusForUpdate(status)) { log.info("Must get transactions for address {}, status {}", status.getAddress(), status.getStatus()); if (blockchainConnection != null) { blockchainConnection.getHistoryTx(status, this); } } //} else { // log.info("Status {} already updating", status.getStatus()); //} } else { commitAddressStatus(status); } } finally { lock.unlock(); } }