From b8318df90f88599762a03cf7905c5a9cf5ff2a92 Mon Sep 17 00:00:00 2001 From: ghacupha Date: Sun, 18 Mar 2018 11:39:21 +0300 Subject: [PATCH] added ExtendedMoney class --- pom.xml | 11 +- .../ghacupha/book_keeper/EntryDetails.java | 9 - .../WrongEntryCurrencyException.java | 10 -- .../{book_keeper => keeper/book}/Account.java | 8 +- .../book}/AccountDetails.java | 4 +- .../book}/AccountImpl.java | 27 ++- .../book}/AccountingEntry.java | 16 +- .../{book_keeper => keeper/book}/Entry.java | 10 +- .../ghacupha/keeper/book/EntryDetails.java | 106 ++++++++++++ .../book}/ImmutableEntryException.java | 2 +- .../book/MismatchedCurrencyException.java | 10 ++ .../book}/UntimelyBookingDateException.java | 2 +- .../book}/balance/AccountBalance.java | 11 +- .../book}/balance/AccountBalanceType.java | 2 +- .../keeper/book/unit/money/Emonetary.java | 16 ++ .../keeper/book/unit/money/Emoney.java | 161 ++++++++++++++++++ .../book/unit/money/HasDenomination.java | 8 + .../keeper/book/unit/money/IsNumberical.java | 6 + .../keeper/book/unit/money/MoneyWrapper.java | 9 + .../book/unit}/time/DateRange.java | 2 +- .../book/unit}/time/TimePoint.java | 2 +- .../book}/AccountTest.java | 12 +- .../ghacupha/keeper/book/EmoneyTest.java | 53 ++++++ .../book/unit}/time/TimePointTest.java | 2 +- 24 files changed, 423 insertions(+), 76 deletions(-) delete mode 100644 src/main/java/io/github/ghacupha/book_keeper/EntryDetails.java delete mode 100644 src/main/java/io/github/ghacupha/book_keeper/WrongEntryCurrencyException.java rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/Account.java (66%) rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/AccountDetails.java (94%) rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/AccountImpl.java (82%) rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/AccountingEntry.java (89%) rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/Entry.java (71%) create mode 100644 src/main/java/io/github/ghacupha/keeper/book/EntryDetails.java rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/ImmutableEntryException.java (60%) create mode 100644 src/main/java/io/github/ghacupha/keeper/book/MismatchedCurrencyException.java rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/UntimelyBookingDateException.java (79%) rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/balance/AccountBalance.java (81%) rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book}/balance/AccountBalanceType.java (81%) create mode 100644 src/main/java/io/github/ghacupha/keeper/book/unit/money/Emonetary.java create mode 100644 src/main/java/io/github/ghacupha/keeper/book/unit/money/Emoney.java create mode 100644 src/main/java/io/github/ghacupha/keeper/book/unit/money/HasDenomination.java create mode 100644 src/main/java/io/github/ghacupha/keeper/book/unit/money/IsNumberical.java create mode 100644 src/main/java/io/github/ghacupha/keeper/book/unit/money/MoneyWrapper.java rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book/unit}/time/DateRange.java (98%) rename src/main/java/io/github/ghacupha/{book_keeper => keeper/book/unit}/time/TimePoint.java (97%) rename src/test/java/io/github/ghacupha/{book_keeper => keeper/book}/AccountTest.java (82%) create mode 100644 src/test/java/io/github/ghacupha/keeper/book/EmoneyTest.java rename src/test/java/io/github/ghacupha/{book_keeper => keeper/book/unit}/time/TimePointTest.java (96%) diff --git a/pom.xml b/pom.xml index de834c0..bb222f4 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 1.0-SNAPSHOT accounts - Demo project to illustrate typical double book keeping workflows + Demo project to illustrate typical double book keeping workflow @@ -401,7 +401,7 @@ true ${project.build.sourceCompilerLevel} - + true true org.umlgraph.doclet.UmlGraphDoc @@ -434,7 +434,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 2.151 + 2.20.1 true ${project.reporting.outputDirectory}/../xref-test @@ -638,6 +638,7 @@ -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901 -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901 + 1.8 1.8 1.8 "documentation" @@ -835,12 +836,10 @@ Travis CI - https://travis-ci.org/ghacupha/book-keeper - scm:git:https://github.com/ghacupha/book-keeper.git master scm:git:https://github.com/ghacupha/book-keeper.git @@ -848,7 +847,6 @@ - bintray-release oss-jfrog-artifactory-release @@ -867,7 +865,6 @@ org.javamoney moneta 1.1 - compile diff --git a/src/main/java/io/github/ghacupha/book_keeper/EntryDetails.java b/src/main/java/io/github/ghacupha/book_keeper/EntryDetails.java deleted file mode 100644 index 23b0265..0000000 --- a/src/main/java/io/github/ghacupha/book_keeper/EntryDetails.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.ghacupha.book_keeper; - -/** - * Container for additional details for {@link Entry} - * - * @author edwin.njeru - */ -public class EntryDetails { -} diff --git a/src/main/java/io/github/ghacupha/book_keeper/WrongEntryCurrencyException.java b/src/main/java/io/github/ghacupha/book_keeper/WrongEntryCurrencyException.java deleted file mode 100644 index ba71a92..0000000 --- a/src/main/java/io/github/ghacupha/book_keeper/WrongEntryCurrencyException.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.ghacupha.book_keeper; - -/** - * Thrown when the amount entered into an account has a different currency with the account's currency - */ -public class WrongEntryCurrencyException extends Throwable { - public WrongEntryCurrencyException(String message) { - super(message); - } -} diff --git a/src/main/java/io/github/ghacupha/book_keeper/Account.java b/src/main/java/io/github/ghacupha/keeper/book/Account.java similarity index 66% rename from src/main/java/io/github/ghacupha/book_keeper/Account.java rename to src/main/java/io/github/ghacupha/keeper/book/Account.java index 8a2b1e3..003bf31 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/Account.java +++ b/src/main/java/io/github/ghacupha/keeper/book/Account.java @@ -1,10 +1,10 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; -import io.github.ghacupha.book_keeper.balance.AccountBalance; -import io.github.ghacupha.book_keeper.time.TimePoint; +import io.github.ghacupha.keeper.book.balance.AccountBalance; +import io.github.ghacupha.keeper.book.unit.time.TimePoint; /** - * Forms a collection of related {@link Entry}. The {@link javax.money.CurrencyUnit} of the + * Forms a collection of related {@link Entry}. The {@link org.joda.money.CurrencyUnit} of the * {@link Entry} must the same with that of the {@link Account} * * @author edwin.njeru diff --git a/src/main/java/io/github/ghacupha/book_keeper/AccountDetails.java b/src/main/java/io/github/ghacupha/keeper/book/AccountDetails.java similarity index 94% rename from src/main/java/io/github/ghacupha/book_keeper/AccountDetails.java rename to src/main/java/io/github/ghacupha/keeper/book/AccountDetails.java index 57bd670..f6a2738 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/AccountDetails.java +++ b/src/main/java/io/github/ghacupha/keeper/book/AccountDetails.java @@ -1,6 +1,6 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; -import io.github.ghacupha.book_keeper.time.TimePoint; +import io.github.ghacupha.keeper.book.unit.time.TimePoint; /** * Encapsulates information concerning the nature of an {@link AccountImpl} to which diff --git a/src/main/java/io/github/ghacupha/book_keeper/AccountImpl.java b/src/main/java/io/github/ghacupha/keeper/book/AccountImpl.java similarity index 82% rename from src/main/java/io/github/ghacupha/book_keeper/AccountImpl.java rename to src/main/java/io/github/ghacupha/keeper/book/AccountImpl.java index 9e0fe9e..1eb4067 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/AccountImpl.java +++ b/src/main/java/io/github/ghacupha/keeper/book/AccountImpl.java @@ -1,10 +1,9 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; -import io.github.ghacupha.book_keeper.balance.AccountBalance; -import io.github.ghacupha.book_keeper.balance.AccountBalanceType; -import io.github.ghacupha.book_keeper.time.TimePoint; -import io.github.ghacupha.book_keeper.time.DateRange; -import org.javamoney.moneta.Money; +import io.github.ghacupha.keeper.book.balance.AccountBalance; +import io.github.ghacupha.keeper.book.balance.AccountBalanceType; +import io.github.ghacupha.keeper.book.unit.money.Emonetary; +import io.github.ghacupha.keeper.book.unit.money.Emoney; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,7 +48,7 @@ public void addEntry(Entry entry) { entries.add(entry); // done - } catch (WrongEntryCurrencyException e) { + } catch (MismatchedCurrencyException e) { log.error("Exception encountered when adding amount : {} to account : {}", entry.getAmount(), accountDetails.getAccountName()); e.printStackTrace(); } catch (UntimelyBookingDateException e) { @@ -69,36 +68,36 @@ private void assertBookingDate(TimePoint bookingDate) throws UntimelyBookingDate } } - private void assertCurrency(Currency currency) throws WrongEntryCurrencyException { + private void assertCurrency(Currency currency) throws MismatchedCurrencyException { if (!this.currency.equals(currency)) { String message = String.format("The monetary amount added is inconsistent with this account :" + "Expected currency : %s but found %s", this.currency.toString(), currency.toString()); - throw new WrongEntryCurrencyException(message); + throw new MismatchedCurrencyException(message); } } private AccountBalance balance(DateRange dateRange) { - Money result = Money.of(0, currency.getCurrencyCode()); + final Emonetary result = new Emoney(0,currency); entries.stream() .filter(entry -> dateRange.includes(entry.getBookingDate())) .map(filteredEntry -> { - Money amount = filteredEntry.getAmount(); + Emoney amount = filteredEntry.getAmount(); log.debug("Accounting entry : {} added into the balance with amount : {}",filteredEntry,amount); return amount; } ) .forEachOrdered(orderedAmount -> { log.debug("Adding amount : {}",orderedAmount); - result.add(orderedAmount); + result = result.plus(orderedAmount); }); - log.debug("Returning balance of amount : {} on the {} side",result,accountBalanceType); + log.debug("Returning balance of amount : {} on the {} side", result[0],accountBalanceType); - return new AccountBalance(result, accountBalanceType); + return new AccountBalance(result[0], accountBalanceType); } @Override diff --git a/src/main/java/io/github/ghacupha/book_keeper/AccountingEntry.java b/src/main/java/io/github/ghacupha/keeper/book/AccountingEntry.java similarity index 89% rename from src/main/java/io/github/ghacupha/book_keeper/AccountingEntry.java rename to src/main/java/io/github/ghacupha/keeper/book/AccountingEntry.java index 02056f3..27e8247 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/AccountingEntry.java +++ b/src/main/java/io/github/ghacupha/keeper/book/AccountingEntry.java @@ -1,7 +1,7 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; -import io.github.ghacupha.book_keeper.time.TimePoint; -import org.javamoney.moneta.Money; +import io.github.ghacupha.keeper.book.unit.money.Emoney; +import io.github.ghacupha.keeper.book.unit.time.TimePoint; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,9 +13,9 @@ public class AccountingEntry implements Entry { private boolean open; private TimePoint bookingDate; private Account forAccount; - private Money amount; + private Emoney amount; - AccountingEntry(Account forAccount, EntryDetails entryDetails, Money amount, TimePoint bookingDate) { + AccountingEntry(Account forAccount, EntryDetails entryDetails, Emoney amount, TimePoint bookingDate) { this.bookingDate=bookingDate; this.open=true; this.amount=amount; @@ -31,7 +31,7 @@ public class AccountingEntry implements Entry { } @Override - public Entry newEntry(AccountImpl account, EntryDetails entryDetails, Money amount, TimePoint bookingDate) { + public Entry newEntry(AccountImpl account, EntryDetails entryDetails, Emoney amount, TimePoint bookingDate) { return new AccountingEntry(account,entryDetails,amount,bookingDate); @@ -45,9 +45,9 @@ public EntryDetails getEntryDetails() { } @Override - public Money getAmount() { + public Emoney getAmount() { - log.debug("Returning money amount : {} from accountingEntry : {}",amount,this); + log.debug("Returning unit amount : {} from accountingEntry : {}",amount,this); return amount; } diff --git a/src/main/java/io/github/ghacupha/book_keeper/Entry.java b/src/main/java/io/github/ghacupha/keeper/book/Entry.java similarity index 71% rename from src/main/java/io/github/ghacupha/book_keeper/Entry.java rename to src/main/java/io/github/ghacupha/keeper/book/Entry.java index 782e247..5afce49 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/Entry.java +++ b/src/main/java/io/github/ghacupha/keeper/book/Entry.java @@ -1,7 +1,7 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; -import io.github.ghacupha.book_keeper.time.TimePoint; -import org.javamoney.moneta.Money; +import io.github.ghacupha.keeper.book.unit.money.Emoney; +import io.github.ghacupha.keeper.book.unit.time.TimePoint; /** * Collection of this {@link Entry} objects forms the {@link AccountImpl}, which is one of the @@ -13,13 +13,13 @@ */ public interface Entry { - Entry newEntry(AccountImpl account, EntryDetails entryDetails, Money amount, TimePoint bookingDate); + Entry newEntry(AccountImpl account, EntryDetails entryDetails, Emoney amount, TimePoint bookingDate); EntryDetails getEntryDetails(); void setEntryDetails(EntryDetails entryDetails) throws ImmutableEntryException; - Money getAmount(); + Emoney getAmount(); TimePoint getBookingDate(); } diff --git a/src/main/java/io/github/ghacupha/keeper/book/EntryDetails.java b/src/main/java/io/github/ghacupha/keeper/book/EntryDetails.java new file mode 100644 index 0000000..b5272fe --- /dev/null +++ b/src/main/java/io/github/ghacupha/keeper/book/EntryDetails.java @@ -0,0 +1,106 @@ +package io.github.ghacupha.keeper.book; + +/** + * Container for additional details for {@link Entry} + * + * @author edwin.njeru + */ +public class EntryDetails { + + private final String narration; + + private String remarks; + + private String invoiceNumber; + + private String supplier; + + public EntryDetails(String narration) { + this.narration = narration; + this.remarks=""; + this.invoiceNumber=""; + this.supplier=""; + } + + public EntryDetails(String narration, String remarks) { + this(narration); + this.remarks = remarks; + this.invoiceNumber=""; + this.supplier=""; + } + + public EntryDetails(String narration, String remarks, String invoiceNumber) { + this(narration,remarks); + this.invoiceNumber = invoiceNumber; + this.supplier=""; + } + + public EntryDetails(String narration, String remarks, String invoiceNumber, String supplier) { + this(narration,remarks,invoiceNumber); + this.supplier = supplier; + } + + public String getNarration() { + return narration; + } + + public String getRemarks() { + return remarks; + } + + public EntryDetails setRemarks(String remarks) { + this.remarks = remarks; + return this; + } + + public String getInvoiceNumber() { + return invoiceNumber; + } + + public EntryDetails setInvoiceNumber(String invoiceNumber) { + this.invoiceNumber = invoiceNumber; + return this; + } + + public String getSupplier() { + return supplier; + } + + public EntryDetails setSupplier(String supplier) { + this.supplier = supplier; + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + EntryDetails that = (EntryDetails) o; + + if (!narration.equals(that.narration)) return false; + if (!remarks.equals(that.remarks)) return false; + if (!invoiceNumber.equals(that.invoiceNumber)) return false; + return supplier.equals(that.supplier); + } + + @Override + public int hashCode() { + int result = narration.hashCode(); + result = 31 * result + remarks.hashCode(); + result = 31 * result + invoiceNumber.hashCode(); + result = 31 * result + supplier.hashCode(); + return result; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("EntryDetails{"); + sb.append("narration='").append(narration).append('\''); + sb.append(", remarks='").append(remarks).append('\''); + sb.append(", invoiceNumber='").append(invoiceNumber).append('\''); + sb.append(", supplier='").append(supplier).append('\''); + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/main/java/io/github/ghacupha/book_keeper/ImmutableEntryException.java b/src/main/java/io/github/ghacupha/keeper/book/ImmutableEntryException.java similarity index 60% rename from src/main/java/io/github/ghacupha/book_keeper/ImmutableEntryException.java rename to src/main/java/io/github/ghacupha/keeper/book/ImmutableEntryException.java index c8f1f9b..605031a 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/ImmutableEntryException.java +++ b/src/main/java/io/github/ghacupha/keeper/book/ImmutableEntryException.java @@ -1,4 +1,4 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; public class ImmutableEntryException extends Throwable { diff --git a/src/main/java/io/github/ghacupha/keeper/book/MismatchedCurrencyException.java b/src/main/java/io/github/ghacupha/keeper/book/MismatchedCurrencyException.java new file mode 100644 index 0000000..5e4ebd0 --- /dev/null +++ b/src/main/java/io/github/ghacupha/keeper/book/MismatchedCurrencyException.java @@ -0,0 +1,10 @@ +package io.github.ghacupha.keeper.book; + +/** + * Thrown when the amount entered into an account has a different currency with the account's currency + */ +public class MismatchedCurrencyException extends Throwable { + public MismatchedCurrencyException(String message) { + super(message); + } +} diff --git a/src/main/java/io/github/ghacupha/book_keeper/UntimelyBookingDateException.java b/src/main/java/io/github/ghacupha/keeper/book/UntimelyBookingDateException.java similarity index 79% rename from src/main/java/io/github/ghacupha/book_keeper/UntimelyBookingDateException.java rename to src/main/java/io/github/ghacupha/keeper/book/UntimelyBookingDateException.java index 03ca807..739fa2e 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/UntimelyBookingDateException.java +++ b/src/main/java/io/github/ghacupha/keeper/book/UntimelyBookingDateException.java @@ -1,4 +1,4 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; public class UntimelyBookingDateException extends Throwable { public UntimelyBookingDateException(String message) { diff --git a/src/main/java/io/github/ghacupha/book_keeper/balance/AccountBalance.java b/src/main/java/io/github/ghacupha/keeper/book/balance/AccountBalance.java similarity index 81% rename from src/main/java/io/github/ghacupha/book_keeper/balance/AccountBalance.java rename to src/main/java/io/github/ghacupha/keeper/book/balance/AccountBalance.java index abb4138..cf4203f 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/balance/AccountBalance.java +++ b/src/main/java/io/github/ghacupha/keeper/book/balance/AccountBalance.java @@ -1,6 +1,7 @@ -package io.github.ghacupha.book_keeper.balance; +package io.github.ghacupha.keeper.book.balance; -import org.javamoney.moneta.Money; +import io.github.ghacupha.keeper.book.unit.money.Emonetary; +import io.github.ghacupha.keeper.book.unit.money.Emoney; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,10 +14,10 @@ public class AccountBalance { private static final Logger log = LoggerFactory.getLogger(AccountBalance.class); - private final Money amount; + private final Emonetary amount; private final AccountBalanceType accountBalanceType; - public AccountBalance(Money amount, AccountBalanceType accountBalanceType) { + public AccountBalance(Emoney amount, AccountBalanceType accountBalanceType) { this.amount = amount; this.accountBalanceType = accountBalanceType; @@ -28,7 +29,7 @@ private String balance(){ return amount.getNumber().doubleValue() + "."+accountBalanceType; } - public Money getAmount() { + public Emonetary getAmount() { return amount; } diff --git a/src/main/java/io/github/ghacupha/book_keeper/balance/AccountBalanceType.java b/src/main/java/io/github/ghacupha/keeper/book/balance/AccountBalanceType.java similarity index 81% rename from src/main/java/io/github/ghacupha/book_keeper/balance/AccountBalanceType.java rename to src/main/java/io/github/ghacupha/keeper/book/balance/AccountBalanceType.java index 6991c14..8912fb3 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/balance/AccountBalanceType.java +++ b/src/main/java/io/github/ghacupha/keeper/book/balance/AccountBalanceType.java @@ -1,4 +1,4 @@ -package io.github.ghacupha.book_keeper.balance; +package io.github.ghacupha.keeper.book.balance; public enum AccountBalanceType { diff --git a/src/main/java/io/github/ghacupha/keeper/book/unit/money/Emonetary.java b/src/main/java/io/github/ghacupha/keeper/book/unit/money/Emonetary.java new file mode 100644 index 0000000..1485cd2 --- /dev/null +++ b/src/main/java/io/github/ghacupha/keeper/book/unit/money/Emonetary.java @@ -0,0 +1,16 @@ +package io.github.ghacupha.keeper.book.unit.money; + +public interface Emonetary extends Comparable,MoneyWrapper, IsNumberical, HasDenomination { + boolean isMoreThan(Emonetary arg); + + boolean isLessThan(Emonetary arg); + + Emonetary plus(Emonetary arg); + + Emonetary minus(Emonetary arg); + + Emonetary multiply(double arg); + + Emonetary divide(double arg); + +} diff --git a/src/main/java/io/github/ghacupha/keeper/book/unit/money/Emoney.java b/src/main/java/io/github/ghacupha/keeper/book/unit/money/Emoney.java new file mode 100644 index 0000000..3705410 --- /dev/null +++ b/src/main/java/io/github/ghacupha/keeper/book/unit/money/Emoney.java @@ -0,0 +1,161 @@ +package io.github.ghacupha.keeper.book.unit.money; + +import org.javamoney.moneta.FastMoney; +import org.javamoney.moneta.Money; + +import java.util.Currency; + +public class Emoney implements Emonetary,MoneyWrapper { + + private final FastMoney _base; + private final Currency currency; + + public Emoney(double amount,String currencyCode){ + + this(Money.of(amount,currencyCode)); + } + + public Emoney(double amount,Currency currency){ + this(amount,currency.getCurrencyCode()); + } + + private Emoney(Money money){ + this._base = FastMoney.of(money.getNumber(),money.getCurrency()); + this.currency = Currency.getInstance(money.getCurrency().getCurrencyCode()); + } + + private Emoney(FastMoney fastMoney) { + this._base=fastMoney; + this.currency = Currency.getInstance(fastMoney.getCurrency().getCurrencyCode()); + } + + public Emoney(org.joda.money.Money money){ + _base = FastMoney.of(money.getAmount(),money.getCurrencyUnit().getCurrencyCode()); + this.currency = Currency.getInstance(money.getCurrencyUnit().getCurrencyCode()); + } + + public boolean isMoreThan(Money arg){ + + return getJavaMoney().isGreaterThan(arg); + } + + public boolean isMoreThan(org.joda.money.Money arg){ + + return getJodaMoney().isGreaterThan(arg); + } + + @Override + public Currency getCurrency() { + return currency; + } + + @Override + public boolean isMoreThan(Emonetary arg){ + + return getJavaMoney().isGreaterThan(arg.getMoney()); + } + + @Override + public boolean isLessThan(Emonetary arg){ + + return getJavaMoney().isLessThan(arg.getMoney()); + } + + public boolean isLessThan(Money arg){ + + return getJavaMoney().isLessThan(arg); + } + + public boolean isLessThan(org.joda.money.Money arg){ + + return getJodaMoney().isLessThan(arg); + } + + @Override + public Emonetary plus(Emonetary arg){ + + return new Emoney(this._base.add(arg.getMoney())); + } + + @Override + public Emonetary minus(Emonetary arg){ + + return new Emoney(this._base.subtract(arg.getMoney())); + } + + @Override + public Emonetary multiply(double arg){ + + return new Emoney(this._base.multiply(arg)); + } + + @Override + public Emonetary divide(double arg){ + + return new Emoney(this._base.divide(arg)); + } + + @Override + public Money getMoney() { + + return getJavaMoney(); + } + + @Override + public Number getNumber() { + + return this._base.getNumber(); + } + + private org.joda.money.Money getJodaMoney(){ + + return org.joda.money.Money.of(org.joda.money.CurrencyUnit.of(_base.getCurrency().getCurrencyCode()),_base.getNumber().doubleValue()); + } + + private Money getJavaMoney(){ + + return Money.of(_base.getNumber(),_base.getCurrency()); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Emoney emoney = (Emoney) o; + + if (!_base.equals(emoney._base)) return false; + return currency.equals(emoney.currency); + } + + @Override + public int hashCode() { + int result = _base.hashCode(); + result = 31 * result + currency.hashCode(); + return result; + } + + @Override + public String toString() { + + return this._base.getCurrency().getCurrencyCode()+" "+this._base.getNumber().doubleValue(); + } + + /** + * + * @param arg the object to be compared. + * @return a negative integer, zero, or a positive integer as this object + * is less than, equal to, or greater than the specified object. + * @throws NullPointerException if the specified object is null + * @throws ClassCastException if the specified object's type prevents it + * from being compared to this object. + */ + @Override + public int compareTo(Object arg) { + + Emoney other = (Emoney)arg; + + return this._base.compareTo(other._base); + + } +} diff --git a/src/main/java/io/github/ghacupha/keeper/book/unit/money/HasDenomination.java b/src/main/java/io/github/ghacupha/keeper/book/unit/money/HasDenomination.java new file mode 100644 index 0000000..fb0644d --- /dev/null +++ b/src/main/java/io/github/ghacupha/keeper/book/unit/money/HasDenomination.java @@ -0,0 +1,8 @@ +package io.github.ghacupha.keeper.book.unit.money; + +import java.util.Currency; + +public interface HasDenomination { + + Currency getCurrency(); +} diff --git a/src/main/java/io/github/ghacupha/keeper/book/unit/money/IsNumberical.java b/src/main/java/io/github/ghacupha/keeper/book/unit/money/IsNumberical.java new file mode 100644 index 0000000..119f97e --- /dev/null +++ b/src/main/java/io/github/ghacupha/keeper/book/unit/money/IsNumberical.java @@ -0,0 +1,6 @@ +package io.github.ghacupha.keeper.book.unit.money; + +public interface IsNumberical { + + Number getNumber(); +} diff --git a/src/main/java/io/github/ghacupha/keeper/book/unit/money/MoneyWrapper.java b/src/main/java/io/github/ghacupha/keeper/book/unit/money/MoneyWrapper.java new file mode 100644 index 0000000..e54ea93 --- /dev/null +++ b/src/main/java/io/github/ghacupha/keeper/book/unit/money/MoneyWrapper.java @@ -0,0 +1,9 @@ +package io.github.ghacupha.keeper.book.unit.money; + +import org.javamoney.moneta.Money; + +public interface MoneyWrapper { + + Money getMoney(); + +} diff --git a/src/main/java/io/github/ghacupha/book_keeper/time/DateRange.java b/src/main/java/io/github/ghacupha/keeper/book/unit/time/DateRange.java similarity index 98% rename from src/main/java/io/github/ghacupha/book_keeper/time/DateRange.java rename to src/main/java/io/github/ghacupha/keeper/book/unit/time/DateRange.java index 68ee2a0..be469ce 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/time/DateRange.java +++ b/src/main/java/io/github/ghacupha/keeper/book/unit/time/DateRange.java @@ -1,4 +1,4 @@ -package io.github.ghacupha.book_keeper.time; +package io.github.ghacupha.keeper.book.unit.time; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/io/github/ghacupha/book_keeper/time/TimePoint.java b/src/main/java/io/github/ghacupha/keeper/book/unit/time/TimePoint.java similarity index 97% rename from src/main/java/io/github/ghacupha/book_keeper/time/TimePoint.java rename to src/main/java/io/github/ghacupha/keeper/book/unit/time/TimePoint.java index c096e65..50ed0ab 100644 --- a/src/main/java/io/github/ghacupha/book_keeper/time/TimePoint.java +++ b/src/main/java/io/github/ghacupha/keeper/book/unit/time/TimePoint.java @@ -1,4 +1,4 @@ -package io.github.ghacupha.book_keeper.time; +package io.github.ghacupha.keeper.book.unit.time; import java.time.LocalDate; diff --git a/src/test/java/io/github/ghacupha/book_keeper/AccountTest.java b/src/test/java/io/github/ghacupha/keeper/book/AccountTest.java similarity index 82% rename from src/test/java/io/github/ghacupha/book_keeper/AccountTest.java rename to src/test/java/io/github/ghacupha/keeper/book/AccountTest.java index 207240d..1f71fc8 100644 --- a/src/test/java/io/github/ghacupha/book_keeper/AccountTest.java +++ b/src/test/java/io/github/ghacupha/keeper/book/AccountTest.java @@ -1,7 +1,7 @@ -package io.github.ghacupha.book_keeper; +package io.github.ghacupha.keeper.book; -import io.github.ghacupha.book_keeper.balance.AccountBalanceType; -import io.github.ghacupha.book_keeper.time.TimePoint; +import io.github.ghacupha.keeper.book.balance.AccountBalanceType; +import io.github.ghacupha.keeper.book.unit.time.TimePoint; import org.javamoney.moneta.CurrencyUnitBuilder; import org.javamoney.moneta.Money; import org.junit.Before; @@ -57,14 +57,14 @@ public void MoneyTest() throws Exception { /*@Test public void jodaMoneyTest() throws Exception { - org.joda.money.Money amount = org.joda.money.Money.of(org.joda.money.CurrencyUnit.getInstance("USD"),12); - org.joda.money.Money fiveDollars = org.joda.money.Money.of(org.joda.money.CurrencyUnit.getInstance("USD"),5); + org.joda.unit.Money amount = org.joda.unit.Money.of(org.joda.unit.CurrencyUnit.getInstance("USD"),12); + org.joda.unit.Money fiveDollars = org.joda.unit.Money.of(org.joda.unit.CurrencyUnit.getInstance("USD"),5); amount.plus(fiveDollars); System.out.println(amount); - assertEquals(amount,org.joda.money.Money.of(org.joda.money.CurrencyUnit.getInstance("USD"),17)); + assertEquals(amount,org.joda.unit.Money.of(org.joda.unit.CurrencyUnit.getInstance("USD"),17)); }*/ @Test diff --git a/src/test/java/io/github/ghacupha/keeper/book/EmoneyTest.java b/src/test/java/io/github/ghacupha/keeper/book/EmoneyTest.java new file mode 100644 index 0000000..6f08e97 --- /dev/null +++ b/src/test/java/io/github/ghacupha/keeper/book/EmoneyTest.java @@ -0,0 +1,53 @@ +package io.github.ghacupha.keeper.book; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class EmoneyTest { + @Before + public void setUp() throws Exception { + } + + @Test + public void isMoreThan() throws Exception { + } + + @Test + public void isMoreThan1() throws Exception { + } + + @Test + public void isMoreThan2() throws Exception { + } + + @Test + public void isLessThan() throws Exception { + } + + @Test + public void isLessThan1() throws Exception { + } + + @Test + public void isLessThan2() throws Exception { + } + + @Test + public void plus() throws Exception { + } + + @Test + public void minus() throws Exception { + } + + @Test + public void multiply() throws Exception { + } + + @Test + public void divide() throws Exception { + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/ghacupha/book_keeper/time/TimePointTest.java b/src/test/java/io/github/ghacupha/keeper/book/unit/time/TimePointTest.java similarity index 96% rename from src/test/java/io/github/ghacupha/book_keeper/time/TimePointTest.java rename to src/test/java/io/github/ghacupha/keeper/book/unit/time/TimePointTest.java index 1c9584f..3763695 100644 --- a/src/test/java/io/github/ghacupha/book_keeper/time/TimePointTest.java +++ b/src/test/java/io/github/ghacupha/keeper/book/unit/time/TimePointTest.java @@ -1,4 +1,4 @@ -package io.github.ghacupha.book_keeper.time; +package io.github.ghacupha.keeper.book.unit.time; import org.junit.Before; import org.junit.Test;