diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCFactory.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCFactory.java index 9b8299f..edc026f 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCFactory.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCFactory.java @@ -31,10 +31,14 @@ import net.forwardfire.unitxc.config.UnitXCConfig; import net.forwardfire.unitxc.config.UnitXCConfigManager; import net.forwardfire.unitxc.config.UnitXCConfigModule; import net.forwardfire.unitxc.module.UnitXCModuleAmountOfSubstance; +import net.forwardfire.unitxc.module.UnitXCModuleArea; import net.forwardfire.unitxc.module.UnitXCModuleElectricCurrent; import net.forwardfire.unitxc.module.UnitXCModuleLength; import net.forwardfire.unitxc.module.UnitXCModuleLuminousIntensity; +import net.forwardfire.unitxc.module.UnitXCModuleMass; import net.forwardfire.unitxc.module.UnitXCModuleTemperature; +import net.forwardfire.unitxc.module.UnitXCModuleTime; +import net.forwardfire.unitxc.module.UnitXCModuleVolume; public final class UnitXCFactory { @@ -43,7 +47,11 @@ public final class UnitXCFactory { new UnitXCModuleElectricCurrent(), new UnitXCModuleLuminousIntensity(), new UnitXCModuleAmountOfSubstance(), - new UnitXCModuleLength() + new UnitXCModuleLength(), + new UnitXCModuleMass(), + new UnitXCModuleTime(), + new UnitXCModuleArea(), + new UnitXCModuleVolume() )); diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCManager.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCManager.java index fcb3cd0..f0fad75 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCManager.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/UnitXCManager.java @@ -27,7 +27,7 @@ import java.util.Collection; import net.forwardfire.unitxc.converter.UnitXConverter; import net.forwardfire.unitxc.model.UnitXCType; -import net.forwardfire.unitxc.model.UnitXCTypeGroup; +import net.forwardfire.unitxc.model.UnitXCGroup; public interface UnitXCManager { @@ -37,11 +37,11 @@ public interface UnitXCManager { boolean isUnitType(String id); - Collection getUnitTypeGroups(); + Collection getUnitGroups(); - UnitXCTypeGroup getUnitTypeGroup(String id); + UnitXCGroup getUnitGroup(String id); - boolean isUnitTypeGroup(String id); + boolean isUnitGroup(String id); UnitXConverter getConverter(); } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfig.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfig.java index f4be4e4..d0cbf45 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfig.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfig.java @@ -30,15 +30,15 @@ import java.util.Map; import org.apache.commons.lang3.Validate; import net.forwardfire.unitxc.model.UnitXCTypeModel; -import net.forwardfire.unitxc.model.UnitXCTypeGroupModel; +import net.forwardfire.unitxc.model.UnitXCGroupModel; public final class UnitXCConfig { private final Map unitTypes; - private final Map unitTypeGroups; + private final Map unitGroups; public UnitXCConfig() { - unitTypeGroups = new HashMap<>(); + unitGroups = new HashMap<>(); unitTypes = new HashMap<>(); } @@ -63,17 +63,17 @@ public final class UnitXCConfig { } /** - * @return the unitTypeGroups + * @return the unitGroups */ - public Collection getUnitTypeGroups() { - return unitTypeGroups.values(); + public Collection getUnitroups() { + return unitGroups.values(); } - public void addUnitTypeGroup(UnitXCTypeGroupModel unitTypeGroup) { - putUnitTypeGroup(Validate.notNull(unitTypeGroup).validate()); + public void addUnitGroup(UnitXCGroupModel unitTypeGroup) { + putUnitGroup(Validate.notNull(unitTypeGroup).validate()); } - private void putUnitTypeGroup(UnitXCTypeGroupModel unitTypeGroup) { - unitTypeGroups.put(unitTypeGroup.getId(),unitTypeGroup); + private void putUnitGroup(UnitXCGroupModel unitTypeGroup) { + unitGroups.put(unitTypeGroup.getId(),unitTypeGroup); } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigManager.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigManager.java index 93d31d9..db8fa93 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigManager.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigManager.java @@ -34,23 +34,23 @@ import net.forwardfire.unitxc.UnitXCManager; import net.forwardfire.unitxc.converter.UnitXConverter; import net.forwardfire.unitxc.converter.UnitXConverterEngine; import net.forwardfire.unitxc.model.UnitXCTypeModel; -import net.forwardfire.unitxc.model.UnitXCTypeGroupModel; +import net.forwardfire.unitxc.model.UnitXCGroupModel; import net.forwardfire.unitxc.model.UnitXCType; -import net.forwardfire.unitxc.model.UnitXCTypeGroup; +import net.forwardfire.unitxc.model.UnitXCGroup; import net.forwardfire.unitxc.model.UnitXConverterResult; public class UnitXCConfigManager implements UnitXCManager { private final UnitXCConfig config; private final Map unitTypes; - private final Map unitTypeGroups; + private final Map unitGroups; private final UnitXConverter converter; private final UnitXConverterEngine convertEngine; public UnitXCConfigManager(UnitXCConfig config) { this.config = Validate.notNull(config); this.unitTypes = Collections.unmodifiableMap(createUnitTypes(config.getUnitTypes())); - this.unitTypeGroups = Collections.unmodifiableMap(createUnitTypeGroups(config.getUnitTypeGroups())); + this.unitGroups = Collections.unmodifiableMap(createUnitGroups(config.getUnitroups())); this.convertEngine = new UnitXConverterEngine(this); this.converter = new UnitXConverterImpl(); @@ -62,8 +62,8 @@ public class UnitXCConfigManager implements UnitXCManager { return result; } - private static Map createUnitTypeGroups(Collection values) { - Map result = new HashMap<>(); + private static Map createUnitGroups(Collection values) { + Map result = new HashMap<>(); values.forEach((value) -> result.put(value.getId(), value)); return result; } @@ -84,18 +84,18 @@ public class UnitXCConfigManager implements UnitXCManager { } @Override - public Collection getUnitTypeGroups() { - return unitTypeGroups.values(); + public Collection getUnitGroups() { + return unitGroups.values(); } @Override - public UnitXCTypeGroup getUnitTypeGroup(String id) { - return Validate.notNull(unitTypeGroups.get(Validate.notNull(id,"Null is not a validate id.")),"No group for: "+id); + public UnitXCGroup getUnitGroup(String id) { + return Validate.notNull(unitGroups.get(Validate.notNull(id,"Null is not a validate id.")),"No group for: "+id); } @Override - public boolean isUnitTypeGroup(String id) { - return unitTypeGroups.containsKey(Validate.notBlank(id)); + public boolean isUnitGroup(String id) { + return unitGroups.containsKey(Validate.notBlank(id)); } @Override diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigModule.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigModule.java index 92b661b..a3c8097 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigModule.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/UnitXCConfigModule.java @@ -23,6 +23,7 @@ package net.forwardfire.unitxc.config; +import java.util.Arrays; import java.util.List; import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; @@ -31,6 +32,12 @@ public interface UnitXCConfigModule { void configModule(UnitXCConfigBuilder config); + static String buildFlag(String...flag) { + StringBuilder buf = new StringBuilder(); + Arrays.asList(flag).forEach(f -> buf.append(f.toUpperCase()).append("_")); + return buf.deleteCharAt(buf.length()-1).toString(); + } + static UnitXCConfig buildAll(UnitXCConfig config,List configInit) { UnitXCConfigBuilder builder = new UnitXCConfigBuilder(config); configInit.forEach(ci -> ci.configModule(builder)); diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/AbstractUnitXCTypeBuilder.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/AbstractUnitXCTypeBuilder.java index 7ba74ee..66cfdc5 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/AbstractUnitXCTypeBuilder.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/AbstractUnitXCTypeBuilder.java @@ -45,8 +45,20 @@ public abstract class AbstractUnitXCTypeBuilder extends AbstractUnitXCBuild return make((v) -> v.setName(name)); } + public B addNameAlias(String nameAlias) { + return make((v) -> v.addNameAlias(nameAlias)); + } + + public B addNameAliases(Collection nameAliases) { + return make((v) -> nameAliases.forEach(a -> v.addNameAlias(a))); + } + + public B addNameAliases(String[] nameAliases) { + return addNameAliases(Arrays.asList(nameAliases)); + } + public B setTypeGroupId(String typeGroupId) { - return make((v) -> v.setTypeGroupId(typeGroupId)); + return make((v) -> v.setUnitGroupId(typeGroupId)); } public B addTypeFlag(String flag) { diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCConfigBuilder.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCConfigBuilder.java index ce9c056..749262a 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCConfigBuilder.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCConfigBuilder.java @@ -29,6 +29,9 @@ import net.forwardfire.unitxc.config.UnitXCConfig; public class UnitXCConfigBuilder { + public static final String TYPE_FLAG_IMPERIAL = "IMPERIAL"; // todo move to ... + public static final String TYPE_FLAG_IMPERIAL_EXTRA = "IMPERIAL_EXTRA"; + private final UnitXCConfig config; public UnitXCConfigBuilder(UnitXCConfig config) { @@ -39,8 +42,8 @@ public class UnitXCConfigBuilder { return config; } - public UnitXCTypeGroupBuilder createUnitTypeGroup() { - return new UnitXCTypeGroupBuilder(this); + public UnitXCGroupBuilder createUnitGroup() { + return new UnitXCGroupBuilder(this); } public UnitXCTypeBuilder createUnitType() { diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCConfigModuleBuilder.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCConfigModuleBuilder.java new file mode 100644 index 0000000..c2e8a9f --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCConfigModuleBuilder.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.config.builder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class UnitXCConfigModuleBuilder { + +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeGroupBuilder.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCGroupBuilder.java similarity index 60% rename from ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeGroupBuilder.java rename to ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCGroupBuilder.java index bf5f07e..c529238 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeGroupBuilder.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCGroupBuilder.java @@ -23,40 +23,54 @@ package net.forwardfire.unitxc.config.builder; -import net.forwardfire.unitxc.model.UnitXCTypeGroupModel; +import net.forwardfire.unitxc.model.UnitXCGroupModel; +import net.forwardfire.unitxc.model.UnitXCGroupType; -public class UnitXCTypeGroupBuilder extends AbstractUnitXCBuilder { +public class UnitXCGroupBuilder extends AbstractUnitXCBuilder { - public UnitXCTypeGroupBuilder(UnitXCConfigBuilder parent) { - super(parent, new UnitXCTypeGroupModel(), (p,v) -> p.getConfig().addUnitTypeGroup(v)); + public UnitXCGroupBuilder(UnitXCConfigBuilder parent) { + super(parent, new UnitXCGroupModel(), (p,v) -> p.getConfig().addUnitGroup(v)); } @Override - protected UnitXCTypeGroupBuilder getBuilder() { + protected UnitXCGroupBuilder getBuilder() { return this; } - public UnitXCTypeBuilder createUnitType() { + public UnitXCTypeBuilder createUnitType() { return new UnitXCTypeBuilder<>(this,(p,v) -> p.getParent().getConfig().addUnitType(v)).setTypeGroupId(getValue().getId()); } - public UnitXCTypeSIPrefixBuilder createSIUnitTypes() { + public UnitXCTypeSIPrefixBuilder createSIUnitTypes() { return new UnitXCTypeSIPrefixBuilder<>(this,getParent()).setTypeGroupId(getValue().getId()); } - public UnitXCTypeGroupBuilder setId(String id) { + + public UnitXCTypeCompoundExponentBuilder createCompoundExponentUnitTypes(String unitTypeGroupId,int exponent) { + return new UnitXCTypeCompoundExponentBuilder(this,getParent(),unitTypeGroupId,exponent); + } + + public UnitXCGroupBuilder setId(String id) { return make((v) -> v.setId(id)); } - public UnitXCTypeGroupBuilder setName(String name) { + public UnitXCGroupBuilder setName(String name) { return make((v) -> v.setName(name)); } - public UnitXCTypeGroupBuilder setDescription(String description) { + public UnitXCGroupBuilder setDescription(String description) { return make((v) -> v.setDescription(description)); } - public UnitXCTypeGroupBuilder setBaseTypeId(String baseTypeId) { + public UnitXCGroupBuilder setBaseTypeId(String baseTypeId) { return make((v) -> v.setBaseTypeId(baseTypeId)); } + + public UnitXCGroupBuilder setType(UnitXCGroupType type) { + return make((v) -> v.setType(type)); + } + +// public UnitXCGroupBuilder addDerivedFrom(String fromId) { +// return make((v) -> v.addDerivedFrom(fromId)); +// } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCNumberTypeSetting.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCNumberTypeSetting.java new file mode 100644 index 0000000..cf3fc0b --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCNumberTypeSetting.java @@ -0,0 +1,29 @@ +package net.forwardfire.unitxc.config.builder; + +public class UnitXCNumberTypeSetting { + + private static final char ZERO_CHAR_NORMAL = '0'; + private static final char ZERO_CHAR_SUB = '₀'; + private static final char ZERO_CHAR_SUPER = '⁰'; + + public static String toSuperScript(int value) { + return printScript(value, ZERO_CHAR_SUPER, new StringBuilder()).toString(); + } + + public static String toSubScript(int value) { + return printScript(value, ZERO_CHAR_SUB, new StringBuilder()).toString(); + } + + private static StringBuilder printScript(int value,char zeroChar,StringBuilder buf) { + String number = Integer.toString(value); + for (char c:number.toCharArray()) { + int offset = c-ZERO_CHAR_NORMAL; + int scriptChar = zeroChar+offset; + if (scriptChar==0x2072 || scriptChar==0x2073) { // TODO: rewrite to lookup table + scriptChar-=(0x2070-0x00B0); // utf-8 is iso-8859-1 compatible :( + } + buf.append((char)scriptChar); + } + return buf; + } +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeCompoundExponentBuilder.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeCompoundExponentBuilder.java new file mode 100644 index 0000000..50a1dd0 --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeCompoundExponentBuilder.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.config.builder; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.Validate; + +import net.forwardfire.unitxc.converter.step.UnitXConverterStep; +import net.forwardfire.unitxc.model.UnitXCGroupModel; +import net.forwardfire.unitxc.model.UnitXCTypeModel; + +public class UnitXCTypeCompoundExponentBuilder extends AbstractUnitXCBuilder { + + private final UnitXCConfigBuilder builder; + private final String unitGroupId; + private final int exponent; + private String unitIdPostfix; + private String unitNamePrefix; + + public UnitXCTypeCompoundExponentBuilder(UnitXCGroupBuilder parent, UnitXCConfigBuilder builder,String unitGroupId,int exponent) { + super(parent,new Object(), (p,v) -> {}); + this.builder = builder; + this.unitGroupId = unitGroupId; + this.exponent = exponent; + } + + @Override + protected UnitXCTypeCompoundExponentBuilder getBuilder() { + return this; + } + + @Override + protected void buildPreValue(Object v) { + + UnitXCGroupModel group = null; + for (UnitXCGroupModel unitGroup:builder.getConfig().getUnitroups()) { + if (unitGroup.getId().equals(unitGroupId)) { + group = unitGroup; + break; + } + } + Validate.notNull(group,"Could not find group: "+unitGroupId); + + getParent().getValue().addDerivedFrom(unitGroupId); + + for (UnitXCTypeModel unitType:new ArrayList<>(builder.getConfig().getUnitTypes())) { + if (!unitType.getUnitGroupId().equals(group.getId())) { + continue; + } + UnitXCTypeBuilder typeBuilder = builder.createUnitType() + .setId(unitType.getId()+unitIdPostfix) + .setName(unitNamePrefix+unitType.getName()) + .setTypeGroupId(group.getId()) + .addTypeFlags(unitType.getTypeFlags()); + + for (int i=0;i addStepReason(int exponent,List steps) { + if (exponent == 0) { + return steps; + } + steps.forEach(step -> step.addStepReason("CompoundeExponent: "+exponent)); + return steps; + } + + public UnitXCTypeCompoundExponentBuilder setUnitIdPostfix(String unitIdPostfix) { + return make(v -> this.unitIdPostfix = unitIdPostfix); + } + + public UnitXCTypeCompoundExponentBuilder setUnitNamePrefix(String unitNamePrefix) { + return make(v -> this.unitNamePrefix = unitNamePrefix); + } +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefix.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefix.java index ebdd602..ea864a4 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefix.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefix.java @@ -24,6 +24,7 @@ package net.forwardfire.unitxc.config.builder; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -42,9 +43,9 @@ public enum UnitXCTypeSIPrefix { DECI ("d", -1), CENTI ("c", -2), MILLI ("m", -3), - MICRO ("µ", -6), - NANO ("n", -9), - PICO ("p", -12), + MICRO ("µ", -6, null, UnitXCTypeSIPrefix.NAME_ALIAS_MILLIMILLI), + NANO ("n", -9, null, UnitXCTypeSIPrefix.NAME_ALIAS_MILLIMICRO), + PICO ("p", -12, null, UnitXCTypeSIPrefix.NAME_ALIAS_MICROMICRO), FEMTO ("f", -15), ATTO ("a", -18), ZEPTO ("z", -21), @@ -68,16 +69,21 @@ public enum UnitXCTypeSIPrefix { public static final String TYPE_FLAG_SI_UNIT_OBSOLETE = "SI_UNIT_OBSOLETE"; public static final String TYPE_FLAG_SI_UNIT_COMMON = "SI_UNIT_COMMON"; + public static final String NAME_ALIAS_MILLIMILLI = "millimilli"; + public static final String NAME_ALIAS_MILLIMICRO = "millimicro"; + public static final String NAME_ALIAS_MICROMICRO = "micromicro"; + private final String id; private final String name; private final int exponent; private final List flags; + private final List nameAliases; private UnitXCTypeSIPrefix(String id,int exponent) { this(id,exponent,null); } - private UnitXCTypeSIPrefix(String id,int exponent,String flag) { + private UnitXCTypeSIPrefix(String id,int exponent,String flag,String...names) { this.id=id; this.name = this.name().toLowerCase(); this.exponent=exponent; @@ -93,6 +99,9 @@ public enum UnitXCTypeSIPrefix { f.add(flag); } this.flags = Collections.unmodifiableList(f); + List n = new ArrayList<>(2); + n.addAll(Arrays.asList(names)); + this.nameAliases = Collections.unmodifiableList(n); } public String getPrefixId() { @@ -110,4 +119,8 @@ public enum UnitXCTypeSIPrefix { public List getFlags() { return flags; } + + public List getNameAliases() { + return nameAliases; + } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefixBuilder.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefixBuilder.java index 048a75f..a1e00fa 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefixBuilder.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXCTypeSIPrefixBuilder.java @@ -24,9 +24,11 @@ package net.forwardfire.unitxc.config.builder; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.List; -import net.forwardfire.unitxc.converter.step.UnitXCTypeExponentConverterStep; +import net.forwardfire.unitxc.converter.step.UnitXCTypePowerOfTenConverterStep; import net.forwardfire.unitxc.model.UnitXCTypeModel; public class UnitXCTypeSIPrefixBuilder

extends AbstractUnitXCTypeBuilder> { @@ -50,7 +52,8 @@ public class UnitXCTypeSIPrefixBuilder

extends AbstractUnitXCTypeBuilder extends AbstractUnitXCTypeBuilder addCommonPrefix(UnitXCTypeSIPrefix prefix) { + public UnitXCTypeSIPrefixBuilder

addCommonSIPrefixes(UnitXCTypeSIPrefix[] prefixes) { + return make(t -> addCommonSIPrefixes(Arrays.asList(prefixes))); + } + + public UnitXCTypeSIPrefixBuilder

addCommonSIPrefixes(Collection prefixes) { + return make(t -> prefixes.forEach(prefix -> addCommonSIPrefix(prefix))); + } + + public UnitXCTypeSIPrefixBuilder

addCommonSIPrefix(UnitXCTypeSIPrefix prefix) { return make((v) -> commonSIPrefixes.add(prefix)); } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXConverterStepBuilder.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXConverterStepBuilder.java index e90b41e..e4660a9 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXConverterStepBuilder.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/config/builder/UnitXConverterStepBuilder.java @@ -30,16 +30,18 @@ import java.util.function.BiConsumer; import org.apache.commons.lang3.math.Fraction; import net.forwardfire.unitxc.converter.step.UnitXCTypeDevideConverterStep; -import net.forwardfire.unitxc.converter.step.UnitXCTypeExponentConverterStep; +import net.forwardfire.unitxc.converter.step.UnitXCTypePowerOfTenConverterStep; import net.forwardfire.unitxc.converter.step.UnitXCTypeMultiplyConverterStep; import net.forwardfire.unitxc.converter.step.UnitXCTypeMultiplyFractionConverterStep; import net.forwardfire.unitxc.converter.step.UnitXCTypeOffsetConverterStep; +import net.forwardfire.unitxc.converter.step.UnitXCTypePowerConverterStep; import net.forwardfire.unitxc.converter.step.UnitXConverterStep; -public class UnitXConverterStepBuilder

extends AbstractUnitXCBuilder,UnitXConverterStepBuilder

> { +public class UnitXConverterStepBuilder

> extends AbstractUnitXCBuilder,UnitXConverterStepBuilder

> { public UnitXConverterStepBuilder(P parent, BiConsumer> parentBuilder) { super(parent, new ArrayList<>(), parentBuilder); + this.getParent().getValue().getId(); } @Override @@ -47,36 +49,74 @@ public class UnitXConverterStepBuilder

extends AbstractUnitXCBuilder offset(double offset,boolean offsetPositive,String stepReason) { + return make(v -> v.add(new UnitXCTypeOffsetConverterStep(offset,offsetPositive,stepReason))); + } + public UnitXConverterStepBuilder

offsetUp(double offset,String stepReason) { + return offset(offset,true,stepReason); + } + public UnitXConverterStepBuilder

offsetDown(double offset,String stepReason) { + return offset(offset,false,stepReason); + } public UnitXConverterStepBuilder

offsetUp(double offset) { - return offset(offset,true); + return offsetUp(offset,createStepReason()); } public UnitXConverterStepBuilder

offsetDown(double offset) { - return offset(offset,false); - } - private UnitXConverterStepBuilder

offset(double offset,boolean offsetPositive) { - return make(v -> v.add(new UnitXCTypeOffsetConverterStep(offset,offsetPositive))); + return offsetDown(offset,createStepReason()); } + + public UnitXConverterStepBuilder

multiply(Fraction fraction,String stepReason) { + return make(v -> v.add(new UnitXCTypeMultiplyFractionConverterStep(fraction,stepReason))); + } + public UnitXConverterStepBuilder

multiply(int numerator,int denominator,String stepReason) { + return make(v -> v.add(new UnitXCTypeMultiplyFractionConverterStep(numerator,denominator,stepReason))); + } public UnitXConverterStepBuilder

multiply(Fraction fraction) { - return make(v -> v.add(new UnitXCTypeMultiplyFractionConverterStep(fraction))); + return multiply(fraction,createStepReason()); } public UnitXConverterStepBuilder

multiply(int numerator,int denominator) { - return make(v -> v.add(new UnitXCTypeMultiplyFractionConverterStep(numerator,denominator))); - } - public UnitXConverterStepBuilder

multiply(double factor) { - return make(v -> v.add(new UnitXCTypeMultiplyConverterStep(factor))); - } - public UnitXConverterStepBuilder

divide(double factor) { - return make(v -> v.add(new UnitXCTypeDevideConverterStep(factor))); + return multiply(numerator,denominator,createStepReason()); } - private UnitXConverterStepBuilder

exponent(int exponent,boolean rev) { - return make(v -> v.add(new UnitXCTypeExponentConverterStep(exponent,rev))); + public UnitXConverterStepBuilder

multiply(double factor,String stepReason) { + return make(v -> v.add(new UnitXCTypeMultiplyConverterStep(factor,stepReason))); } - public UnitXConverterStepBuilder

exponentUp(UnitXCTypeSIPrefix exponent) { - return exponent(exponent.getExponent(), false); + public UnitXConverterStepBuilder

divide(double factor,String stepReason) { + return make(v -> v.add(new UnitXCTypeDevideConverterStep(factor,stepReason))); } - public UnitXConverterStepBuilder

exponentDown(UnitXCTypeSIPrefix exponent) { - return exponent(exponent.getExponent(), true); + public UnitXConverterStepBuilder

multiply(double factor) { + return multiply(factor,createStepReason()); + } + public UnitXConverterStepBuilder

divide(double factor) { + return divide(factor,createStepReason()); + } + + public UnitXConverterStepBuilder

power(int exponent,String stepReason) { + return make(v -> v.add(new UnitXCTypePowerConverterStep(exponent,stepReason))); + } + public UnitXConverterStepBuilder

power(int exponent) { + return power(exponent,createStepReason()); + } + + + private UnitXConverterStepBuilder

powerOfTen(int exponent,boolean rev,String stepReason) { + return make(v -> v.add(new UnitXCTypePowerOfTenConverterStep(exponent,rev,stepReason))); + } + public UnitXConverterStepBuilder

power10Up(UnitXCTypeSIPrefix exponent,String stepReason) { + return powerOfTen(exponent.getExponent(), true,stepReason); + } + public UnitXConverterStepBuilder

power10Down(UnitXCTypeSIPrefix exponent,String stepReason) { + return powerOfTen(exponent.getExponent(), false,stepReason); + } + public UnitXConverterStepBuilder

power10Up(UnitXCTypeSIPrefix exponent) { + return power10Up(exponent,createStepReason()); + } + public UnitXConverterStepBuilder

power10Down(UnitXCTypeSIPrefix exponent) { + return power10Down(exponent,createStepReason()); } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/UnitXConverterEngine.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/UnitXConverterEngine.java index b41f546..492759e 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/UnitXConverterEngine.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/UnitXConverterEngine.java @@ -33,7 +33,7 @@ import net.forwardfire.unitxc.UnitXCManager; import net.forwardfire.unitxc.config.UnitXCConfig; import net.forwardfire.unitxc.converter.step.UnitXConverterStep; import net.forwardfire.unitxc.model.UnitXCTypeModel; -import net.forwardfire.unitxc.model.UnitXCTypeGroup; +import net.forwardfire.unitxc.model.UnitXCGroup; import net.forwardfire.unitxc.model.UnitXConverterResult; import net.forwardfire.unitxc.model.UnitXConverterResultModel; import net.forwardfire.unitxc.model.UnitXConverterResultStep; @@ -53,8 +53,8 @@ public final class UnitXConverterEngine { double startValue = value; List resultSteps = new ArrayList<>(); - UnitXCTypeGroup fromTypeGroup = manager.getUnitTypeGroup(fromType.getTypeGroupId()); - UnitXCTypeGroup toTypeGroup = manager.getUnitTypeGroup(toType.getTypeGroupId()); + UnitXCGroup fromTypeGroup = manager.getUnitGroup(fromType.getUnitGroupId()); + UnitXCGroup toTypeGroup = manager.getUnitGroup(toType.getUnitGroupId()); boolean fromTypeBase = fromTypeGroup.getBaseTypeId().equals(fromType.getId()); if (!fromTypeBase) { @@ -76,15 +76,19 @@ public final class UnitXConverterEngine { List steps = toBase?type.getToBaseConverterSteps():type.getFromBaseConverterSteps(); for (UnitXConverterStep step:steps) { valueOld = value; + long startTime = System.currentTimeMillis(); value = step.convert(value); - value = runRounding(resultSteps,value,valueOld); long convertTime = System.currentTimeMillis()-startTime; - resultSteps.add(new UnitXConverterResultStepModel(step.getName()+(toBase?"-toBase":"-fromBase")+" = "+step.getMathExpression(),valueOld,value,convertTime)); + resultSteps.add(new UnitXConverterResultStepModel(step.getStepName()+(toBase?"-toBase":"-fromBase")+" = "+step.getMathExpression(),valueOld,value,convertTime)); + + value = runRounding(resultSteps,value,valueOld); + } return value; } + // TODO: redo this private double runRounding(List resultSteps,double value,double valueOrg) { long startTime = System.currentTimeMillis(); String valueStr = Double.toString(value); diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/AbstractUnitXConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/AbstractUnitXConverterStep.java index 9080f24..1810cee 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/AbstractUnitXConverterStep.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/AbstractUnitXConverterStep.java @@ -23,17 +23,34 @@ package net.forwardfire.unitxc.converter.step; +import java.util.ArrayList; +import java.util.List; + import org.apache.commons.lang3.Validate; public abstract class AbstractUnitXConverterStep implements UnitXConverterStep { private final String name; + private final List stepReasons; - protected AbstractUnitXConverterStep(String name) { + protected AbstractUnitXConverterStep(String name,String stepReason) { this.name = Validate.notBlank(name); + this.stepReasons = new ArrayList<>(); + this.addStepReason(stepReason); } - public final String getName() { + @Override + public final String getStepName() { return name; } + + @Override + public final List getStepReasons() { + return stepReasons; + } + + @Override + public final void addStepReason(String stepReason) { + stepReasons.add(Validate.notBlank(stepReason)); + } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeDevideConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeDevideConverterStep.java index 6376375..e080bd1 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeDevideConverterStep.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeDevideConverterStep.java @@ -30,8 +30,8 @@ public class UnitXCTypeDevideConverterStep extends AbstractUnitXConverterStep { private final static String STEP_NAME = "Devide"; private final double factor; - public UnitXCTypeDevideConverterStep(double factor) { - super(STEP_NAME); + public UnitXCTypeDevideConverterStep(double factor,String stepReason) { + super(STEP_NAME,stepReason); this.factor = factor; Validate.isTrue(factor != 0); } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyConverterStep.java index e695cbd..c34296f 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyConverterStep.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyConverterStep.java @@ -28,8 +28,8 @@ public class UnitXCTypeMultiplyConverterStep extends AbstractUnitXConverterStep private final static String STEP_NAME = "Multiply"; private final double factor; - public UnitXCTypeMultiplyConverterStep(double factor) { - super(STEP_NAME); + public UnitXCTypeMultiplyConverterStep(double factor,String stepReason) { + super(STEP_NAME,stepReason); this.factor = factor; } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyFractionConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyFractionConverterStep.java index 3389326..49df728 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyFractionConverterStep.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeMultiplyFractionConverterStep.java @@ -32,12 +32,12 @@ public class UnitXCTypeMultiplyFractionConverterStep extends AbstractUnitXConver private final Fraction fraction; private final String fractionMath; - public UnitXCTypeMultiplyFractionConverterStep(int numerator,int denominator) { - this(Fraction.getFraction(numerator, denominator)); + public UnitXCTypeMultiplyFractionConverterStep(int numerator,int denominator,String stepReason) { + this(Fraction.getFraction(numerator, denominator),stepReason); } - public UnitXCTypeMultiplyFractionConverterStep(Fraction fraction) { - super(STEP_NAME); + public UnitXCTypeMultiplyFractionConverterStep(Fraction fraction,String stepReason) { + super(STEP_NAME,stepReason); this.fraction = Validate.notNull(fraction); this.fractionMath = String.format("*(%1s/%2s)", fraction.getNumerator(),fraction.getDenominator()); } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeOffsetConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeOffsetConverterStep.java index f31de73..dafba2a 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeOffsetConverterStep.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeOffsetConverterStep.java @@ -29,8 +29,8 @@ public class UnitXCTypeOffsetConverterStep extends AbstractUnitXConverterStep { private final double offset; private final boolean offsetPositive; - public UnitXCTypeOffsetConverterStep(double offset,boolean offsetPositive) { - super(STEP_NAME); + public UnitXCTypeOffsetConverterStep(double offset,boolean offsetPositive,String stepReason) { + super(STEP_NAME,stepReason); this.offset = offset; this.offsetPositive = offsetPositive; } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypePowerConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypePowerConverterStep.java new file mode 100644 index 0000000..581c97d --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypePowerConverterStep.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.converter.step; + +public class UnitXCTypePowerConverterStep extends AbstractUnitXConverterStep { + + private final static String STEP_NAME = "power"; + private final int exponent; + + public UnitXCTypePowerConverterStep(int exponent,String stepReason) { + super(STEP_NAME,stepReason); + this.exponent = exponent; + } + + @Override + public String getMathExpression() { + return "^"+exponent; + } + + @Override + public double convert(double value) { + return Math.pow(value, exponent); + } +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeExponentConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypePowerOfTenConverterStep.java similarity index 75% rename from ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeExponentConverterStep.java rename to ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypePowerOfTenConverterStep.java index bc4edd4..b229956 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypeExponentConverterStep.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXCTypePowerOfTenConverterStep.java @@ -23,29 +23,29 @@ package net.forwardfire.unitxc.converter.step; -public class UnitXCTypeExponentConverterStep extends AbstractUnitXConverterStep { +public class UnitXCTypePowerOfTenConverterStep extends AbstractUnitXConverterStep { - private final static String STEP_NAME = "Exponent"; - private final int factor; - private final int factorShift; - private final boolean factorReverse; + private final static String STEP_NAME = "power(10)"; + private final int exponent; + private final int exponentShift; + private final boolean exponentReverse; - public UnitXCTypeExponentConverterStep(int factor,boolean factorReverse) { - super(factor+STEP_NAME); - this.factor = factor; - this.factorReverse = factorReverse; - this.factorShift = factor<0?0-factor:factor; + public UnitXCTypePowerOfTenConverterStep(int factor,boolean factorReverse,String stepReason) { + super(STEP_NAME,stepReason); + this.exponent = factor; + this.exponentReverse = factorReverse; + this.exponentShift = factor<0?0-factor:factor; } @Override public String getMathExpression() { - return "*10^"+factor; + return "*10^"+exponent; } @Override public double convert(double value) { - for (int i=0;i0):factor>0); + for (int i=0;i0):exponent>0); } return value; } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXConverterStep.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXConverterStep.java index 40f5acb..355d8c9 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXConverterStep.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/converter/step/UnitXConverterStep.java @@ -23,9 +23,15 @@ package net.forwardfire.unitxc.converter.step; +import java.util.List; + public interface UnitXConverterStep { - String getName(); + String getStepName(); + + List getStepReasons(); + + void addStepReason(String stepReason); String getMathExpression(); diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeGroup.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroup.java similarity index 91% rename from ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeGroup.java rename to ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroup.java index aa00418..61ac32c 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeGroup.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroup.java @@ -23,7 +23,9 @@ package net.forwardfire.unitxc.model; -public interface UnitXCTypeGroup { +import java.util.Collection; + +public interface UnitXCGroup { String getId(); @@ -31,5 +33,9 @@ public interface UnitXCTypeGroup { String getDescription(); + UnitXCGroupType getType(); + String getBaseTypeId(); + + Collection getDerivedFromIds(); } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeGroupModel.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroupModel.java similarity index 75% rename from ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeGroupModel.java rename to ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroupModel.java index 61503cf..f3a210b 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeGroupModel.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroupModel.java @@ -23,36 +23,46 @@ package net.forwardfire.unitxc.model; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + import org.apache.commons.lang3.Validate; -public class UnitXCTypeGroupModel implements UnitXCTypeGroup { +public class UnitXCGroupModel implements UnitXCGroup { private String id; private String name; private String description; private String baseTypeId; + private UnitXCGroupType type; + private final List derivedFrom; - public UnitXCTypeGroupModel() { + public UnitXCGroupModel() { + derivedFrom = new ArrayList<>(); } - public UnitXCTypeGroupModel(String id,String name,String description,String baseTypeId) { + public UnitXCGroupModel(String id,String name,String description,String baseTypeId) { + this(); setId(id); setName(name); setDescription(description); setBaseTypeId(baseTypeId); } - public UnitXCTypeGroupModel validate() { + public UnitXCGroupModel validate() { Validate.notBlank(id,"The id is blank"); Validate.notBlank(name,"The name is blank"); Validate.notBlank(description,"The description is blank"); Validate.notBlank(baseTypeId,"The baseTypeId is blank"); + Validate.notNull(type,"The type is null"); return this; } /** * @return the id */ + @Override public String getId() { return id; } @@ -67,6 +77,7 @@ public class UnitXCTypeGroupModel implements UnitXCTypeGroup { /** * @return the name */ + @Override public String getName() { return name; } @@ -81,6 +92,7 @@ public class UnitXCTypeGroupModel implements UnitXCTypeGroup { /** * @return the description */ + @Override public String getDescription() { return description; } @@ -95,6 +107,7 @@ public class UnitXCTypeGroupModel implements UnitXCTypeGroup { /** * @return the baseTypeId */ + @Override public String getBaseTypeId() { return baseTypeId; } @@ -105,4 +118,28 @@ public class UnitXCTypeGroupModel implements UnitXCTypeGroup { public void setBaseTypeId(String baseTypeId) { this.baseTypeId = baseTypeId; } + + /** + * @return the type + */ + @Override + public UnitXCGroupType getType() { + return type; + } + + /** + * @param type the type to set + */ + public void setType(UnitXCGroupType type) { + this.type = type; + } + + @Override + public Collection getDerivedFromIds() { + return derivedFrom; + } + + public void addDerivedFrom(String id) { + derivedFrom.add(id); + } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroupType.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroupType.java new file mode 100644 index 0000000..43d67f1 --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCGroupType.java @@ -0,0 +1,7 @@ +package net.forwardfire.unitxc.model; + +public enum UnitXCGroupType { + + SI_BASE, + SI_DERIVED +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCType.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCType.java index a21e96b..9bfeec5 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCType.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCType.java @@ -31,7 +31,9 @@ public interface UnitXCType { String getName(); - String getTypeGroupId(); + Collection getNameAliases(); + + String getUnitGroupId(); Collection getTypeFlags(); } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeModel.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeModel.java index 5da925f..0a30b8a 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeModel.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/model/UnitXCTypeModel.java @@ -35,13 +35,15 @@ public class UnitXCTypeModel implements UnitXCType { private String id; private String name; - private String typeGroupId; + private String unitGroupId; private final List toBaseConverterSteps; private final List fromBaseConverterSteps; private final List typeFlags; + private final List nameAliases; public UnitXCTypeModel() { typeFlags = new ArrayList<>(); + nameAliases = new ArrayList<>(); toBaseConverterSteps = new ArrayList<>(); fromBaseConverterSteps = new ArrayList<>(); } @@ -49,13 +51,14 @@ public class UnitXCTypeModel implements UnitXCType { public UnitXCTypeModel validate() { Validate.notBlank(id,"The id is blank"); Validate.notBlank(name,"The name is blank"); - Validate.notBlank(typeGroupId,"The typeGroupId is blank"); + Validate.notBlank(unitGroupId,"The unitGroupId is blank"); return this; } /** * @return the id */ + @Override public String getId() { return id; } @@ -70,6 +73,7 @@ public class UnitXCTypeModel implements UnitXCType { /** * @return the name */ + @Override public String getName() { return name; } @@ -82,17 +86,18 @@ public class UnitXCTypeModel implements UnitXCType { } /** - * @return the typeGroupId + * @return the unitGroupId */ - public String getTypeGroupId() { - return typeGroupId; + @Override + public String getUnitGroupId() { + return unitGroupId; } /** - * @param typeGroupId the typeGroupId to set + * @param unitGroupId the unitGroupId to set */ - public void setTypeGroupId(String typeGroupId) { - this.typeGroupId = typeGroupId; + public void setUnitGroupId(String unitGroupId) { + this.unitGroupId = unitGroupId; } public List getToBaseConverterSteps() { @@ -119,4 +124,13 @@ public class UnitXCTypeModel implements UnitXCType { public void addTypeFlag(String flag) { typeFlags.add(flag); } + + @Override + public Collection getNameAliases() { + return nameAliases; + } + + public void addNameAlias(String nameAlias) { + nameAliases.add(nameAlias); + } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleAmountOfSubstance.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleAmountOfSubstance.java index e49a168..6ae206d 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleAmountOfSubstance.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleAmountOfSubstance.java @@ -23,6 +23,9 @@ package net.forwardfire.unitxc.module; +import static net.forwardfire.unitxc.config.UnitXCConfigModule.buildFlag; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_BASE; + import net.forwardfire.unitxc.config.UnitXCConfigModule; import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; import net.forwardfire.unitxc.config.builder.UnitXCTypeSIPrefix; @@ -33,16 +36,17 @@ public class UnitXCModuleAmountOfSubstance implements UnitXCConfigModule { public static final String GROUP_DESCRIPTION = "The mole is the amount of substance of a system which contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12."; public static final String TYPE_MOLE_ID = "mol"; public static final String TYPE_MOLE_NAME = "mole"; - public static final String TYPE_MOLE_FLAG = (GROUP_ID+"_"+TYPE_MOLE_NAME).toUpperCase(); + public static final String TYPE_MOLE_FLAG = buildFlag(GROUP_ID,TYPE_MOLE_NAME); public static final String TYPE_POUND_MOLE_ID = "lbmol"; public static final String TYPE_POUND_MOLE_NAME = "pound-mole"; - public static final String TYPE_POUND_MOLE_FLAG = (GROUP_ID+"_"+TYPE_POUND_MOLE_NAME).toUpperCase(); + public static final String TYPE_POUND_MOLE_FLAG = buildFlag(GROUP_ID,TYPE_POUND_MOLE_NAME); private static final double TYPE_POUND_MOLE_FACTOR = 453.59237; @Override public void configModule(UnitXCConfigBuilder builder) { - builder.createUnitTypeGroup() + builder.createUnitGroup() + .setType( SI_BASE) .setId( GROUP_ID) .setName( TYPE_MOLE_NAME) .setDescription ( GROUP_DESCRIPTION) @@ -51,15 +55,16 @@ public class UnitXCModuleAmountOfSubstance implements UnitXCConfigModule { .setId( TYPE_MOLE_ID) .setName( TYPE_MOLE_NAME) .addTypeFlag( TYPE_MOLE_FLAG) - .addCommonPrefix(UnitXCTypeSIPrefix.MILLI) - .addCommonPrefix(UnitXCTypeSIPrefix.MICRO) - .addCommonPrefix(UnitXCTypeSIPrefix.NANO) - .addCommonPrefix(UnitXCTypeSIPrefix.PICO) - .addCommonPrefix(UnitXCTypeSIPrefix.FEMTO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MILLI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MICRO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.NANO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.PICO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.FEMTO) .build() .createUnitType() .setId( TYPE_POUND_MOLE_ID) .setName( TYPE_POUND_MOLE_NAME) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) .createToBaseConverterSteps().multiply(TYPE_POUND_MOLE_FACTOR).build() .createFromBaseConverterSteps().divide(TYPE_POUND_MOLE_FACTOR).build() .build() diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleArea.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleArea.java new file mode 100644 index 0000000..9ae9631 --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleArea.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.module; + +import static net.forwardfire.unitxc.config.builder.UnitXCNumberTypeSetting.toSuperScript; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_DERIVED; + +import net.forwardfire.unitxc.config.UnitXCConfigModule; +import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; + +public class UnitXCModuleArea implements UnitXCConfigModule { + + private static final int UNIT_COMPOUND_EXPONENT = 2; + private static final String UNIT_ID_POSTFIX = toSuperScript(UNIT_COMPOUND_EXPONENT); + private static final String UNIT_NAME_PREFIX = "square "; + + public static final String GROUP_ID = "area"; + public static final String GROUP_NAME = UNIT_NAME_PREFIX+UnitXCModuleLength.TYPE_METRE_NAME; + public static final String GROUP_DESCRIPTION = "It is defined as the area of a square whose sides measure exactly one metre. The square metre is derived from the SI base unit of the metre,"; + public static final String GROUP_BASE_TYPE_ID = UnitXCModuleLength.TYPE_METRE_ID+UNIT_ID_POSTFIX; + + @Override + public void configModule(UnitXCConfigBuilder builder) { + builder.createUnitGroup() + .setType( SI_DERIVED) + .setId( GROUP_ID) + .setName( GROUP_NAME) + .setDescription ( GROUP_DESCRIPTION) + .setBaseTypeId( GROUP_BASE_TYPE_ID) + .createCompoundExponentUnitTypes(UnitXCModuleLength.GROUP_ID, UNIT_COMPOUND_EXPONENT) + .setUnitIdPostfix(UNIT_ID_POSTFIX) + .setUnitNamePrefix(UNIT_NAME_PREFIX) + .build() + .build() + ; + } +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleElectricCurrent.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleElectricCurrent.java index 58bb2a0..1979b84 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleElectricCurrent.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleElectricCurrent.java @@ -23,6 +23,9 @@ package net.forwardfire.unitxc.module; +import static net.forwardfire.unitxc.config.UnitXCConfigModule.buildFlag; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_BASE; + import net.forwardfire.unitxc.config.UnitXCConfigModule; import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; import net.forwardfire.unitxc.config.builder.UnitXCTypeSIPrefix; @@ -33,11 +36,12 @@ public class UnitXCModuleElectricCurrent implements UnitXCConfigModule { public static final String GROUP_DESCRIPTION = "The ampere is a measure of the amount of electric charge passing a point in an electric circuit per unit time, with 6.241×1018 electrons (or one coulomb) per second constituting one ampere."; public static final String TYPE_AMPERE_ID = "A"; public static final String TYPE_AMPERE_NAME = "ampere"; - public static final String TYPE_AMPERE_FLAG = (GROUP_ID+"_"+TYPE_AMPERE_NAME).toUpperCase(); + public static final String TYPE_AMPERE_FLAG = buildFlag(GROUP_ID,TYPE_AMPERE_NAME); @Override public void configModule(UnitXCConfigBuilder builder) { - builder.createUnitTypeGroup() + builder.createUnitGroup() + .setType( SI_BASE) .setId( GROUP_ID) .setName( TYPE_AMPERE_NAME) .setDescription ( GROUP_DESCRIPTION) @@ -46,11 +50,11 @@ public class UnitXCModuleElectricCurrent implements UnitXCConfigModule { .setId( TYPE_AMPERE_ID) .setName( TYPE_AMPERE_NAME) .addTypeFlag( TYPE_AMPERE_FLAG) - .addCommonPrefix(UnitXCTypeSIPrefix.MEGA) - .addCommonPrefix(UnitXCTypeSIPrefix.KILO) - .addCommonPrefix(UnitXCTypeSIPrefix.MILLI) - .addCommonPrefix(UnitXCTypeSIPrefix.MICRO) - .addCommonPrefix(UnitXCTypeSIPrefix.NANO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MEGA) + .addCommonSIPrefix(UnitXCTypeSIPrefix.KILO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MILLI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MICRO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.NANO) .build() .build() ; diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLength.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLength.java index f7515f5..8698ea5 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLength.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLength.java @@ -23,6 +23,9 @@ package net.forwardfire.unitxc.module; +import static net.forwardfire.unitxc.config.UnitXCConfigModule.buildFlag; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_BASE; + import net.forwardfire.unitxc.config.UnitXCConfigModule; import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; import net.forwardfire.unitxc.config.builder.UnitXCTypeSIPrefix; @@ -31,82 +34,170 @@ public class UnitXCModuleLength implements UnitXCConfigModule { public static final String GROUP_ID = "length"; public static final String GROUP_DESCRIPTION = "The metre is the length of the path travelled by light in vacuum during a time interval of 1/299792458 of a second."; - public static final String TYPE_METER_ID = "m"; - public static final String TYPE_METER_NAME = "meter"; - public static final String TYPE_METER_FLAG = (GROUP_ID+"_"+TYPE_METER_NAME).toUpperCase(); - //public static final String TYPE_METER_ALIAS = "metre"; + public static final String TYPE_METRE_ID = "m"; + public static final String TYPE_METRE_NAME = "metre"; + public static final String TYPE_METRE_NAME_METER = "meter"; + public static final String TYPE_METRE_FLAG = buildFlag(GROUP_ID,TYPE_METRE_NAME); public static final String TYPE_INCH_ID = "in"; public static final String TYPE_INCH_NAME = "inch"; - public static final String TYPE_INCH_FLAG = (GROUP_ID+"_"+TYPE_INCH_NAME).toUpperCase(); + public static final String TYPE_INCH_FLAG = buildFlag(GROUP_ID,TYPE_INCH_NAME); private static final double TYPE_INCH_FACTOR = 25.4; public static final String TYPE_LINK_ID = "li"; public static final String TYPE_LINK_NAME = "link"; - public static final String TYPE_LINK_FLAG = (GROUP_ID+"_"+TYPE_LINK_NAME).toUpperCase(); + public static final String TYPE_LINK_FLAG = buildFlag(GROUP_ID,TYPE_LINK_NAME); private static final double TYPE_LINK_FACTOR = 201.1; public static final String TYPE_FOOT_ID = "ft"; public static final String TYPE_FOOT_NAME = "foot"; - public static final String TYPE_FOOT_FLAG = (GROUP_ID+"_"+TYPE_FOOT_NAME).toUpperCase(); + public static final String TYPE_FOOT_FLAG = buildFlag(GROUP_ID,TYPE_FOOT_NAME); private static final double TYPE_FOOT_FACTOR = 304.8; public static final String TYPE_YARD_ID = "yd"; public static final String TYPE_YARD_NAME = "yard"; - public static final String TYPE_YARD_FLAG = (GROUP_ID+"_"+TYPE_YARD_NAME).toUpperCase(); + public static final String TYPE_YARD_FLAG = buildFlag(GROUP_ID,TYPE_YARD_NAME); private static final double TYPE_YARD_FACTOR = 0.9144; + public static final String TYPE_ROD_ID = "rd"; + public static final String TYPE_ROD_NAME = "rod"; + public static final String TYPE_ROD_FLAG = buildFlag(GROUP_ID,TYPE_ROD_NAME); + private static final double TYPE_ROD_FACTOR = 5.029; + + public static final String TYPE_CHAIN_ID = "ch"; + public static final String TYPE_CHAIN_NAME = "chain"; + public static final String TYPE_CHAIN_FLAG = buildFlag(GROUP_ID,TYPE_CHAIN_NAME); + private static final double TYPE_CHAIN_FACTOR = 20.117; + + public static final String TYPE_FURLONG_ID = "fur"; + public static final String TYPE_FURLONG_NAME = "furlong"; + public static final String TYPE_FURLONG_FLAG = buildFlag(GROUP_ID,TYPE_FURLONG_NAME); + private static final double TYPE_FURLONG_FACTOR = 201.17; + + public static final String TYPE_MILE_ID = "mi"; + public static final String TYPE_MILE_NAME = "mile"; + public static final String TYPE_MILE_FLAG = buildFlag(GROUP_ID,TYPE_MILE_NAME); + private static final double TYPE_MILE_FACTOR = 1609.344; + + public static final String TYPE_MILE_US_ID = "us-mi"; + public static final String TYPE_MILE_US_NAME = "us-mile"; + public static final String TYPE_MILE_US_FLAG = buildFlag(GROUP_ID,TYPE_MILE_US_NAME); + private static final double TYPE_MILE_US_FACTOR = 1609.34721869; + + public static final String TYPE_MILE_NAUTICAL_ID = "nau-mi"; + public static final String TYPE_MILE_NAUTICAL_NAME = "nautical-mile"; + public static final String TYPE_MILE_NAUTICAL_FLAG = buildFlag(GROUP_ID,TYPE_MILE_NAUTICAL_NAME); + private static final double TYPE_MILE_NAUTICAL_FACTOR = 1852; + @Override public void configModule(UnitXCConfigBuilder builder) { - builder.createUnitTypeGroup() + builder.createUnitGroup() + .setType( SI_BASE) .setId( GROUP_ID) - .setName( TYPE_METER_NAME) + .setName( TYPE_METRE_NAME) .setDescription ( GROUP_DESCRIPTION) - .setBaseTypeId( TYPE_METER_ID) + .setBaseTypeId( TYPE_METRE_ID) .createSIUnitTypes() - .setId( TYPE_METER_ID) - .setName( TYPE_METER_NAME) - .addTypeFlag( TYPE_METER_FLAG) + .setId( TYPE_METRE_ID) + .setName( TYPE_METRE_NAME) + .addNameAlias(TYPE_METRE_NAME_METER) + .addTypeFlag( TYPE_METRE_FLAG) + .addCommonSIPrefix(UnitXCTypeSIPrefix.KILO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.HECTO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.DECA) + .addCommonSIPrefix(UnitXCTypeSIPrefix.DECI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.CENTI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MILLI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MICRO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.NANO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.PICO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.FEMTO) .build() .createSIUnitTypes() .setId( TYPE_INCH_ID) .setName( TYPE_INCH_NAME) .addTypeFlag( TYPE_INCH_FLAG) - .createToBaseConverterSteps().multiply(TYPE_INCH_FACTOR).exponentDown(UnitXCTypeSIPrefix.MILLI).build() - .createFromBaseConverterSteps().exponentUp(UnitXCTypeSIPrefix.MILLI).divide(TYPE_INCH_FACTOR).build() + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_INCH_FACTOR).power10Down(UnitXCTypeSIPrefix.MILLI).build() + .createFromBaseConverterSteps().power10Up(UnitXCTypeSIPrefix.MILLI).divide(TYPE_INCH_FACTOR).build() .build() .createSIUnitTypes() .setId( TYPE_LINK_ID) .setName( TYPE_LINK_NAME) .addTypeFlag( TYPE_LINK_FLAG) - .createToBaseConverterSteps().multiply(TYPE_LINK_FACTOR).exponentDown(UnitXCTypeSIPrefix.MILLI).build() - .createFromBaseConverterSteps().exponentUp(UnitXCTypeSIPrefix.MILLI).divide(TYPE_LINK_FACTOR).build() + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL_EXTRA) + .createToBaseConverterSteps().multiply(TYPE_LINK_FACTOR).power10Down(UnitXCTypeSIPrefix.MILLI).build() + .createFromBaseConverterSteps().power10Up(UnitXCTypeSIPrefix.MILLI).divide(TYPE_LINK_FACTOR).build() .build() .createSIUnitTypes() .setId( TYPE_FOOT_ID) .setName( TYPE_FOOT_NAME) .addTypeFlag( TYPE_FOOT_FLAG) - .createToBaseConverterSteps().multiply(TYPE_FOOT_FACTOR).exponentDown(UnitXCTypeSIPrefix.MILLI).build() - .createFromBaseConverterSteps().exponentUp(UnitXCTypeSIPrefix.MILLI).divide(TYPE_FOOT_FACTOR).build() + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_FOOT_FACTOR).power10Down(UnitXCTypeSIPrefix.MILLI).build() + .createFromBaseConverterSteps().power10Up(UnitXCTypeSIPrefix.MILLI).divide(TYPE_FOOT_FACTOR).build() .build() .createSIUnitTypes() .setId( TYPE_YARD_ID) .setName( TYPE_YARD_NAME) .addTypeFlag( TYPE_YARD_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) .createToBaseConverterSteps().multiply(TYPE_YARD_FACTOR).build() .createFromBaseConverterSteps().divide(TYPE_YARD_FACTOR).build() .build() + .createSIUnitTypes() + .setId( TYPE_ROD_ID) + .setName( TYPE_ROD_NAME) + .addTypeFlag( TYPE_ROD_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL_EXTRA) + .createToBaseConverterSteps().multiply(TYPE_ROD_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_ROD_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_CHAIN_ID) + .setName( TYPE_CHAIN_NAME) + .addTypeFlag( TYPE_CHAIN_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL_EXTRA) + .createToBaseConverterSteps().multiply(TYPE_CHAIN_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_CHAIN_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_FURLONG_ID) + .setName( TYPE_FURLONG_NAME) + .addTypeFlag( TYPE_FURLONG_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL_EXTRA) + .createToBaseConverterSteps().multiply(TYPE_FURLONG_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_FURLONG_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_MILE_ID) + .setName( TYPE_MILE_NAME) + .addTypeFlag( TYPE_MILE_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_MILE_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_MILE_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_MILE_US_ID) + .setName( TYPE_MILE_US_NAME) + .addTypeFlag( TYPE_MILE_US_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_MILE_US_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_MILE_US_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_MILE_NAUTICAL_ID) + .setName( TYPE_MILE_NAUTICAL_NAME) + .addTypeFlag( TYPE_MILE_NAUTICAL_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_MILE_NAUTICAL_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_MILE_NAUTICAL_FACTOR).build() + .build() .build() ; - - -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"in", -3, 25.4 , "inch", OPT_TYPE_IMPERIAL)); -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"li", -3, 201.1 , "link", OPT_TYPE_IMPERIAL_EXTRA)); -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"ft", -3, 304.8 , "foot", OPT_TYPE_IMPERIAL)); -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"yd", 0, 0.9144 , "yard", OPT_TYPE_IMPERIAL)); -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"rd", 0, 5.029 , "rod", OPT_TYPE_IMPERIAL_EXTRA)); -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"ch", 0, 20.117 , "chain", OPT_TYPE_IMPERIAL_EXTRA)); -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"fur", 0, 201.17 , "furlong", OPT_TYPE_IMPERIAL_EXTRA)); -// um.addUnitType(createType(UNIT_GROUP_LENGTH,"mi", 0, 1609.3 , "mile", OPT_TYPE_IMPERIAL)); } } diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLuminousIntensity.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLuminousIntensity.java index c786b40..62215ba 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLuminousIntensity.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleLuminousIntensity.java @@ -23,6 +23,9 @@ package net.forwardfire.unitxc.module; +import static net.forwardfire.unitxc.config.UnitXCConfigModule.buildFlag; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_BASE; + import net.forwardfire.unitxc.config.UnitXCConfigModule; import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; @@ -32,11 +35,12 @@ public class UnitXCModuleLuminousIntensity implements UnitXCConfigModule { public static final String GROUP_DESCRIPTION = "The candela is the luminous intensity, in a given direction, of a source that emits monochromatic radiation of frequency 540×1012 hertz and that has a radiant intensity in that direction of 1/683 watt per steradian."; public static final String TYPE_CANDELA_ID = "cd"; public static final String TYPE_CANDELA_NAME = "candela"; - public static final String TYPE_CANDELA_FLAG = (GROUP_ID+"_"+TYPE_CANDELA_NAME).toUpperCase(); + public static final String TYPE_CANDELA_FLAG = buildFlag(GROUP_ID,TYPE_CANDELA_NAME); @Override public void configModule(UnitXCConfigBuilder builder) { - builder.createUnitTypeGroup() + builder.createUnitGroup() + .setType( SI_BASE) .setId( GROUP_ID) .setName( TYPE_CANDELA_NAME) .setDescription ( GROUP_DESCRIPTION) diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleMass.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleMass.java new file mode 100644 index 0000000..c406594 --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleMass.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.module; + +import static net.forwardfire.unitxc.config.UnitXCConfigModule.buildFlag; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_BASE; + +import net.forwardfire.unitxc.config.UnitXCConfigModule; +import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; +import net.forwardfire.unitxc.config.builder.UnitXCTypeSIPrefix; + +public class UnitXCModuleMass implements UnitXCConfigModule { + + public static final String GROUP_ID = "mass"; + public static final String GROUP_NAME = "kilogram"; + public static final String GROUP_DESCRIPTION = "The kilogram is the unit of mass; it is equal to the mass of the international prototype of the kilogram."; + public static final String TYPE_GRAM_ID = "g"; + public static final String TYPE_GRAM_NAME = "gram"; + public static final String TYPE_GRAM_FLAG = buildFlag(GROUP_ID,TYPE_GRAM_NAME); + + public static final String TYPE_GRAIN_ID = "gr"; + public static final String TYPE_GRAIN_NAME = "grain"; + public static final String TYPE_GRAIN_FLAG = buildFlag(GROUP_ID,TYPE_GRAIN_NAME); + private static final double TYPE_GRAIN_FACTOR = 64.80; + + public static final String TYPE_DRAM_ID = "dr"; + public static final String TYPE_DRAM_NAME = "dram"; + public static final String TYPE_DRAM_FLAG = buildFlag(GROUP_ID,TYPE_DRAM_NAME); + private static final double TYPE_DRAM_FACTOR = 1.772; + + public static final String TYPE_OUNCE_ID = "oz"; + public static final String TYPE_OUNCE_NAME = "ounce"; + public static final String TYPE_OUNCE_FLAG = buildFlag(GROUP_ID,TYPE_OUNCE_NAME); + private static final double TYPE_OUNCE_FACTOR = 28.35; + + public static final String TYPE_POUND_ID = "lb"; + public static final String TYPE_POUND_NAME = "pound"; + public static final String TYPE_POUND_FLAG = buildFlag(GROUP_ID,TYPE_POUND_NAME); + private static final double TYPE_POUND_FACTOR = 453.6; + + public static final String TYPE_STONE_ID = "st"; + public static final String TYPE_STONE_NAME = "stone"; + public static final String TYPE_STONE_FLAG = buildFlag(GROUP_ID,TYPE_STONE_NAME); + private static final double TYPE_STONE_FACTOR = 6.350; + + @Override + public void configModule(UnitXCConfigBuilder builder) { + builder.createUnitGroup() + .setType( SI_BASE) + .setId( GROUP_ID) + .setName( GROUP_NAME) + .setDescription ( GROUP_DESCRIPTION) + .setBaseTypeId( TYPE_GRAM_ID) + .createSIUnitTypes() + .setId( TYPE_GRAM_ID) + .setName( TYPE_GRAM_NAME) + .addTypeFlag( TYPE_GRAM_FLAG) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MEGA) + .addCommonSIPrefix(UnitXCTypeSIPrefix.KILO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.HECTO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.DECI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.DECA) + .addCommonSIPrefix(UnitXCTypeSIPrefix.CENTI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MILLI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MICRO) + .build() + .createSIUnitTypes() + .setId( TYPE_GRAIN_ID) + .setName( TYPE_GRAIN_NAME) + .addTypeFlag( TYPE_GRAIN_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_GRAIN_FACTOR).power10Down(UnitXCTypeSIPrefix.MILLI).build() + .createFromBaseConverterSteps().power10Up(UnitXCTypeSIPrefix.MILLI).divide(TYPE_GRAIN_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_DRAM_ID) + .setName( TYPE_DRAM_NAME) + .addTypeFlag( TYPE_DRAM_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL_EXTRA) + .createToBaseConverterSteps().multiply(TYPE_DRAM_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_DRAM_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_OUNCE_ID) + .setName( TYPE_OUNCE_NAME) + .addTypeFlag( TYPE_OUNCE_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_OUNCE_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_OUNCE_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_POUND_ID) + .setName( TYPE_POUND_NAME) + .addTypeFlag( TYPE_POUND_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .createToBaseConverterSteps().multiply(TYPE_POUND_FACTOR).build() + .createFromBaseConverterSteps().divide(TYPE_POUND_FACTOR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_STONE_ID) + .setName( TYPE_STONE_NAME) + .addTypeFlag( TYPE_STONE_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL_EXTRA) + .createToBaseConverterSteps().multiply(TYPE_STONE_FACTOR).power10Up(UnitXCTypeSIPrefix.MILLI).build() + .createFromBaseConverterSteps().power10Down(UnitXCTypeSIPrefix.MILLI).divide(TYPE_STONE_FACTOR).build() + .build() + .build() + ; + } +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleTemperature.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleTemperature.java index 953913f..b0f7fbd 100644 --- a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleTemperature.java +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleTemperature.java @@ -26,6 +26,9 @@ package net.forwardfire.unitxc.module; import net.forwardfire.unitxc.config.UnitXCConfigModule; import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; +import static net.forwardfire.unitxc.config.UnitXCConfigModule.buildFlag; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_BASE; + import org.apache.commons.lang3.math.Fraction; public class UnitXCModuleTemperature implements UnitXCConfigModule { @@ -35,32 +38,34 @@ public class UnitXCModuleTemperature implements UnitXCConfigModule { public static final String TYPE_KELVIN_ID = "K"; public static final String TYPE_KELVIN_NAME = "kelvin"; - public static final String TYPE_KELVIN_FLAG = (GROUP_ID+"_"+TYPE_KELVIN_NAME).toUpperCase(); + public static final String TYPE_KELVIN_FLAG = buildFlag(GROUP_ID,TYPE_KELVIN_NAME); public static final String TYPE_CELSIUS_ID = "°C"; public static final String TYPE_CELSIUS_NAME = "celsius"; - public static final String TYPE_CELSIUS_FLAG = (GROUP_ID+"_"+TYPE_CELSIUS_NAME).toUpperCase(); + public static final String TYPE_CELSIUS_FLAG = buildFlag(GROUP_ID,TYPE_CELSIUS_NAME); private static final double TYPE_CELSIUS_OFFSET = 273.15; public static final String TYPE_FAHRENHEIT_ID = "°F"; public static final String TYPE_FAHRENHEIT_NAME = "fahrenheit"; - public static final String TYPE_FAHRENHEIT_FLAG = (GROUP_ID+"_"+TYPE_FAHRENHEIT_NAME).toUpperCase(); + public static final String TYPE_FAHRENHEIT_FLAG = buildFlag(GROUP_ID,TYPE_FAHRENHEIT_NAME); private static final double TYPE_FAHRENHEIT_OFFSET = 459.67; private static final Fraction TYPE_FAHRENHEIT_FRACTION = Fraction.getFraction(5,9); public static final String TYPE_RANKINE_ID = "°R"; public static final String TYPE_RANKINE_NAME = "rankine"; - public static final String TYPE_RANKINE_FLAG = (GROUP_ID+"_"+TYPE_RANKINE_NAME).toUpperCase(); + public static final String TYPE_RANKINE_FLAG = buildFlag(GROUP_ID,TYPE_RANKINE_NAME); public static final String TYPE_ROMER_ID = "Rø"; public static final String TYPE_ROMER_NAME = "rømer"; - public static final String TYPE_ROMER_FLAG = GROUP_ID.toUpperCase()+"_ROMER"; + public static final String TYPE_ROMER_NAME_ALIAS = "romer"; + public static final String TYPE_ROMER_FLAG = buildFlag(GROUP_ID,TYPE_ROMER_NAME_ALIAS); private static final Fraction TYPE_ROMER_FRACTION = Fraction.getFraction(40,21); private static final double TYPE_ROMER_FRACTION_OFFSET = 7.5; @Override public void configModule(UnitXCConfigBuilder builder) { - builder.createUnitTypeGroup() + builder.createUnitGroup() + .setType( SI_BASE) .setId( GROUP_ID) .setName( TYPE_KELVIN_NAME) .setDescription( GROUP_DESCRIPTION) @@ -81,6 +86,7 @@ public class UnitXCModuleTemperature implements UnitXCConfigModule { .setId( TYPE_FAHRENHEIT_ID) .setName( TYPE_FAHRENHEIT_NAME) .addTypeFlag( TYPE_FAHRENHEIT_FLAG) + .addTypeFlag( UnitXCConfigBuilder.TYPE_FLAG_IMPERIAL) .createToBaseConverterSteps() .offsetUp(TYPE_FAHRENHEIT_OFFSET) .multiply(TYPE_FAHRENHEIT_FRACTION) @@ -100,6 +106,7 @@ public class UnitXCModuleTemperature implements UnitXCConfigModule { .createSIUnitTypes() .setId( TYPE_ROMER_ID) .setName( TYPE_ROMER_NAME) + .addNameAlias(TYPE_ROMER_NAME_ALIAS) .addTypeFlag( TYPE_ROMER_FLAG) .createToBaseConverterSteps() .offsetUp(TYPE_CELSIUS_OFFSET) diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleTime.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleTime.java new file mode 100644 index 0000000..3e9c534 --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleTime.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.module; + +import static net.forwardfire.unitxc.config.UnitXCConfigModule.buildFlag; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_BASE; + +import net.forwardfire.unitxc.config.UnitXCConfigModule; +import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; +import net.forwardfire.unitxc.config.builder.UnitXCTypeSIPrefix; + +public class UnitXCModuleTime implements UnitXCConfigModule { + + public static final String GROUP_ID = "time"; + public static final String GROUP_DESCRIPTION = "The second is the duration of 9192631770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the caesium 133 atom."; + public static final String TYPE_SECOND_ID = "s"; + public static final String TYPE_SECOND_NAME = "second"; + public static final String TYPE_SECOND_NAMES = TYPE_SECOND_NAME+TYPE_SECOND_ID; + public static final String TYPE_SECOND_FLAG = buildFlag(GROUP_ID,TYPE_SECOND_NAME); + + private static final double TIME_EARTH_MINUTE = 60; + private static final double TIME_EARTH_HOUR = TIME_EARTH_MINUTE*60; + private static final double TIME_EARTH_DAY = TIME_EARTH_HOUR*24; + private static final double TIME_EARTH_WEEK = TIME_EARTH_DAY*7; + private static final double TIME_EARTH_YEAR = 31557600; + // related to the rotating earth, or change to be 794 243 384 928 000 hyperfine oscillations + + public static final String TYPE_MINUTE_NAME = "minute"; + public static final String TYPE_MINUTE_FLAG = buildFlag(GROUP_ID,TYPE_MINUTE_NAME); + public static final String TYPE_HOUR_NAME = "hour"; + public static final String TYPE_HOUR_FLAG = buildFlag(GROUP_ID,TYPE_HOUR_NAME); + public static final String TYPE_DAY_NAME = "day"; + public static final String TYPE_DAY_FLAG = buildFlag(GROUP_ID,TYPE_DAY_NAME); + public static final String TYPE_WEEK_NAME = "week"; + public static final String TYPE_WEEK_FLAG = buildFlag(GROUP_ID,TYPE_WEEK_NAME); + public static final String TYPE_YEAR_NAME = "year"; + public static final String TYPE_YEAR_FLAG = buildFlag(GROUP_ID,TYPE_YEAR_NAME); + + @Override + public void configModule(UnitXCConfigBuilder builder) { + builder.createUnitGroup() + .setType( SI_BASE) + .setId( GROUP_ID) + .setName( TYPE_SECOND_NAME) + .setDescription ( GROUP_DESCRIPTION) + .setBaseTypeId( TYPE_SECOND_ID) + .createSIUnitTypes() + .setId( TYPE_SECOND_ID) + .setName( TYPE_SECOND_NAME) + .addTypeFlag( TYPE_SECOND_FLAG) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MILLI) + .addCommonSIPrefix(UnitXCTypeSIPrefix.MICRO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.NANO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.PICO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.FEMTO) + .addCommonSIPrefix(UnitXCTypeSIPrefix.ATTO) + .build() + .createSIUnitTypes() + .setId( TYPE_MINUTE_NAME) + .setName( TYPE_MINUTE_NAME) + .addTypeFlag( TYPE_MINUTE_FLAG) + .createToBaseConverterSteps().multiply(TIME_EARTH_MINUTE).build() + .createFromBaseConverterSteps().divide(TIME_EARTH_MINUTE).build() + .build() + .createSIUnitTypes() + .setId( TYPE_HOUR_NAME) + .setName( TYPE_HOUR_NAME) + .addTypeFlag( TYPE_HOUR_FLAG) + .createToBaseConverterSteps().multiply(TIME_EARTH_HOUR).build() + .createFromBaseConverterSteps().divide(TIME_EARTH_HOUR).build() + .build() + .createSIUnitTypes() + .setId( TYPE_DAY_NAME) + .setName( TYPE_DAY_NAME) + .addTypeFlag( TYPE_DAY_FLAG) + .createToBaseConverterSteps().multiply(TIME_EARTH_DAY).build() + .createFromBaseConverterSteps().divide(TIME_EARTH_DAY).build() + .build() + .createSIUnitTypes() + .setId( TYPE_WEEK_NAME) + .setName( TYPE_WEEK_NAME) + .addTypeFlag( TYPE_WEEK_FLAG) + .createToBaseConverterSteps().multiply(TIME_EARTH_WEEK).build() + .createFromBaseConverterSteps().divide(TIME_EARTH_WEEK).build() + .build() + .createSIUnitTypes() + .setId( TYPE_YEAR_NAME) + .setName( TYPE_YEAR_NAME) + .addTypeFlag( TYPE_YEAR_FLAG) + .createToBaseConverterSteps().multiply(TIME_EARTH_YEAR).build() + .createFromBaseConverterSteps().divide(TIME_EARTH_YEAR).build() + .build() + .build() + ; + } +} diff --git a/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleVolume.java b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleVolume.java new file mode 100644 index 0000000..a482d15 --- /dev/null +++ b/ff-unitxc-converter/src/main/java/net/forwardfire/unitxc/module/UnitXCModuleVolume.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.module; + +import static net.forwardfire.unitxc.config.builder.UnitXCNumberTypeSetting.toSuperScript; +import static net.forwardfire.unitxc.model.UnitXCGroupType.SI_DERIVED; + +import net.forwardfire.unitxc.config.UnitXCConfigModule; +import net.forwardfire.unitxc.config.builder.UnitXCConfigBuilder; + +public class UnitXCModuleVolume implements UnitXCConfigModule { + + private static final int UNIT_COMPOUND_EXPONENT = 3; + private static final String UNIT_ID_POSTFIX = toSuperScript(UNIT_COMPOUND_EXPONENT); + private static final String UNIT_NAME_PREFIX = "cubic "; + + public static final String GROUP_ID = "volume"; + public static final String GROUP_NAME = UNIT_NAME_PREFIX+UnitXCModuleLength.TYPE_METRE_NAME; + public static final String GROUP_DESCRIPTION = "It is the volume of a cube with edges one metre in length."; + public static final String GROUP_BASE_TYPE_ID = UnitXCModuleLength.TYPE_METRE_ID+UNIT_ID_POSTFIX; + + @Override + public void configModule(UnitXCConfigBuilder builder) { + builder.createUnitGroup() + .setType( SI_DERIVED) + .setId( GROUP_ID) + .setName( GROUP_NAME) + .setDescription ( GROUP_DESCRIPTION) + .setBaseTypeId( GROUP_BASE_TYPE_ID) + .createCompoundExponentUnitTypes(UnitXCModuleLength.GROUP_ID, UNIT_COMPOUND_EXPONENT) + .setUnitIdPostfix(UNIT_ID_POSTFIX) + .setUnitNamePrefix(UNIT_NAME_PREFIX) + .build() + .build() + ; + } +} diff --git a/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCTemperatureModuleTest.java b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/UnitXCConverterStepTest.java similarity index 75% rename from ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCTemperatureModuleTest.java rename to ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/UnitXCConverterStepTest.java index f70f71c..1def5d5 100644 --- a/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCTemperatureModuleTest.java +++ b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/UnitXCConverterStepTest.java @@ -21,7 +21,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.forwardfire.unitxc.module; +package net.forwardfire.unitxc; import static org.junit.Assert.assertNotNull; @@ -35,11 +35,11 @@ import static net.forwardfire.unitxc.UnitXCAssert.convertEquals; import net.forwardfire.unitxc.UnitXCFactory; import net.forwardfire.unitxc.UnitXCManager; import net.forwardfire.unitxc.model.UnitXCType; -import net.forwardfire.unitxc.model.UnitXCTypeGroup; +import net.forwardfire.unitxc.model.UnitXCGroup; import net.forwardfire.unitxc.model.UnitXConverterResult; import net.forwardfire.unitxc.model.UnitXConverterResultStep; -public class UnitXCTemperatureModuleTest { +public class UnitXCConverterStepTest { @Test public void testFac() { @@ -47,18 +47,19 @@ public class UnitXCTemperatureModuleTest { assertNotNull(unitManager); assertNotNull(unitManager.getUnitTypes()); - assertNotNull(unitManager.getUnitTypeGroups()); + assertNotNull(unitManager.getUnitGroups()); assertFalse(unitManager.getUnitTypes().isEmpty()); - assertFalse(unitManager.getUnitTypeGroups().isEmpty()); + assertFalse(unitManager.getUnitGroups().isEmpty()); assertNotNull(unitManager.getUnitTypes()); - for (UnitXCTypeGroup typeGroup:unitManager.getUnitTypeGroups()) { - System.out.println("TypeGroup: "+typeGroup.getId()+"\t name: "+typeGroup.getName()+"\t\t baseType: "+typeGroup.getBaseTypeId()); + for (UnitXCGroup typeGroup:unitManager.getUnitGroups()) { + UnitXCType type = unitManager.getUnitType(typeGroup.getBaseTypeId()); + System.out.println("TypeGroup: "+typeGroup.getId()+"\t name: "+typeGroup.getName()+"\t\t baseType: "+typeGroup.getBaseTypeId()+" id: "+type.getId()); int total = 0; - for (UnitXCType type:unitManager.getUnitTypes()) { - if (!type.getTypeGroupId().equals(typeGroup.getId())) { + for (UnitXCType t:unitManager.getUnitTypes()) { + if (!t.getUnitGroupId().equals(typeGroup.getId())) { continue; } total++; @@ -80,7 +81,18 @@ public class UnitXCTemperatureModuleTest { System.out.println(""); - result = unitManager.getConverter().convertStepped(640.0, "nK", "µK"); + result = unitManager.getConverter().convertStepped(10.763, "ft²", "in²"); + System.out.println("Convert from: "+result.getStartType().getName()+" to: "+result.getResultType().getName()); + System.out.println("startValue: "+result.getStartValue()); + System.out.println("resultValue: "+result.getResultValue()); + System.out.println("convertTime: "+result.getConvertTime()); + for (UnitXConverterResultStep step:result.getSteps()) { + System.out.println("step: "+step.getName()+" in: "+step.getInputValue()+" out: "+step.getOutputValue()+" time: "+step.getConvertTime()); + } + + System.out.println(""); + + result = unitManager.getConverter().convertStepped(10.763, "ft³", "in³"); System.out.println("Convert from: "+result.getStartType().getName()+" to: "+result.getResultType().getName()); System.out.println("startValue: "+result.getStartValue()); System.out.println("resultValue: "+result.getResultValue()); @@ -90,28 +102,4 @@ public class UnitXCTemperatureModuleTest { } } - @Test - public void testConverterTempKvsC() throws Exception { - convertEquals(26.85,"°C",300.0, "K"); - convertEquals(310.65,"K",37.5, "°C"); - } - - @Test - public void testConverterTempKvsF() throws Exception { - convertEquals(80.32,"°F",300.0, "K"); - convertEquals(276.2,"K",37.5, "°F"); - convertEquals(276.208,"K",37.505, "°F"); - } - - @Test - public void testConverterTempFvsC() throws Exception { - convertEquals(74.937,"°C",166.888, "°F"); - convertEquals(211.99,"°F",100.0, "°C"); - } - - @Test - public void testConverterTempRvsC() throws Exception { - convertEquals(-143.64,"°C",233.12,"°R"); - convertEquals(1691.06,"°R",666.333,"°C"); - } } diff --git a/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/UnitXCManagerTest.java b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/UnitXCManagerTest.java index 90157b6..1ebd20f 100644 --- a/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/UnitXCManagerTest.java +++ b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/UnitXCManagerTest.java @@ -49,62 +49,62 @@ public class UnitXCManagerTest { @Test public void testGetUnitTypeResultTypeGroupId() { - assertNotNull(test.getUnitType(UnitXCModuleTemperature.TYPE_KELVIN_ID).getTypeGroupId()); + assertNotNull(test.getUnitType(UnitXCModuleTemperature.TYPE_KELVIN_ID).getUnitGroupId()); } @Test public void testGetUnitTypeGroup() { - assertNotNull(test.getUnitTypeGroup(UnitXCModuleTemperature.GROUP_ID)); + assertNotNull(test.getUnitGroup(UnitXCModuleTemperature.GROUP_ID)); } @Test(expected=NullPointerException.class) public void testGetUnitTypeGroupNull() { - assertNotNull(test.getUnitTypeGroup(null)); + assertNotNull(test.getUnitGroup(null)); } @Test(expected=NullPointerException.class) public void testGetUnitTypeGroupInvalid() { - assertNotNull(test.getUnitTypeGroup(getClass().getName())); + assertNotNull(test.getUnitGroup(getClass().getName())); } @Test public void testGetUnitTypeGroupResultId() { - assertNotNull(test.getUnitTypeGroup(UnitXCModuleTemperature.GROUP_ID).getId()); + assertNotNull(test.getUnitGroup(UnitXCModuleTemperature.GROUP_ID).getId()); } @Test public void testGetUnitTypeGroupResultName() { - assertNotNull(test.getUnitTypeGroup(UnitXCModuleTemperature.GROUP_ID).getName()); + assertNotNull(test.getUnitGroup(UnitXCModuleTemperature.GROUP_ID).getName()); } @Test public void testGetUnitTypeGroupResultDescription() { - assertNotNull(test.getUnitTypeGroup(UnitXCModuleTemperature.GROUP_ID).getDescription()); + assertNotNull(test.getUnitGroup(UnitXCModuleTemperature.GROUP_ID).getDescription()); } @Test public void testGetUnitTypeResultTypeBaseTypeID() { - assertNotNull(test.getUnitTypeGroup(UnitXCModuleTemperature.GROUP_ID).getBaseTypeId()); + assertNotNull(test.getUnitGroup(UnitXCModuleTemperature.GROUP_ID).getBaseTypeId()); } @Test public void testIsUnitTypeGroupTrue() { - assertTrue(test.isUnitTypeGroup(UnitXCModuleTemperature.GROUP_ID)); + assertTrue(test.isUnitGroup(UnitXCModuleTemperature.GROUP_ID)); } @Test public void testIsUnitTypeGroupFalse() { - assertFalse(test.isUnitTypeGroup(getClass().getName())); + assertFalse(test.isUnitGroup(getClass().getName())); } @Test(expected=NullPointerException.class) public void testIsUnitTypeGroupNull() { - assertTrue(test.isUnitTypeGroup(null)); + assertTrue(test.isUnitGroup(null)); } @Test(expected=IllegalArgumentException.class) public void testIsUnitTypeGroupEmpty() { - assertTrue(test.isUnitTypeGroup("")); + assertTrue(test.isUnitGroup("")); } @Test @@ -124,6 +124,6 @@ public class UnitXCManagerTest { @Test(expected=IllegalArgumentException.class) public void testIsUnitTypeEmpty() { - assertTrue(test.isUnitTypeGroup("")); + assertTrue(test.isUnitGroup("")); } } diff --git a/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleLengthTest.java b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleLengthTest.java new file mode 100644 index 0000000..ef4ef2f --- /dev/null +++ b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleLengthTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.module; + +import org.junit.Test; + +import static net.forwardfire.unitxc.UnitXCAssert.convertEquals; + +public class UnitXCModuleLengthTest { + + @Test + public void test10cm2mm() { + convertEquals(100.0,"mm",10.0, "cm"); + } + + @Test + public void test2mm2cm() { + convertEquals(1.0,"cm",10.0,"mm"); + } + + @Test + public void test004567km2cm() { + convertEquals(4567,"cm",0.04567,"km"); + } + + @Test + public void test2cm2mm() { + convertEquals(232.0,"mm",23.2, "cm"); + } + + @Test + public void test2345mm2cm() { + convertEquals(234.56,"cm",2345.6, "mm"); + } + + @Test + public void test1in2mm() { + convertEquals(25.4,"mm",1.0, "in"); + } + + @Test + public void test25mm2in() { + convertEquals(1.0,"in",25.4,"mm"); + } + + @Test + public void test2ft2mm() { + convertEquals(304.8*2,"mm",2.0,"ft"); + } + + @Test + public void test2ft2m() { + convertEquals(0.6096,"m",2.0, "ft"); + } + + @Test + public void test06m2in() { + convertEquals(24.0,"in",0.6096, "m"); + } + + @Test + public void test2ft2in() { + convertEquals(24.0,"in",2.0, "ft"); + } + + @Test + public void test2ft2cm() { + convertEquals(73.152,"cm",2.4, "ft"); + } + + @Test + public void test24ft2m() { + convertEquals(7.315,"m",24, "ft"); + } +} diff --git a/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleTemperatureTest.java b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleTemperatureTest.java new file mode 100644 index 0000000..f0a5b82 --- /dev/null +++ b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleTemperatureTest.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.module; + +import org.junit.Test; + +import static net.forwardfire.unitxc.UnitXCAssert.convertEquals; + +public class UnitXCModuleTemperatureTest { + + @Test + public void test300K2C() throws Exception { + convertEquals(26.85,"°C",300.0, "K"); + } + + @Test + public void test37C2K() throws Exception { + convertEquals(310.65,"K",37.5, "°C"); + } + + @Test + public void test300K2F() throws Exception { + convertEquals(80.32,"°F",300.0, "K"); + } + + @Test + public void test37C2F() throws Exception { + convertEquals(276.2,"K",37.5, "°F"); + } + + @Test + public void test37F2K() throws Exception { + convertEquals(276.208,"K",37.505, "°F"); + } + + @Test + public void test166F2C() throws Exception { + convertEquals(74.937,"°C",166.888, "°F"); + } + + @Test + public void test100C2F() throws Exception { + convertEquals(211.99,"°F",100.0, "°C"); + } + + @Test + public void test233R2C() throws Exception { + convertEquals(-143.64,"°C",233.12,"°R"); + } + + @Test + public void test666C2R() throws Exception { + convertEquals(1691.06,"°R",666.333,"°C"); + } +} diff --git a/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleTimeTest.java b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleTimeTest.java new file mode 100644 index 0000000..f65e1c3 --- /dev/null +++ b/ff-unitxc-converter/src/test/java/net/forwardfire/unitxc/module/UnitXCModuleTimeTest.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2013-2015, Willem Cazander + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.forwardfire.unitxc.module; + +import org.junit.Test; + +import static net.forwardfire.unitxc.UnitXCAssert.convertEquals; + +public class UnitXCModuleTimeTest { + + @Test + public void test30SecondToMinute() throws Exception { + convertEquals(0.5,"minute",30.0, "s"); + } + + @Test + public void test300SecondToMinute() throws Exception { + convertEquals(5,"minute",300.0, "s"); + } + + @Test + public void test7200SecondToHour() throws Exception { + convertEquals(2,"hour",7200.0, "s"); + } + + @Test + public void test120MinuteToHour() throws Exception { + convertEquals(2,"hour",120.0, "minute"); + } + + @Test + public void test300MinuteToHour() throws Exception { + convertEquals(5,"hour",300.0, "minute"); + } + + @Test + public void test48HourToDay() throws Exception { + convertEquals(2,"day",48, "hour"); + } +}