// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataquality.converters; import java.math.BigDecimal; /** * this class is used for Converting a distance from one unit to another.<br/> * millimeter (mm)<br/> * centimeter (cm)<br/> * decimeter (dm)<br/> * meter (m)<br/> * dekameter (dam)<br/> * hectometer (hm)<br/> * kilometer (km)<br/> * inch (in)<br/> * foot (ft)<br/> * yard (yd)<br/> * mile (mi)<br/> * nautical mile (nm)<br/> * light-year (ly)<br/> * input default value is mile (mi)<br/> * output default value is kilometer (km)<br/> * Created by xqliu on 2017-02-24. */ public class DistanceConverter { public static final DistanceEnum DEFAULT_DISTANCE_FROM = DistanceEnum.MILE; public static final DistanceEnum DEFAULT_DISTANCE_TO = DistanceEnum.KILOMETER; private DistanceEnum deFrom; private DistanceEnum deTo; private BigDecimal multiplier; /** * Default constructor, the default distance from unit is DistanceEnum.MILE, the default distance to unit is DistanceEnum.KILOMETER. */ public DistanceConverter() { this(DEFAULT_DISTANCE_FROM, DEFAULT_DISTANCE_TO); } /** * Constructor. * * @param from the distance from unit, default value is DistanceEnum.MILE * @param to the distance to unit, default value is DistanceEnum.KILOMETER */ public DistanceConverter(DistanceEnum from, DistanceEnum to) { this.deFrom = from == null ? DEFAULT_DISTANCE_FROM : from; this.deTo = to == null ? DEFAULT_DISTANCE_TO : to; this.multiplier = new BigDecimal(String.valueOf(this.deFrom.getConversionToBase())) .multiply(new BigDecimal(String.valueOf(this.deTo.getConversionFromBase()))); } public double convert(double value) { if (Double.isNaN(value)) { return value; } if (this.deFrom.equals(this.deTo)) { return value; } BigDecimal bdResult = new BigDecimal(String.valueOf(value)).multiply(this.multiplier); return bdResult.doubleValue(); } }