|
From: Pelle B. <pe...@us...> - 2004-09-10 19:48:37
|
Update of /cvsroot/neuclear/neuclear-pay/src/java/org/neuclear/exchange/controllers/receivers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20812/src/java/org/neuclear/exchange/controllers/receivers Added Files: CancelExchangeOrderReceiver.java CancelExchangeReceiptReceiver.java ExchangeCompletedReceiptReceiver.java ExchangeCompletionOrderReceiver.java ExchangeOrderReceiptReceiver.java ExchangeOrderReceiver.java Log Message: Refactored all the Exchange related receivers into a new package under org.neuclear.exchange. Refactored the way the Receivers handle embedded objects. Now they pass them on to the parent receiver for processing before they do their own thing. --- NEW FILE: CancelExchangeReceiptReceiver.java --- package org.neuclear.exchange.controllers.receivers; import org.neuclear.asset.InvalidTransferException; import org.neuclear.asset.NegativeTransferException; import org.neuclear.asset.controllers.receivers.LedgerReceiver; import org.neuclear.commons.NeuClearException; import org.neuclear.exchange.orders.CancelExchangeOrder; import org.neuclear.exchange.orders.CancelExchangeReceipt; import org.neuclear.exchange.orders.ExchangeOrderGlobals; import org.neuclear.id.SignedNamedObject; import org.neuclear.id.receiver.HandlingReceiver; import org.neuclear.id.receiver.Receiver; import org.neuclear.id.receiver.UnsupportedTransaction; import org.neuclear.ledger.LedgerController; import org.neuclear.ledger.LowlevelLedgerException; import org.neuclear.ledger.UnknownTransactionException; /* $Id: CancelExchangeReceiptReceiver.java,v 1.1 2004/09/10 19:48:02 pelle Exp $ $Log: CancelExchangeReceiptReceiver.java,v $ Revision 1.1 2004/09/10 19:48:02 pelle Refactored all the Exchange related receivers into a new package under org.neuclear.exchange. Refactored the way the Receivers handle embedded objects. Now they pass them on to the parent receiver for processing before they do their own thing. Revision 1.1 2004/08/18 09:42:55 pelle Many fixes to the various Signing and SigningRequest Servlets etc. Revision 1.1 2004/07/22 21:48:42 pelle Further receivers and unit tests for for Exchanges etc. I've also changed the internal asset to ledger id from being the pk of the contract signer, to being the pk of the service key. Revision 1.1 2004/07/21 23:11:22 pelle Added single function Receivers and a DelegatingAssetController. These will eventually replace the CurrencyController and Auditor. */ /** * User: pelleb * Date: Jul 21, 2004 * Time: 12:45:42 PM */ public class CancelExchangeReceiptReceiver extends LedgerReceiver implements HandlingReceiver { public CancelExchangeReceiptReceiver(Receiver parent, LedgerController ledger) { super(parent, ledger); } public SignedNamedObject receive(SignedNamedObject obj) throws UnsupportedTransaction, NeuClearException { try { CancelExchangeReceipt receipt = (CancelExchangeReceipt) obj; CancelExchangeOrder cancel = receipt.getOrder(); String name = cancel.getAsset().getServiceId(); if (!(cancel.getSignatory().getName().equals(cancel.getReceipt().getOrder().getSignatory().getName()) || cancel.getSignatory().getName().equals(cancel.getReceipt().getOrder().getAgent().getServiceId()))) throw new InvalidTransferException("Only Agent is allowed to Sign Completion Order"); final String orderId = cancel.getReceipt().getOrder().getDigest(); if (ledger.heldTransactionExists(orderId)) ledger.cancel(orderId); } catch (ClassCastException e) { throw new UnsupportedTransaction(obj); } catch (UnknownTransactionException e) { throw new NeuClearException(e); } catch (NegativeTransferException e) { throw new NeuClearException(e); } catch (InvalidTransferException e) { throw new NeuClearException(e); } catch (LowlevelLedgerException e) { throw new NeuClearException(e); } return null; } public String handlesTagName() { return ExchangeOrderGlobals.CANCEL_RCPT_TAGNAME; } } --- NEW FILE: ExchangeOrderReceiver.java --- package org.neuclear.exchange.controllers.receivers; import org.neuclear.asset.InvalidTransferException; import org.neuclear.asset.NegativeTransferException; import org.neuclear.asset.contracts.Asset; import org.neuclear.asset.controllers.receivers.SigningLedgerReceiver; import org.neuclear.commons.NeuClearException; import org.neuclear.commons.crypto.signers.Signer; import org.neuclear.exchange.orders.ExchangeOrder; import org.neuclear.exchange.orders.ExchangeOrderGlobals; import org.neuclear.exchange.orders.ExchangeOrderReceipt; import org.neuclear.exchange.orders.builders.ExchangeOrderReceiptBuilder; import org.neuclear.id.SignedNamedObject; import org.neuclear.id.receiver.HandlingReceiver; import org.neuclear.id.receiver.Receiver; import org.neuclear.id.receiver.UnsupportedTransaction; import org.neuclear.ledger.*; /* $Id: ExchangeOrderReceiver.java,v 1.1 2004/09/10 19:48:02 pelle Exp $ $Log: ExchangeOrderReceiver.java,v $ Revision 1.1 2004/09/10 19:48:02 pelle Refactored all the Exchange related receivers into a new package under org.neuclear.exchange. Refactored the way the Receivers handle embedded objects. Now they pass them on to the parent receiver for processing before they do their own thing. Revision 1.3 2004/09/08 23:17:23 pelle Fees now work for everything but Exchange Completion. Revision 1.2 2004/07/23 18:58:39 pelle Updated to use the new complete method in ledger. Revision 1.1 2004/07/22 21:48:42 pelle Further receivers and unit tests for for Exchanges etc. I've also changed the internal asset to ledger id from being the pk of the contract signer, to being the pk of the service key. Revision 1.1 2004/07/21 23:11:22 pelle Added single function Receivers and a DelegatingAssetController. These will eventually replace the CurrencyController and Auditor. */ /** * User: pelleb * Date: Jul 21, 2004 * Time: 12:45:42 PM */ public class ExchangeOrderReceiver extends SigningLedgerReceiver implements HandlingReceiver { public ExchangeOrderReceiver(Receiver parent, Signer signer, LedgerController ledger) { super(parent, signer, ledger); } public SignedNamedObject receive(SignedNamedObject obj) throws UnsupportedTransaction, NeuClearException { try { ExchangeOrder order = (ExchangeOrder) obj; Asset asset = order.getAsset(); String name = asset.getServiceId(); double amount = order.getAmount().getAmount(); double fee = asset.getFeeStructure().calculateFee(amount); final PostedTransaction posted = ledger.hold(name, order.getDigest(), order.getSignatory().getName(), order.getAgent().getServiceId(), order.getExpiry(), asset.round(amount - fee), order.getComment()); if (fee > 0) { String req = "-" + order.getDigest().substring(1); PostedTransaction postedFee = ledger.transfer(name, req, order.getSignatory().getName(), asset.getFeeAccount().getName(), fee, "Exchange " + order.getDigest()); ledger.setReceiptId(req, order.getDigest()); } if (!signer.canSignFor(name)) return null; final ExchangeOrderReceipt receipt = (ExchangeOrderReceipt) new ExchangeOrderReceiptBuilder(order, posted.getTransactionTime()).convert(name, signer); ledger.setHeldReceiptId(order.getDigest(), receipt.getDigest()); return receipt; } catch (ClassCastException e) { throw new UnsupportedTransaction(obj); } catch (UnknownTransactionException e) { throw new NeuClearException(e); } catch (UnknownBookException e) { throw new NeuClearException(e); } catch (InsufficientFundsException e) { throw new NeuClearException(e); } catch (NegativeTransferException e) { throw new NeuClearException(e); } catch (InvalidTransferException e) { throw new NeuClearException(e); } catch (UnBalancedTransactionException e) { throw new NeuClearException(e); } catch (LowlevelLedgerException e) { throw new NeuClearException(e); } catch (InvalidTransactionException e) { throw new NeuClearException(e); } } public String handlesTagName() { return ExchangeOrderGlobals.EXCHANGE_TAGNAME; } } --- NEW FILE: CancelExchangeOrderReceiver.java --- package org.neuclear.exchange.controllers.receivers; import org.neuclear.asset.InvalidTransferException; import org.neuclear.asset.NegativeTransferException; import org.neuclear.asset.controllers.receivers.SigningLedgerReceiver; import org.neuclear.commons.NeuClearException; import org.neuclear.commons.crypto.signers.Signer; import org.neuclear.exchange.orders.CancelExchangeOrder; import org.neuclear.exchange.orders.CancelExchangeReceipt; import org.neuclear.exchange.orders.ExchangeOrderGlobals; import org.neuclear.exchange.orders.builders.CancelExchangeReceiptBuilder; import org.neuclear.id.SignedNamedObject; import org.neuclear.id.receiver.HandlingReceiver; import org.neuclear.id.receiver.Receiver; import org.neuclear.id.receiver.UnsupportedTransaction; import org.neuclear.ledger.LedgerController; import org.neuclear.ledger.LowlevelLedgerException; import org.neuclear.ledger.UnknownTransactionException; import java.util.Date; /* $Id: CancelExchangeOrderReceiver.java,v 1.1 2004/09/10 19:48:02 pelle Exp $ $Log: CancelExchangeOrderReceiver.java,v $ Revision 1.1 2004/09/10 19:48:02 pelle Refactored all the Exchange related receivers into a new package under org.neuclear.exchange. Refactored the way the Receivers handle embedded objects. Now they pass them on to the parent receiver for processing before they do their own thing. Revision 1.1 2004/07/22 21:48:42 pelle Further receivers and unit tests for for Exchanges etc. I've also changed the internal asset to ledger id from being the pk of the contract signer, to being the pk of the service key. Revision 1.1 2004/07/21 23:11:22 pelle Added single function Receivers and a DelegatingAssetController. These will eventually replace the CurrencyController and Auditor. */ /** * User: pelleb * Date: Jul 21, 2004 * Time: 12:45:42 PM */ public class CancelExchangeOrderReceiver extends SigningLedgerReceiver implements HandlingReceiver { public CancelExchangeOrderReceiver(Receiver parent, Signer signer, LedgerController ledger) { super(parent, signer, ledger); } public SignedNamedObject receive(SignedNamedObject obj) throws UnsupportedTransaction, NeuClearException { try { CancelExchangeOrder cancel = (CancelExchangeOrder) obj; String name = cancel.getAsset().getServiceId(); if (!(cancel.getSignatory().getName().equals(cancel.getReceipt().getOrder().getSignatory().getName()) || cancel.getSignatory().getName().equals(cancel.getReceipt().getOrder().getAgent().getServiceId()))) throw new InvalidTransferException("Only Agent is allowed to Sign Completion Order"); if (!signer.canSignFor(name)) return null; final Date time = ledger.cancel(cancel.getReceipt().getOrder().getDigest()); return (CancelExchangeReceipt) new CancelExchangeReceiptBuilder(cancel, time).convert(name, signer); } catch (ClassCastException e) { throw new UnsupportedTransaction(obj); } catch (UnknownTransactionException e) { throw new NeuClearException(e); } catch (NegativeTransferException e) { throw new NeuClearException(e); } catch (InvalidTransferException e) { throw new NeuClearException(e); } catch (LowlevelLedgerException e) { throw new NeuClearException(e); } } public String handlesTagName() { return ExchangeOrderGlobals.CANCEL_TAGNAME; } } --- NEW FILE: ExchangeOrderReceiptReceiver.java --- package org.neuclear.exchange.controllers.receivers; import org.neuclear.asset.controllers.receivers.LedgerReceiver; import org.neuclear.commons.NeuClearException; import org.neuclear.exchange.orders.ExchangeOrder; import org.neuclear.exchange.orders.ExchangeOrderGlobals; import org.neuclear.exchange.orders.ExchangeOrderReceipt; import org.neuclear.id.SignedNamedObject; import org.neuclear.id.receiver.HandlingReceiver; import org.neuclear.id.receiver.Receiver; import org.neuclear.id.receiver.UnsupportedTransaction; import org.neuclear.ledger.LedgerController; import org.neuclear.ledger.LowlevelLedgerException; import org.neuclear.ledger.UnknownTransactionException; /* $Id: ExchangeOrderReceiptReceiver.java,v 1.1 2004/09/10 19:48:02 pelle Exp $ $Log: ExchangeOrderReceiptReceiver.java,v $ Revision 1.1 2004/09/10 19:48:02 pelle Refactored all the Exchange related receivers into a new package under org.neuclear.exchange. Refactored the way the Receivers handle embedded objects. Now they pass them on to the parent receiver for processing before they do their own thing. Revision 1.1 2004/08/18 09:42:55 pelle Many fixes to the various Signing and SigningRequest Servlets etc. Revision 1.2 2004/07/23 18:58:39 pelle Updated to use the new complete method in ledger. Revision 1.1 2004/07/22 21:48:42 pelle Further receivers and unit tests for for Exchanges etc. I've also changed the internal asset to ledger id from being the pk of the contract signer, to being the pk of the service key. Revision 1.1 2004/07/21 23:11:22 pelle Added single function Receivers and a DelegatingAssetController. These will eventually replace the CurrencyController and Auditor. */ /** * User: pelleb * Date: Jul 21, 2004 * Time: 12:45:42 PM */ public class ExchangeOrderReceiptReceiver extends LedgerReceiver implements HandlingReceiver { public ExchangeOrderReceiptReceiver(Receiver parent, LedgerController ledger) { super(parent, ledger); } public SignedNamedObject receive(SignedNamedObject obj) throws UnsupportedTransaction, NeuClearException { try { ExchangeOrderReceipt receipt = (ExchangeOrderReceipt) obj; ExchangeOrder order = receipt.getOrder(); String name = order.getAsset().getServiceId(); if (!ledger.heldTransactionExists(order.getDigest())) parent.receive(order); ledger.setHeldReceiptId(order.getDigest(), receipt.getDigest()); } catch (ClassCastException e) { throw new UnsupportedTransaction(obj); } catch (UnknownTransactionException e) { throw new NeuClearException(e); } catch (LowlevelLedgerException e) { throw new NeuClearException(e); } return null; } public String handlesTagName() { return ExchangeOrderGlobals.EXCHANGE_RCPT_TAGNAME; } } --- NEW FILE: ExchangeCompletedReceiptReceiver.java --- package org.neuclear.exchange.controllers.receivers; import org.neuclear.asset.InvalidTransferException; import org.neuclear.asset.NegativeTransferException; import org.neuclear.asset.contracts.Asset; import org.neuclear.asset.controllers.receivers.LedgerReceiver; import org.neuclear.commons.NeuClearException; import org.neuclear.exchange.orders.ExchangeCompletedReceipt; import org.neuclear.exchange.orders.ExchangeCompletionOrder; import org.neuclear.exchange.orders.ExchangeOrderGlobals; import org.neuclear.id.SignedNamedObject; import org.neuclear.id.receiver.HandlingReceiver; import org.neuclear.id.receiver.Receiver; import org.neuclear.id.receiver.UnsupportedTransaction; import org.neuclear.ledger.LedgerController; import org.neuclear.ledger.LowlevelLedgerException; import org.neuclear.ledger.UnknownTransactionException; /* $Id: ExchangeCompletedReceiptReceiver.java,v 1.1 2004/09/10 19:48:02 pelle Exp $ $Log: ExchangeCompletedReceiptReceiver.java,v $ Revision 1.1 2004/09/10 19:48:02 pelle Refactored all the Exchange related receivers into a new package under org.neuclear.exchange. Refactored the way the Receivers handle embedded objects. Now they pass them on to the parent receiver for processing before they do their own thing. Revision 1.1 2004/08/18 09:42:55 pelle Many fixes to the various Signing and SigningRequest Servlets etc. Revision 1.2 2004/07/23 18:58:39 pelle Updated to use the new complete method in ledger. Revision 1.1 2004/07/22 21:48:42 pelle Further receivers and unit tests for for Exchanges etc. I've also changed the internal asset to ledger id from being the pk of the contract signer, to being the pk of the service key. Revision 1.1 2004/07/21 23:11:22 pelle Added single function Receivers and a DelegatingAssetController. These will eventually replace the CurrencyController and Auditor. */ /** * User: pelleb * Date: Jul 21, 2004 * Time: 12:45:42 PM */ public class ExchangeCompletedReceiptReceiver extends LedgerReceiver implements HandlingReceiver { public ExchangeCompletedReceiptReceiver(Receiver parent, LedgerController ledger) { super(parent, ledger); } public SignedNamedObject receive(SignedNamedObject obj) throws UnsupportedTransaction, NeuClearException { try { ExchangeCompletedReceipt receipt = (ExchangeCompletedReceipt) obj; ExchangeCompletionOrder complete = receipt.getOrder(); final Asset asset = complete.getAsset(); String name = asset.getServiceId(); if (!complete.getSignatory().getName().equals(complete.getReceipt().getOrder().getAgent().getServiceId())) throw new InvalidTransferException("Only Agent is allowed to Sign Completion Order"); final double amount = complete.getAmount().getAmount(); if (amount > complete.getReceipt().getOrder().getAmount().getAmount()) throw new InvalidTransferException("Attempting to complete larger than authorized amount"); if (!ledger.transactionExists(complete.getDigest())) { parent.receive(complete); } ledger.setReceiptId(complete.getReceipt().getOrder().getDigest(), receipt.getDigest()); } catch (ClassCastException e) { throw new UnsupportedTransaction(obj); } catch (UnknownTransactionException e) { throw new NeuClearException(e); } catch (NegativeTransferException e) { throw new NeuClearException(e); } catch (InvalidTransferException e) { throw new NeuClearException(e); } catch (LowlevelLedgerException e) { throw new NeuClearException(e); } return null; } public String handlesTagName() { return ExchangeOrderGlobals.COMPLETE_RCPT_TAGNAME; } } --- NEW FILE: ExchangeCompletionOrderReceiver.java --- package org.neuclear.exchange.controllers.receivers; import org.neuclear.asset.InvalidTransferException; import org.neuclear.asset.NegativeTransferException; import org.neuclear.asset.contracts.Asset; import org.neuclear.asset.controllers.receivers.SigningLedgerReceiver; import org.neuclear.commons.NeuClearException; import org.neuclear.commons.crypto.signers.Signer; import org.neuclear.exchange.orders.ExchangeCompletedReceipt; import org.neuclear.exchange.orders.ExchangeCompletionOrder; import org.neuclear.exchange.orders.ExchangeOrderGlobals; import org.neuclear.exchange.orders.builders.ExchangeCompletedReceiptBuilder; import org.neuclear.id.SignedNamedObject; import org.neuclear.id.receiver.HandlingReceiver; import org.neuclear.id.receiver.Receiver; import org.neuclear.id.receiver.UnsupportedTransaction; import org.neuclear.ledger.*; /* $Id: ExchangeCompletionOrderReceiver.java,v 1.1 2004/09/10 19:48:02 pelle Exp $ $Log: ExchangeCompletionOrderReceiver.java,v $ Revision 1.1 2004/09/10 19:48:02 pelle Refactored all the Exchange related receivers into a new package under org.neuclear.exchange. Refactored the way the Receivers handle embedded objects. Now they pass them on to the parent receiver for processing before they do their own thing. Revision 1.3 2004/09/08 23:17:23 pelle Fees now work for everything but Exchange Completion. Revision 1.2 2004/07/23 18:58:39 pelle Updated to use the new complete method in ledger. Revision 1.1 2004/07/22 21:48:42 pelle Further receivers and unit tests for for Exchanges etc. I've also changed the internal asset to ledger id from being the pk of the contract signer, to being the pk of the service key. Revision 1.1 2004/07/21 23:11:22 pelle Added single function Receivers and a DelegatingAssetController. These will eventually replace the CurrencyController and Auditor. */ /** * User: pelleb * Date: Jul 21, 2004 * Time: 12:45:42 PM */ public class ExchangeCompletionOrderReceiver extends SigningLedgerReceiver implements HandlingReceiver { public ExchangeCompletionOrderReceiver(Receiver parent, Signer signer, LedgerController ledger) { super(parent, signer, ledger); } public SignedNamedObject receive(SignedNamedObject obj) throws UnsupportedTransaction, NeuClearException { try { ExchangeCompletionOrder complete = (ExchangeCompletionOrder) obj; final Asset asset = complete.getAsset(); String name = asset.getServiceId(); if (!complete.getSignatory().getName().equals(complete.getReceipt().getOrder().getAgent().getServiceId())) throw new InvalidTransferException("Only Agent is allowed to Sign Completion Order"); final double amount = complete.getAmount().getAmount(); if (amount > complete.getReceipt().getOrder().getAmount().getAmount()) throw new InvalidTransferException("Attempting to complete larger than authorized amount"); if (ledger.findHeldTransaction(complete.getReceipt().getOrder().getDigest()) == null) parent.receive(complete.getReceipt()); PostedTransaction tran = ledger.complete(complete.getReceipt().getOrder().getDigest(), complete.getSignatory().getName(), complete.getCounterparty(), asset.round(amount - asset.getFeeStructure().calculateFee(amount)), complete.getComment()); if (!signer.canSignFor(name)) return null; ExchangeCompletedReceipt receipt = (ExchangeCompletedReceipt) new ExchangeCompletedReceiptBuilder(complete, tran.getTransactionTime()).convert(name, signer); ledger.setReceiptId(complete.getReceipt().getOrder().getDigest(), receipt.getDigest()); return receipt; } catch (ClassCastException e) { throw new UnsupportedTransaction(obj); } catch (UnknownTransactionException e) { throw new NeuClearException(e); } catch (InsufficientFundsException e) { throw new NeuClearException(e); } catch (NegativeTransferException e) { throw new NeuClearException(e); } catch (InvalidTransferException e) { throw new NeuClearException(e); } catch (UnBalancedTransactionException e) { throw new NeuClearException(e); } catch (LowlevelLedgerException e) { throw new NeuClearException(e); } catch (InvalidTransactionException e) { throw new NeuClearException(e); } catch (TransactionExpiredException e) { throw new NeuClearException(e); } catch (UnknownBookException e) { throw new NeuClearException(e); } } public String handlesTagName() { return ExchangeOrderGlobals.COMPLETE_TAGNAME; } } |