Unit.java
/*
* Created on 2007/01/28
* Copyright (C) 2007 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control.system.parameter;
import java.util.Map;
import java.util.TreeMap;
/**
* 単位を表わすクラスです。
*
* @author koga
* @version $Revision: 1.3 $, 2007/01/28
*/
public class Unit {
/** 単位に含まれるSI単位 */
private Map<SIunit, Integer> unitMap = new TreeMap<>();
/** SI単位の配列 */
private SIunit[] units;
/**
* 新しく生成された<code>Unit</code>オブジェクトを初期化します。
*
* @param units SI単位の配列
*/
@SuppressWarnings("boxing")
public Unit(final SIunit[] units) {
this.units = new SIunit[units.length];
System.arraycopy(units, 0, this.units, 0, units.length);
for (SIunit unit : units) {
if (this.unitMap.containsKey(unit)) {
int degree1 = this.unitMap.get(unit);
int degree2 = unit.getDegree();
if (degree1 + degree2 == 0) {
this.unitMap.remove(unit);
} else {
this.unitMap.put(unit, degree1 + degree2);
}
} else {
this.unitMap.put(unit, unit.getDegree());
}
}
}
/**
* @see java.lang.Object#toString()
*/
@SuppressWarnings("boxing")
@Override
public String toString() {
StringBuffer unitString = new StringBuffer();
for (SIunit unit : this.unitMap.keySet()) {
if (this.unitMap.get(unit) <= 0) {
continue;
}
if (0 < unitString.length()) {
unitString.append("."); //$NON-NLS-1$
}
unitString.append(unit.toString());
}
// 次数が負の単位
for (SIunit unit : this.unitMap.keySet()) {
if (this.unitMap.get(unit) >= 0) {
continue;
}
if (0 < unitString.length()) {
unitString.append("."); //$NON-NLS-1$
}
unitString.append(unit.toString());
}
return unitString.toString();
}
/**
* 単位の配列を返します。
*
* @return 単位の配列
*/
SIunit[] getUnitAsArray() {
return this.units;
}
}