|
From: Pelle B. <pe...@us...> - 2004-03-31 23:23:14
|
Update of /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28829/src/java/org/neuclear/ledger/prevalent Modified Files: AccountHeld.java BalanceTable.java CompleteHeldTransaction.java HoldTable.java PostHeldTransaction.java PostTransaction.java PostVerifiedTransfer.java PrevalentLedger.java Log Message: Reworked the ID's of the transactions. The primary ID is now the request ID. Receipt ID's are optional and added using a separate set method. The various interactive passphrase agents now have shell methods for the new interactive approach. Index: PostHeldTransaction.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/PostHeldTransaction.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** PostHeldTransaction.java 22 Mar 2004 17:27:11 -0000 1.1.1.1 --- PostHeldTransaction.java 31 Mar 2004 23:11:20 -0000 1.2 *************** *** 1,6 **** package org.neuclear.ledger.prevalent; - import org.prevayler.TransactionWithQuery; import org.neuclear.ledger.*; import java.util.Date; --- 1,6 ---- package org.neuclear.ledger.prevalent; import org.neuclear.ledger.*; + import org.prevayler.TransactionWithQuery; import java.util.Date; *************** *** 14,18 **** * To change this template use File | Settings | File Templates. */ ! public class PostHeldTransaction implements TransactionWithQuery{ final UnPostedHeldTransaction tran; --- 14,18 ---- * To change this template use File | Settings | File Templates. */ ! public class PostHeldTransaction implements TransactionWithQuery { final UnPostedHeldTransaction tran; *************** *** 31,48 **** */ public Object executeAndQuery(Object prevalentSystem, Date executionTime) throws Exception { ! LedgerSystem system=(LedgerSystem) prevalentSystem; ! HoldTable table=system.getHoldTable(); ! if (table.exists(tran.getId())) ! throw new TransactionExistsException(null,tran.getId()); if (table.exists(tran.getRequestId())) ! throw new TransactionExistsException(null,tran.getRequestId()); ! Iterator iter=tran.getItems(); while (iter.hasNext()) { TransactionItem item = (TransactionItem) iter.next(); ! if (system.getAvailableBalance(item.getBook())+item.getAmount()<0) ! throw new InsufficientFundsException(null,item.getBook(),item.getAmount()); } ! PostedHeldTransaction posted=new PostedHeldTransaction(tran,executionTime); table.add(posted); return posted; --- 31,48 ---- */ public Object executeAndQuery(Object prevalentSystem, Date executionTime) throws Exception { ! LedgerSystem system = (LedgerSystem) prevalentSystem; ! HoldTable table = system.getHoldTable(); if (table.exists(tran.getRequestId())) ! throw new TransactionExistsException(null, tran.getRequestId()); ! // if (table.exists(tran.getReceiptId())) ! // throw new TransactionExistsException(null,tran.getReceiptId()); ! Iterator iter = tran.getItems(); while (iter.hasNext()) { TransactionItem item = (TransactionItem) iter.next(); ! if (system.getAvailableBalance(item.getBook()) + item.getAmount() < 0) ! throw new InsufficientFundsException(null, item.getBook(), item.getAmount()); } ! PostedHeldTransaction posted = new PostedHeldTransaction(tran, executionTime); table.add(posted); return posted; Index: CompleteHeldTransaction.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/CompleteHeldTransaction.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** CompleteHeldTransaction.java 22 Mar 2004 17:27:10 -0000 1.1.1.1 --- CompleteHeldTransaction.java 31 Mar 2004 23:11:20 -0000 1.2 *************** *** 1,6 **** package org.neuclear.ledger.prevalent; import org.prevayler.TransactionWithQuery; - import org.neuclear.ledger.*; import java.util.Date; --- 1,9 ---- package org.neuclear.ledger.prevalent; + import org.neuclear.ledger.PostedHeldTransaction; + import org.neuclear.ledger.PostedTransaction; + import org.neuclear.ledger.TransactionExistsException; + import org.neuclear.ledger.TransactionItem; import org.prevayler.TransactionWithQuery; import java.util.Date; *************** *** 14,18 **** * To change this template use File | Settings | File Templates. */ ! public class CompleteHeldTransaction implements TransactionWithQuery{ final PostedHeldTransaction tran; --- 17,21 ---- * To change this template use File | Settings | File Templates. */ ! public class CompleteHeldTransaction implements TransactionWithQuery { final PostedHeldTransaction tran; *************** *** 20,27 **** final String comment; ! CompleteHeldTransaction(final PostedHeldTransaction tran,final double amount, final String comment) { this.tran = tran; ! this.amount=amount; ! this.comment=comment; } --- 23,30 ---- final String comment; ! CompleteHeldTransaction(final PostedHeldTransaction tran, final double amount, final String comment) { this.tran = tran; ! this.amount = amount; ! this.comment = comment; } *************** *** 34,56 **** */ public Object executeAndQuery(Object prevalentSystem, Date executionTime) throws Exception { ! LedgerSystem system=(LedgerSystem) prevalentSystem; ! TransactionTable table=system.getTransactionTable(); ! if (table.exists(tran.getId())) ! throw new TransactionExistsException(null,tran.getId()); if (table.exists(tran.getRequestId())) ! throw new TransactionExistsException(null,tran.getRequestId()); ! ! HoldTable holds=system.getHoldTable(); holds.expire(tran); ! table.register(tran.getId(),executionTime); ! table.register(tran.getRequestId(),executionTime); ! Iterator iter=tran.getItems(); while (iter.hasNext()) { TransactionItem item = (TransactionItem) iter.next(); ! system.getBalanceTable().add(item.getBook(),item.getAmount()); } ! return new PostedTransaction(tran,executionTime,amount,comment); } } --- 37,55 ---- */ public Object executeAndQuery(Object prevalentSystem, Date executionTime) throws Exception { ! LedgerSystem system = (LedgerSystem) prevalentSystem; ! TransactionTable table = system.getTransactionTable(); if (table.exists(tran.getRequestId())) ! throw new TransactionExistsException(null, tran.getRequestId()); ! HoldTable holds = system.getHoldTable(); holds.expire(tran); ! table.register(tran.getRequestId(), executionTime); ! Iterator iter = tran.getItems(); while (iter.hasNext()) { TransactionItem item = (TransactionItem) iter.next(); ! system.getBalanceTable().add(item.getBook(), item.getAmount()); } ! return new PostedTransaction(tran, executionTime, amount, comment); } } Index: AccountHeld.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/AccountHeld.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** AccountHeld.java 22 Mar 2004 17:27:11 -0000 1.1.1.1 --- AccountHeld.java 31 Mar 2004 23:11:20 -0000 1.2 *************** *** 5,12 **** import java.io.Serializable; - import java.util.List; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; /** --- 5,12 ---- import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; + import java.util.List; /** *************** *** 18,22 **** */ public class AccountHeld implements Serializable { ! private List holds= new ArrayList(1); private HoldTable holdtable; private String id; --- 18,22 ---- */ public class AccountHeld implements Serializable { ! private List holds = new ArrayList(1); private HoldTable holdtable; private String id; *************** *** 26,59 **** this.id = id; } ! public void add(final PostedHeldTransaction tran){ holds.add(tran); } ! double getBalance(){ ! final Date current=new Date(); ! Iterator iter=holds.iterator(); ! double balance=0; ! PostedHeldTransaction expired=null; while (iter.hasNext()) { PostedHeldTransaction transaction = (PostedHeldTransaction) iter.next(); ! if (transaction.getExpiryTime().after(current)){ ! Iterator items=transaction.getItems(); while (items.hasNext()) { TransactionItem item = (TransactionItem) items.next(); ! if(item.getBook().equals(id)&&item.getAmount()<0) ! balance+=item.getAmount(); } } else { ! expired=transaction; } } ! if (expired!=null) holdtable.expire(expired); return balance; } ! void expire(final PostedHeldTransaction dead){ for (int i = 0; i < holds.size(); i++) { PostedHeldTransaction transaction = (PostedHeldTransaction) holds.get(i); ! if (transaction.getId().equals(dead.getId())){ holds.remove(i); return; --- 26,61 ---- this.id = id; } ! ! public void add(final PostedHeldTransaction tran) { holds.add(tran); } ! double getBalance() { ! final Date current = new Date(); ! Iterator iter = holds.iterator(); ! double balance = 0; ! PostedHeldTransaction expired = null; while (iter.hasNext()) { PostedHeldTransaction transaction = (PostedHeldTransaction) iter.next(); ! if (transaction.getExpiryTime().after(current)) { ! Iterator items = transaction.getItems(); while (items.hasNext()) { TransactionItem item = (TransactionItem) items.next(); ! if (item.getBook().equals(id) && item.getAmount() < 0) ! balance += item.getAmount(); } } else { ! expired = transaction; } } ! if (expired != null) holdtable.expire(expired); return balance; } ! ! void expire(final PostedHeldTransaction dead) { for (int i = 0; i < holds.size(); i++) { PostedHeldTransaction transaction = (PostedHeldTransaction) holds.get(i); ! if (transaction.getRequestId().equals(dead.getRequestId())) { holds.remove(i); return; *************** *** 63,67 **** holds.remove(dead); } ! int getHoldCount(){ return holds.size(); } --- 65,70 ---- holds.remove(dead); } ! ! int getHoldCount() { return holds.size(); } Index: PrevalentLedger.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/PrevalentLedger.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** PrevalentLedger.java 25 Mar 2004 16:44:43 -0000 1.3 --- PrevalentLedger.java 31 Mar 2004 23:11:20 -0000 1.4 *************** *** 168,171 **** --- 168,175 ---- } + public void setReceiptId(String id, String receipt) throws LowlevelLedgerException, UnknownTransactionException { + + } + /** * Cancels a Held Transaction. Index: BalanceTable.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/BalanceTable.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** BalanceTable.java 25 Mar 2004 16:44:42 -0000 1.2 --- BalanceTable.java 31 Mar 2004 23:11:20 -0000 1.3 *************** *** 3,7 **** import gnu.trove.TDoubleProcedure; import gnu.trove.TObjectDoubleHashMap; - import org.neuclear.ledger.LowlevelLedgerException; import java.io.Serializable; --- 3,6 ---- *************** *** 26,30 **** } ! double getTestBalance() throws LowlevelLedgerException { TestBalanceCalculator calc = new TestBalanceCalculator(); balances.forEachValue(calc); --- 25,29 ---- } ! double getTestBalance() { TestBalanceCalculator calc = new TestBalanceCalculator(); balances.forEachValue(calc); Index: PostTransaction.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/PostTransaction.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** PostTransaction.java 22 Mar 2004 17:27:16 -0000 1.1.1.1 --- PostTransaction.java 31 Mar 2004 23:11:20 -0000 1.2 *************** *** 1,6 **** package org.neuclear.ledger.prevalent; import org.prevayler.TransactionWithQuery; - import org.neuclear.ledger.*; import java.util.Date; --- 1,9 ---- package org.neuclear.ledger.prevalent; + import org.neuclear.ledger.PostedTransaction; + import org.neuclear.ledger.TransactionExistsException; + import org.neuclear.ledger.TransactionItem; + import org.neuclear.ledger.UnPostedTransaction; import org.prevayler.TransactionWithQuery; import java.util.Date; *************** *** 14,18 **** * To change this template use File | Settings | File Templates. */ ! public class PostTransaction implements TransactionWithQuery{ final UnPostedTransaction tran; --- 17,21 ---- * To change this template use File | Settings | File Templates. */ ! public class PostTransaction implements TransactionWithQuery { final UnPostedTransaction tran; *************** *** 31,51 **** */ public Object executeAndQuery(Object prevalentSystem, Date executionTime) throws Exception { ! LedgerSystem system=(LedgerSystem) prevalentSystem; ! TransactionTable table=system.getTransactionTable(); ! if (table.exists(tran.getId())) ! throw new TransactionExistsException(null,tran.getId()); if (table.exists(tran.getRequestId())) ! throw new TransactionExistsException(null,tran.getRequestId()); ! table.register(tran.getId(),executionTime); ! table.register(tran.getRequestId(),executionTime); ! Iterator iter=tran.getItems(); while (iter.hasNext()) { TransactionItem item = (TransactionItem) iter.next(); ! system.getBalanceTable().add(item.getBook(),item.getAmount()); } ! return new PostedTransaction(tran,executionTime); } } --- 34,54 ---- */ public Object executeAndQuery(Object prevalentSystem, Date executionTime) throws Exception { ! LedgerSystem system = (LedgerSystem) prevalentSystem; ! TransactionTable table = system.getTransactionTable(); if (table.exists(tran.getRequestId())) ! throw new TransactionExistsException(null, tran.getRequestId()); ! // if (table.exists(tran.getReceiptId())) ! // throw new TransactionExistsException(null,tran.getReceiptId()); ! table.register(tran.getRequestId(), executionTime); ! // table.register(tran.getReceiptId(),executionTime); ! Iterator iter = tran.getItems(); while (iter.hasNext()) { TransactionItem item = (TransactionItem) iter.next(); ! system.getBalanceTable().add(item.getBook(), item.getAmount()); } ! return new PostedTransaction(tran, executionTime); } } Index: PostVerifiedTransfer.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/PostVerifiedTransfer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PostVerifiedTransfer.java 24 Mar 2004 23:13:12 -0000 1.2 --- PostVerifiedTransfer.java 31 Mar 2004 23:11:20 -0000 1.3 *************** *** 33,40 **** LedgerSystem system = (LedgerSystem) prevalentSystem; TransactionTable table = system.getTransactionTable(); - if (table.exists(tran.getId())) - throw new TransactionExistsException(null, tran.getId()); if (table.exists(tran.getRequestId())) throw new TransactionExistsException(null, tran.getRequestId()); Iterator iter = tran.getItems(); --- 33,40 ---- LedgerSystem system = (LedgerSystem) prevalentSystem; TransactionTable table = system.getTransactionTable(); if (table.exists(tran.getRequestId())) throw new TransactionExistsException(null, tran.getRequestId()); + // if (table.exists(tran.getReceiptId())) + // throw new TransactionExistsException(null, tran.getReceiptId()); Iterator iter = tran.getItems(); *************** *** 47,52 **** } // We're ok so lets register them. - table.register(tran.getId(), executionTime); table.register(tran.getRequestId(), executionTime); // Now modify the balances --- 47,52 ---- } // We're ok so lets register them. table.register(tran.getRequestId(), executionTime); + // table.register(tran.getReceiptId(), executionTime); // Now modify the balances Index: HoldTable.java =================================================================== RCS file: /cvsroot/neuclear/neuclear-ledger-prevalent/src/java/org/neuclear/ledger/prevalent/HoldTable.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** HoldTable.java 22 Mar 2004 17:27:11 -0000 1.1.1.1 --- HoldTable.java 31 Mar 2004 23:11:20 -0000 1.2 *************** *** 1,5 **** package org.neuclear.ledger.prevalent; ! import gnu.trove.TObjectDoubleHashMap; import java.io.Serializable; --- 1,7 ---- package org.neuclear.ledger.prevalent; ! import org.neuclear.ledger.PostedHeldTransaction; ! import org.neuclear.ledger.TransactionExistsException; ! import org.neuclear.ledger.TransactionItem; import java.io.Serializable; *************** *** 7,65 **** import java.util.Iterator; - import org.neuclear.ledger.PostedHeldTransaction; - import org.neuclear.ledger.TransactionItem; - import org.neuclear.ledger.TransactionExistsException; - /** * This contains the balances of all the accounts */ ! public final class HoldTable implements Serializable{ ! private final HashMap accounts=new HashMap(); ! private final HashMap transactions=new HashMap(); ! double getHeldBalance(final String id){ if (!accounts.containsKey(id)) return 0; ! return ((AccountHeld)accounts.get(id)).getBalance(); } ! public boolean exists(String id){ return transactions.containsKey(id); } ! public PostedHeldTransaction get(String id){ return (PostedHeldTransaction) transactions.get(id); } void add(PostedHeldTransaction tran) throws TransactionExistsException { ! if (transactions.containsKey(tran.getId())) ! throw new TransactionExistsException(null,tran.getId()); ! Iterator items=tran.getItems(); while (items.hasNext()) { TransactionItem item = (TransactionItem) items.next(); ! AccountHeld held=(AccountHeld) accounts.get(item.getBook()); ! if (held==null){ ! held=new AccountHeld(this,item.getBook()); ! accounts.put(item.getBook(),held); } held.add(tran); } ! transactions.put(tran.getId(),tran); } public void expire(PostedHeldTransaction tran) { ! if (!transactions.containsKey(tran.getId())) return; System.out.println("expire"); ! Iterator items=tran.getItems(); while (items.hasNext()) { TransactionItem item = (TransactionItem) items.next(); ! AccountHeld held=(AccountHeld) accounts.get(item.getBook()); ! if (held!=null){ held.expire(tran); ! if (held.getHoldCount()==0) accounts.remove(item.getBook()); } } ! transactions.remove(tran.getId()); } --- 9,65 ---- import java.util.Iterator; /** * This contains the balances of all the accounts */ ! public final class HoldTable implements Serializable { ! private final HashMap accounts = new HashMap(); ! private final HashMap transactions = new HashMap(); ! double getHeldBalance(final String id) { if (!accounts.containsKey(id)) return 0; ! return ((AccountHeld) accounts.get(id)).getBalance(); } ! public boolean exists(String id) { return transactions.containsKey(id); } ! ! public PostedHeldTransaction get(String id) { return (PostedHeldTransaction) transactions.get(id); } + void add(PostedHeldTransaction tran) throws TransactionExistsException { ! if (transactions.containsKey(tran.getRequestId())) ! throw new TransactionExistsException(null, tran.getRequestId()); ! Iterator items = tran.getItems(); while (items.hasNext()) { TransactionItem item = (TransactionItem) items.next(); ! AccountHeld held = (AccountHeld) accounts.get(item.getBook()); ! if (held == null) { ! held = new AccountHeld(this, item.getBook()); ! accounts.put(item.getBook(), held); } held.add(tran); } ! transactions.put(tran.getRequestId(), tran); } public void expire(PostedHeldTransaction tran) { ! if (!transactions.containsKey(tran.getRequestId())) return; System.out.println("expire"); ! Iterator items = tran.getItems(); while (items.hasNext()) { TransactionItem item = (TransactionItem) items.next(); ! AccountHeld held = (AccountHeld) accounts.get(item.getBook()); ! if (held != null) { held.expire(tran); ! if (held.getHoldCount() == 0) accounts.remove(item.getBook()); } } ! transactions.remove(tran.getRequestId()); } |