diff --git a/calc/bnd.bnd b/calc/bnd.bnd index b6befca..5572151 100644 --- a/calc/bnd.bnd +++ b/calc/bnd.bnd @@ -3,14 +3,10 @@ osgi.core; version=6.0,\ osgi.cmpn; version=6.0 --testpath: \ - ${junit} - javac.source: 1.8 javac.target: 1.8 -Automatic-Module-Name: org.javamoney.moneta.calc -Bundle-Version: ${version}.${tstamp} +Bundle-Version: ${project.version}.${tstamp} Bundle-Name: JavaMoney Moneta Calculations Bundle-SymbolicName: org.javamoney.moneta.calc Bundle-Description: JavaMoney - Calculation Library @@ -21,8 +17,7 @@ Bundle-Vendor: Credit Suisse AG Bundle-DocURL: http://www.javamoney.org Import-Package: \ javax.money,\ - javax.money.spi,\ - org.javamoney.moneta + javax.money.spi Export-Package: \ org.javamoney.calc,\ org.javamoney.calc.banking,\ diff --git a/calc/pom.xml b/calc/pom.xml index a1a6121..4d81af4 100644 --- a/calc/pom.xml +++ b/calc/pom.xml @@ -22,12 +22,12 @@ org.javamoney.lib javamoney-lib - 0.9-SNAPSHOT + 1.0 javamoney-calc Money and Currency - JavaMoney Calculations - bundle + jar @@ -37,10 +37,6 @@ - - org.apache.felix - maven-bundle-plugin - org.apache.maven.plugins maven-source-plugin @@ -53,6 +49,44 @@ - + + org.apache.maven.plugins + maven-compiler-plugin + 3.7.0 + + 9 + 9 + + org.javamoney.calc/module-info.java + + + + + default-compile + + + + + 9 + + 9 + + + + base-compile + + compile + + + + + javax.money/module-info.java + + + + + + + diff --git a/calc/src/main/java/org.javamoney.calc/module-info.java b/calc/src/main/java/org.javamoney.calc/module-info.java new file mode 100644 index 0000000..7d84804 --- /dev/null +++ b/calc/src/main/java/org.javamoney.calc/module-info.java @@ -0,0 +1,18 @@ +/* + * CREDIT SUISSE IS WILLING TO LICENSE THIS SPECIFICATION TO YOU ONLY UPON THE CONDITION THAT YOU + * ACCEPT ALL OF THE TERMS CONTAINED IN THIS AGREEMENT. PLEASE READ THE TERMS AND CONDITIONS OF THIS + * AGREEMENT CAREFULLY. BY DOWNLOADING THIS SPECIFICATION, YOU ACCEPT THE TERMS AND CONDITIONS OF + * THE AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY IT, SELECT THE "DECLINE" BUTTON AT THE + * BOTTOM OF THIS PAGE. Specification: JSR-354 Money and Currency API ("Specification") Copyright + * (c) 2012-2013, Credit Suisse All rights reserved. + */ +module org.javamoney.calc { + requires transitive java.money; + requires transitive java.base; + requires transitive java.logging; + requires transitive java.annotation; + exports org.javamoney.calc; + exports org.javamoney.calc.common; + exports org.javamoney.calc.banking; + exports org.javamoney.calc.securities; +} \ No newline at end of file diff --git a/calc/src/main/java/org/javamoney/calc/ValidatedAmount.java b/calc/src/main/java/org/javamoney/calc/ValidatedAmount.java index 9ffcecf..73509c1 100644 --- a/calc/src/main/java/org/javamoney/calc/ValidatedAmount.java +++ b/calc/src/main/java/org/javamoney/calc/ValidatedAmount.java @@ -19,8 +19,6 @@ import javax.money.MonetaryAmount; -import org.javamoney.moneta.Money; - import java.util.function.Predicate; @@ -79,7 +77,7 @@ public static MonetaryAmount of(MonetaryAmount amount, private static final class UnsignedPredicate implements Predicate { public boolean test(MonetaryAmount amount) { - return Money.from(amount).signum() >= 0; + return amount.signum() >= 0; } } } diff --git a/calc/src/main/java/org/javamoney/calc/ValidatedMoney.java b/calc/src/main/java/org/javamoney/calc/ValidatedMoney.java index a88cf44..a134350 100644 --- a/calc/src/main/java/org/javamoney/calc/ValidatedMoney.java +++ b/calc/src/main/java/org/javamoney/calc/ValidatedMoney.java @@ -17,15 +17,7 @@ */ package org.javamoney.calc; -import javax.money.CurrencyUnit; -import javax.money.MonetaryAmount; -import javax.money.MonetaryAmountFactory; -import javax.money.MonetaryContext; -import javax.money.MonetaryOperator; -import javax.money.MonetaryQuery; -import javax.money.NumberValue; - -import org.javamoney.moneta.Money; +import javax.money.*; import java.util.function.Predicate; @@ -177,24 +169,6 @@ public ValidatedMoney plus() { return of(this.amount.plus(), predicate); } - /* - * (non-Javadoc) - * - * @see javax.money.MonetaryAmount#subtract(javax.money.MonetaryAmount) - */ - public ValidatedMoney subtract(Money subtrahend) { - return of(this.amount.subtract(subtrahend), predicate); - } - - // /* - // * (non-Javadoc) - // * - // * @see javax.money.MonetaryAmount#ulp() - // */ - // public ConstraintMoney ulp() { - // return of(this.amount.ulp(), predicate); - // } - /* * (non-Javadoc) * @@ -417,8 +391,7 @@ public ValidatedMoney stripTrailingZeros() { @Override public MonetaryAmountFactory getFactory() { - return null; - // return new ConstraintMoneyFactory(this); + return new ValidatedAmountFactory(this); } @Override @@ -426,4 +399,71 @@ public int compareTo(MonetaryAmount o) { return this.amount.compareTo(o); } + /** + * Amount factory, which validates the amount created, based on the default amount factory. + */ + private final class ValidatedAmountFactory implements MonetaryAmountFactory{ + private Predicate predicate; + private MonetaryAmountFactory factory = Monetary.getDefaultAmountFactory(); + + public ValidatedAmountFactory(ValidatedMoney amount){ + this.predicate = amount.predicate; + } + + @Override + public Class getAmountType() { + return ValidatedMoney.class; + } + + @Override + public MonetaryAmountFactory setCurrency(CurrencyUnit currency) { + factory.setCurrency(currency); + return this; + } + + @Override + public MonetaryAmountFactory setNumber(double number) { + factory.setNumber(number); + return this; + } + + @Override + public MonetaryAmountFactory setNumber(long number) { + factory.setNumber(number); + return this; + } + + @Override + public MonetaryAmountFactory setNumber(Number number) { + factory.setNumber(number); + return this; + } + + @Override + public NumberValue getMaxNumber() { + return factory.getMaxNumber(); + } + + @Override + public NumberValue getMinNumber() { + return factory.getMinNumber(); + } + + @Override + public MonetaryAmountFactory setContext(MonetaryContext monetaryContext) { + factory.setContext(monetaryContext); + return this; + } + + @Override + public ValidatedMoney create() { + return new ValidatedMoney(factory.create(), predicate); + } + + @Override + public MonetaryContext getDefaultMonetaryContext() { + return factory.getDefaultMonetaryContext(); + } + } + } diff --git a/calc/src/main/java/org/javamoney/calc/common/AverageCollectionPeriod.java b/calc/src/main/java/org/javamoney/calc/common/AverageCollectionPeriod.java index 75cadd1..d5cfa5d 100644 --- a/calc/src/main/java/org/javamoney/calc/common/AverageCollectionPeriod.java +++ b/calc/src/main/java/org/javamoney/calc/common/AverageCollectionPeriod.java @@ -18,7 +18,6 @@ package org.javamoney.calc.common; import org.javamoney.calc.CalculationContext; -import org.javamoney.moneta.spi.MoneyUtils; import javax.money.MonetaryAmount; import javax.money.MonetaryQuery; @@ -67,7 +66,7 @@ public BigDecimal getAvgAccountsReceivable() { */ public static BigDecimal calculate(Number receivablesTurnover) { return new BigDecimal(365, CalculationContext.mathContext()) - .divide(MoneyUtils.getBigDecimal(receivablesTurnover), CalculationContext.mathContext()); + .divide(new BigDecimal(receivablesTurnover.toString()), CalculationContext.mathContext()); } /** @@ -77,7 +76,7 @@ public static BigDecimal calculate(Number receivablesTurnover) { * @return the receivables turnover, never null. */ public static BigDecimal receivablesTurnover(MonetaryAmount revenue, Number avgAccountsReceivable){ - return MoneyUtils.getBigDecimal(avgAccountsReceivable).divide( + return new BigDecimal(avgAccountsReceivable.toString()).divide( revenue.getNumber().numberValue(BigDecimal.class), MathContext.DECIMAL64); } diff --git a/calc/src/main/java/org/javamoney/calc/common/BasisPoint.java b/calc/src/main/java/org/javamoney/calc/common/BasisPoint.java index 63b278c..af7f9a0 100644 --- a/calc/src/main/java/org/javamoney/calc/common/BasisPoint.java +++ b/calc/src/main/java/org/javamoney/calc/common/BasisPoint.java @@ -24,8 +24,6 @@ import javax.money.MonetaryAmount; import org.javamoney.calc.CalculationContext; -import org.javamoney.moneta.Money; -import org.javamoney.moneta.spi.MoneyUtils; /** @@ -69,7 +67,7 @@ public static BasisPoint of(Number number) { */ @Override public MonetaryAmount apply(MonetaryAmount amount) { - return Money.from(amount).multiply(basisPointValue); + return amount.multiply(basisPointValue); } /* @@ -111,7 +109,7 @@ public static MonetaryAmount calculate(MonetaryAmount amount, Number basisPoints * the basis points number, 10'000-ends. */ private static BigDecimal calcBasisPoint(Number number) { - return MoneyUtils.getBigDecimal(number).divide( + return new BigDecimal(number.toString()).divide( ONE_TENTHOUSAND, CalculationContext.mathContext()); } diff --git a/calc/src/main/java/org/javamoney/calc/common/FutureValueWithContinuousCompounding.java b/calc/src/main/java/org/javamoney/calc/common/FutureValueWithContinuousCompounding.java index 234730a..dd6cb60 100644 --- a/calc/src/main/java/org/javamoney/calc/common/FutureValueWithContinuousCompounding.java +++ b/calc/src/main/java/org/javamoney/calc/common/FutureValueWithContinuousCompounding.java @@ -19,8 +19,7 @@ import javax.money.MonetaryAmount; -import com.ibm.icu.math.BigDecimal; - +import java.math.BigDecimal; import java.util.Objects; /** diff --git a/calc/src/main/java/org/javamoney/calc/common/Rate.java b/calc/src/main/java/org/javamoney/calc/common/Rate.java index afa72cd..1484949 100644 --- a/calc/src/main/java/org/javamoney/calc/common/Rate.java +++ b/calc/src/main/java/org/javamoney/calc/common/Rate.java @@ -17,8 +17,6 @@ */ package org.javamoney.calc.common; -import org.javamoney.moneta.spi.MoneyUtils; - import java.math.BigDecimal; import java.util.Objects; import java.util.function.Supplier; @@ -85,7 +83,7 @@ public static Rate of(BigDecimal rate, String info) { * the rate, not {@code null}. */ public static Rate of(Number rate) { - return new Rate(MoneyUtils.getBigDecimal(rate), null); + return new Rate(new BigDecimal(rate.toString()), null); } /** @@ -95,7 +93,7 @@ public static Rate of(Number rate) { * the rate, not {@code null}. */ public static Rate of(Number rate, String info) { - return new Rate(MoneyUtils.getBigDecimal(rate), info); + return new Rate(new BigDecimal(rate.toString()), info); } /* diff --git a/exchange/exchange-rate-frb/bnd.bnd b/exchange/exchange-rate-frb/bnd.bnd index db86bfd..88ad0f7 100644 --- a/exchange/exchange-rate-frb/bnd.bnd +++ b/exchange/exchange-rate-frb/bnd.bnd @@ -3,14 +3,11 @@ osgi.core; version=6.0,\ osgi.cmpn; version=6.0 --testpath: \ - ${junit} - javac.source: 1.8 javac.target: 1.8 Automatic-Module-Name: org.javamoney.moneta.convert.frb -Bundle-Version: ${version}.${tstamp} +Bundle-Version: ${project.version}.${tstamp} Bundle-Name: JavaMoney Moneta FRB Conversion Bundle-Activator: org.javamoney.moneta.convert.internal.frb.OSGIActivator Bundle-SymbolicName: org.javamoney.moneta.convert.frb diff --git a/exchange/exchange-rate-frb/pom.xml b/exchange/exchange-rate-frb/pom.xml index c787f41..f8f96f3 100644 --- a/exchange/exchange-rate-frb/pom.xml +++ b/exchange/exchange-rate-frb/pom.xml @@ -60,8 +60,14 @@ test - org.javamoney - moneta + org.javamoney.moneta + moneta-core + ${ri.version} + + + org.javamoney.moneta + moneta-convert + ${ri.version} diff --git a/exchange/exchange-rate-yahoo/bnd.bnd b/exchange/exchange-rate-yahoo/bnd.bnd index 7af770c..dafe671 100644 --- a/exchange/exchange-rate-yahoo/bnd.bnd +++ b/exchange/exchange-rate-yahoo/bnd.bnd @@ -3,14 +3,11 @@ osgi.core; version=6.0,\ osgi.cmpn; version=6.0 --testpath: \ - ${junit} - javac.source: 1.8 javac.target: 1.8 Automatic-Module-Name: org.javamoney.moneta.convert.yahoo -Bundle-Version: ${version}.${tstamp} +Bundle-Version: ${project.version}.${tstamp} Bundle-Name: JavaMoney Moneta Yahoo Conversion Bundle-Activator: org.javamoney.moneta.convert.internal.yahoo.OSGIActivator Bundle-SymbolicName: org.javamoney.moneta.convert.yahoo diff --git a/exchange/exchange-rate-yahoo/pom.xml b/exchange/exchange-rate-yahoo/pom.xml index 48ac0b2..90a386a 100644 --- a/exchange/exchange-rate-yahoo/pom.xml +++ b/exchange/exchange-rate-yahoo/pom.xml @@ -60,8 +60,14 @@ test - org.javamoney - moneta + org.javamoney.moneta + moneta-core + ${ri.version} + + + org.javamoney.moneta + moneta-convert + ${ri.version} diff --git a/exchange/pom.xml b/exchange/pom.xml index 56e8615..f65c872 100644 --- a/exchange/pom.xml +++ b/exchange/pom.xml @@ -21,7 +21,7 @@ org.javamoney.lib javamoney-lib - 0.9-SNAPSHOT + 1.0 javamoney-exchange pom diff --git a/javamoney-cdi/bnd.bnd b/javamoney-cdi/bnd.bnd index 5d8dee2..d6a0ccd 100644 --- a/javamoney-cdi/bnd.bnd +++ b/javamoney-cdi/bnd.bnd @@ -3,14 +3,11 @@ osgi.core; version=6.0,\ osgi.cmpn; version=6.0 --testpath: \ - ${junit} - javac.source: 1.8 javac.target: 1.8 Automatic-Module-Name: org.javamoney.moneta.cdi -Bundle-Version: ${version}.${tstamp} +Bundle-Version: ${project.version}.${tstamp} Bundle-Name: JavaMoney Moneta CDI Support Bundle-SymbolicName: org.javamoney.moneta.cdi Bundle-Description: JavaMoney - CDI Integration diff --git a/javamoney-cdi/pom.xml b/javamoney-cdi/pom.xml index 01d8c54..a02e156 100644 --- a/javamoney-cdi/pom.xml +++ b/javamoney-cdi/pom.xml @@ -4,7 +4,7 @@ javamoney-lib org.javamoney.lib - 0.9-SNAPSHOT + 1.0 javamoney-cdi Money and Currency - JavaMoney CDI Integration diff --git a/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/CDISEServiceProvider.java b/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/CDISEServiceProvider.java index b3520c6..621e312 100644 --- a/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/CDISEServiceProvider.java +++ b/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/CDISEServiceProvider.java @@ -26,8 +26,6 @@ import javax.annotation.Priority; import javax.money.spi.ServiceProvider; -import org.javamoney.moneta.internal.PriorityAwareServiceProvider; - /** * Overriding ServiceProvider that actually tries to satisfy component requests from CDI, * where possible. Additionally ServiceLoader based service are loaded and are returned diff --git a/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/DefaultServiceProvider.java b/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/DefaultServiceProvider.java index eceedb1..994ba16 100644 --- a/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/DefaultServiceProvider.java +++ b/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/DefaultServiceProvider.java @@ -88,8 +88,17 @@ public int getPriority() { @Override public List getServices(Class serviceType) { - // TODO Auto-generated method stub - return null; + try { + List services = new ArrayList<>(); + for (T t : ServiceLoader.load(serviceType)) { + services.add(t); + } + @SuppressWarnings("unchecked") + final List previousServices = (List) servicesLoaded.putIfAbsent(serviceType, (List) services); + return Collections.unmodifiableList(previousServices != null ? previousServices : services); + } catch (Exception e) { + throw new IllegalStateException("Error loading services of type " + serviceType, e); + } } } \ No newline at end of file diff --git a/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/PriorityAwareServiceProvider.java b/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/PriorityAwareServiceProvider.java new file mode 100644 index 0000000..3b94ae1 --- /dev/null +++ b/javamoney-cdi/src/main/java/org/javamoney/cdi/internal/PriorityAwareServiceProvider.java @@ -0,0 +1,113 @@ +/* + Copyright (c) 2012, 2014, Credit Suisse (Anatole Tresch), Werner Keil and others by the @author tag. + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. + */ +package org.javamoney.cdi.internal; + +import javax.annotation.Priority; +import javax.money.spi.ServiceProvider; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.ServiceLoader; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * This class implements the (default) {@link ServiceProvider} interface and hereby uses the JDK + * {@link ServiceLoader} to load the services required. + * + * @author Anatole Tresch + */ +public class PriorityAwareServiceProvider implements ServiceProvider { + /** + * List of services loaded, per class. + */ + private final ConcurrentHashMap, List> servicesLoaded = new ConcurrentHashMap<>(); + + /** + * Returns a priority value of 10. + * + * @return 10, overriding the default provider. + */ + @Override + public int getPriority() { + return 10; + } + + /** + * Loads and registers services. + * + * @param serviceType The service type. + * @param the concrete type. + * @return the items found, never {@code null}. + */ + @Override + public List getServices(final Class serviceType) { + @SuppressWarnings("unchecked") + List found = (List) servicesLoaded.get(serviceType); + if (found != null) { + return found; + } + + return loadServices(serviceType); + } + + public static int compareServices(Object o1, Object o2) { + int prio1 = 0; + int prio2 = 0; + Priority prio1Annot = o1.getClass().getAnnotation(Priority.class); + if (prio1Annot != null) { + prio1 = prio1Annot.value(); + } + Priority prio2Annot = o2.getClass().getAnnotation(Priority.class); + if (prio2Annot != null) { + prio2 = prio2Annot.value(); + } + if (prio1 < prio2) { + return 1; + } + if (prio2 < prio1) { + return -1; + } + return o2.getClass().getSimpleName().compareTo(o1.getClass().getSimpleName()); + } + + /** + * Loads and registers services. + * + * @param serviceType The service type. + * @param the concrete type. + * @return the items found, never {@code null}. + */ + private List loadServices(final Class serviceType) { + List services = new ArrayList<>(); + try { + for (T t : ServiceLoader.load(serviceType)) { + services.add(t); + } + services.sort(PriorityAwareServiceProvider::compareServices); + @SuppressWarnings("unchecked") + final List previousServices = (List) servicesLoaded.putIfAbsent(serviceType, (List) services); + return Collections.unmodifiableList(previousServices != null ? previousServices : services); + } catch (Exception e) { + Logger.getLogger(PriorityAwareServiceProvider.class.getName()).log(Level.WARNING, + "Error loading services of type " + serviceType, e); + services.sort(PriorityAwareServiceProvider::compareServices); + return services; + } + } + +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9cf2573..5543010 100644 --- a/pom.xml +++ b/pom.xml @@ -27,10 +27,10 @@ org.javamoney.lib Money and Currency - JavaMoney Libraries (parent) pom - 0.9-SNAPSHOT + 1.0 - 1.0.1 - 1.0.1-SNAPSHOT + 1.0.2 + 1.2 UTF-8 UTF-8 1.7.10 @@ -73,18 +73,6 @@ - - org.jacoco - jacoco-maven-plugin - - - prepare-agent - - prepare-agent - - - - biz.aQute.bnd bnd-maven-plugin @@ -110,12 +98,8 @@ org.jacoco - - jacoco-maven-plugin - - - [0.7.2.201409121644,) - + jacoco-maven-plugin + 0.8.1 prepare-agent @@ -131,7 +115,7 @@ biz.aQute.bnd bnd-maven-plugin - 3.3.0 + 3.5.0 ch.qos.logback @@ -215,13 +199,13 @@ javax.annotation javax.annotation-api - 1.2 + 1.3.2 - org.javamoney - moneta - ${jsr.version} - provided + org.javamoney.moneta + moneta-core + ${ri.version} + test @@ -248,4 +232,74 @@ slf4j-api + + + + release-sign-artifacts + + + performRelease + true + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.4 + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + + false + 11A1E4D6 + + + + sign-artifacts + verify + + sign + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar + + + + + + + +