@Override public CashDepositTransaction createCashDepositTransaction( CashTransactionParameters depositParameters) throws CantCreateDepositTransactionException { CashMoneyWallet wallet; try { wallet = cashMoneyWalletManager.loadCashMoneyWallet(depositParameters.getPublicKeyWallet()); } catch (CantLoadCashMoneyWalletException e) { pluginRoot.reportError(UnexpectedPluginExceptionSeverity.DISABLES_THIS_PLUGIN, e); throw new CantCreateDepositTransactionException( CantCreateDepositTransactionException.DEFAULT_MESSAGE, e, "CashMoneyTransactionDepositManager", "Failed to load Cash Money Wallet"); } try { // TODO - Revisar el parametro transactionId en este metodo: // wallet.getAvailableBalance().credit(depositParameters.getTransactionId(), // depositParameters.getPublicKeyActor(), depositParameters.getPublicKeyPlugin(), // depositParameters.getAmount(), depositParameters.getMemo()); // TODO - Revisar el parametro transactionId en este metodo porque esta dado excepcion debido // a que es el mismo que el de la instruccion de mas arriba: // wallet.getBookBalance().credit(depositParameters.getTransactionId(), // depositParameters.getPublicKeyActor(), depositParameters.getPublicKeyPlugin(), // depositParameters.getAmount(), depositParameters.getMemo()); // TODO - Se le esta colocando un random ID pra que sea unico. Por favor revisar esto wallet .getAvailableBalance() .credit( UUID.randomUUID(), depositParameters.getPublicKeyActor(), depositParameters.getPublicKeyPlugin(), depositParameters.getAmount(), depositParameters.getMemo()); // TODO - Se le esta colocando un random ID pra que sea unico. Por favor revisar esto wallet .getBookBalance() .credit( UUID.randomUUID(), depositParameters.getPublicKeyActor(), depositParameters.getPublicKeyPlugin(), depositParameters.getAmount(), depositParameters.getMemo()); } catch (CantGetCashMoneyWalletBalanceException e) { pluginRoot.reportError(UnexpectedPluginExceptionSeverity.DISABLES_THIS_PLUGIN, e); throw new CantCreateDepositTransactionException( CantCreateDepositTransactionException.DEFAULT_MESSAGE, e, "CashMoneyTransactionDepositManager", "Failed to load Cash Money Wallet Balance"); } catch (CantRegisterCreditException e) { pluginRoot.reportError(UnexpectedPluginExceptionSeverity.DISABLES_THIS_PLUGIN, e); throw new CantCreateDepositTransactionException( CantCreateDepositTransactionException.DEFAULT_MESSAGE, e, "CashMoneyTransactionDepositManager", "Failed to register credit in Wallet Balance"); } return dao.createCashDepositTransaction(depositParameters); }
private void doTheMainTask() { // System.out.println("CASHHOLD - Agent LOOP"); List<CashHoldTransaction> transactionList; try { transactionList = holdTransactionManager.getAcknowledgedTransactionList(); } catch (CantGetHoldTransactionException e) { errorManager.reportUnexpectedPluginException( Plugins.BITDUBAI_CSH_MONEY_TRANSACTION_HOLD, UnexpectedPluginExceptionSeverity.DISABLES_THIS_PLUGIN, e); return; } /* * For each new (acknowledged) transaction, this thread: * Changes its status to Pending * Tries to hold funds in wallet * If successfull, changes transaction status to Confirmed * If not, changes transaction status to Rejected. * Sends an event, notifying the calling plugin the status change */ for (CashHoldTransaction transaction : transactionList) { // Cambiar el status de la transaccion a pending try { holdTransactionManager.setTransactionStatusToPending(transaction.getTransactionId()); } catch (CantUpdateHoldTransactionException ex) { errorManager.reportUnexpectedPluginException( Plugins.BITDUBAI_CSH_MONEY_TRANSACTION_HOLD, UnexpectedPluginExceptionSeverity.NOT_IMPORTANT, ex); } // Abrir el cash wallet con el public key del transaction if (cashMoneyWallet == null || transaction.getPublicKeyWallet() != lastPublicKey) { try { // cashMoneyWallet = // cashMoneyWalletManager.loadCashMoneyWallet(transaction.getPublicKeyWallet()); cashMoneyWallet = cashMoneyWalletManager.loadCashMoneyWallet("cash_wallet"); } catch (CantLoadCashMoneyWalletException e) { errorManager.reportUnexpectedPluginException( Plugins.BITDUBAI_CSH_MONEY_TRANSACTION_HOLD, UnexpectedPluginExceptionSeverity.NOT_IMPORTANT, e); continue; } } // Intentar hacer el hold en el cash wallet try { cashMoneyWallet.hold( transaction.getTransactionId(), transaction.getPublicKeyActor(), transaction.getPublicKeyPlugin(), transaction.getAmount(), transaction.getMemo()); holdTransactionManager.setTransactionStatusToConfirmed(transaction.getTransactionId()); } catch (CantRegisterHoldException | CashMoneyWalletInsufficientFundsException e) { // Reject si no hay fondos o no se puede hacer el hold por alguna razon try { holdTransactionManager.setTransactionStatusToRejected(transaction.getTransactionId()); } catch (CantUpdateHoldTransactionException ex) { errorManager.reportUnexpectedPluginException( Plugins.BITDUBAI_CSH_MONEY_TRANSACTION_HOLD, UnexpectedPluginExceptionSeverity.NOT_IMPORTANT, ex); } } catch (CantUpdateHoldTransactionException e) { errorManager.reportUnexpectedPluginException( Plugins.BITDUBAI_CSH_MONEY_TRANSACTION_HOLD, UnexpectedPluginExceptionSeverity.NOT_IMPORTANT, e); } // TODO: Lanzar un evento al plugin que envio la transaccion para avisarle que se actualizo el // status de su transaccion. } }