001/* Copyright (C) 2014 konik.io 002 * 003 * This file is part of the Konik library. 004 * 005 * The Konik library is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * The Konik library is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with the Konik library. If not, see <http://www.gnu.org/licenses/>. 017 */ 018package io.konik.jaxb.adapter; 019 020import static java.lang.Integer.parseInt; 021import static java.lang.System.getProperty; 022import static java.math.RoundingMode.valueOf; 023 024import java.math.BigDecimal; 025import java.math.RoundingMode; 026 027import javax.xml.bind.annotation.adapters.XmlAdapter; 028 029/** 030 * 031 * The Class MeasureRoundingAdapter. 032 */ 033public class MeasureRoundingAdapter extends XmlAdapter<BigDecimal, BigDecimal> { 034 035 private static final String DEFAULT_ROUNDING_MODE = "HALF_UP"; 036 private static final String DEFAULT_SCALE = "2"; 037 038 final int scale; 039 final RoundingMode roundingMode; 040 041 /** 042 * Instantiates a new amount rounding adapter. 043 */ 044 public MeasureRoundingAdapter() { 045 String name = this.getClass().getName(); 046 scale = parseInt(getProperty(name + ".scale", DEFAULT_SCALE)); 047 roundingMode = valueOf(getProperty(name + ".roundingMode", DEFAULT_ROUNDING_MODE)); 048 } 049 050 @Override 051 public BigDecimal unmarshal(BigDecimal v) throws Exception { 052 return v; 053 } 054 055 @Override 056 public BigDecimal marshal(BigDecimal v) throws Exception { 057 if (v == null) { return null; } 058 return v.setScale(scale, roundingMode).stripTrailingZeros(); 059 } 060 061}