SIunit.java
/*
* Created on 2007/01/22
* Copyright (C) 2007 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.tool.control.system.parameter;
import java.util.Arrays;
/**
* 国際単位系(SI単位系)(International System of Units)を表わす列挙型です。
*
* @author koga
* @version $Revision: 1.3 $, 2007/01/22
*/
public enum SIunit {
/** キログラム */
kg(1),
/** キログラム2乗 */
kg2(2),
/** キログラム3乗 */
kg3(3),
/** キログラム */
kg_1(-1),
/** キログラム-2乗 */
kg_2(-2),
/** キログラム-3乗 */
kg_3(-3),
/** ニュートン */
N(1),
/** ニュートン2乗 */
N2(2),
/** ニュートン3乗 */
N3(3),
/** ニュートン-1乗 */
N_1(-1),
/** ニュートン-2乗 */
N_2(-2),
/** ニュートン-3乗 */
N_3(-3),
/** メートル */
m(1),
/** メートル2乗 */
m2(2),
/** メートル3乗 */
m3(3),
/** メートル-1乗 */
m_1(-1),
/** メートル-2乗 */
m_2(-2),
/** メートル-2乗 */
m_3(-3),
/** ラジアン */
rad(1),
/** ラジアン2乗 */
rad2(2),
/** ラジアン3乗 */
rad3(3),
/** ラジアン-1乗 */
rad_1(-1),
/** ラジアン-2乗 */
rad_2(-2),
/** ラジアン-3乗 */
rad_3(-3),
/** ヘルツ */
Hz(1),
/** ヘルツ2乗 */
Hz2(2),
/** ヘルツ3乗 */
Hz3(3),
/** ヘルツ-1乗 */
Hz_1(-1),
/** ヘルツ-2乗 */
Hz_2(-2),
/** ヘルツ-3乗 */
Hz_3(-3),
/** デシベル */
dB(1),
/** デシベル2乗 */
dB2(2),
/** デシベル3乗 */
dB3(3),
/** デシベル-1乗 */
dB_1(-1),
/** デシベル-2乗 */
dB_2(-2),
/** デシベル-3乗 */
dB_3(-3),
/** パスカル */
Pa(1),
/** パスカル2乗 */
Pa2(2),
/** パスカル3乗 */
Pa3(3),
/** パスカル-1乗 */
Pa_1(-1),
/** パスカル-2乗 */
Pa_2(-2),
/** パスカル-3乗 */
Pa_3(-3),
/** ジュール */
J(1),
/** ジュール2乗 */
J2(2),
/** ジュール3乗 */
J3(3),
/** ジュール-1乗 */
J_1(-1),
/** ジュール-2乗 */
J_2(-2),
/** ジュール-3乗 */
J_3(-3),
/** ワット */
W(1),
/** ワット2乗 */
W2(2),
/** ワット3乗 */
W3(3),
/** ワット-1乗 */
W_1(-1),
/** ワット-2乗 */
W_2(-2),
/** ワット-3乗 */
W_3(-3),
/** ケルビン */
K(1),
/** ケルビン2乗 */
K2(2),
/** ケルビン3乗 */
K3(3),
/** ケルビン-1乗 */
K_1(-1),
/** ケルビン-2乗 */
K_2(-2),
/** ケルビン-3乗 */
K_3(-3),
/** アンペア */
A(1),
/** アンペア2乗 */
A2(2),
/** アンペア3乗 */
A3(3),
/** アンペア-1乗 */
A_1(-1),
/** アンペア-2乗 */
A_2(-2),
/** アンペア-3乗 */
A_3(-3),
/** クーロン */
C(1),
/** クーロン2乗 */
C2(2),
/** クーロン3乗 */
C3(3),
/** クーロン-1乗 */
C_1(-1),
/** クーロン-2乗 */
C_2(-2),
/** クーロン-3乗 */
C_3(-3),
/** ボルト */
V(1),
/** ボルト2乗 */
V2(2),
/** ボルト3乗 */
V3(3),
/** ボルト-1乗 */
V_1(-1),
/** ボルト-2乗 */
V_2(-2),
/** ボルト-3乗 */
V_3(-3),
/** ファラッド */
F(1),
/** ファラッド2乗 */
F2(2),
/** ファラッド3乗 */
F3(3),
/** ファラッド-1乗 */
F_1(-1),
/** ファラッド-2乗 */
F_2(-2),
/** ファラッド-3乗 */
F_3(-3),
/** ヘンリー */
H(1),
/** ヘンリー2乗 */
H2(2),
/** ヘンリー3乗 */
H3(3),
/** ヘンリー-1乗 */
H_1(1),
/** ヘンリー-2乗 */
H_2(2),
/** ヘンリー-3乗 */
H_3(3),
/** テスラ */
T(1),
/** テスラ2乗 */
T2(2),
/** テスラ3乗 */
T3(3),
/** テスラ-1乗 */
T_1(-1),
/** テスラ-2乗 */
T_2(-2),
/** テスラ-3乗 */
T_3(-3),
/** ウェーバ */
Wb(1),
/** ウェーバ2乗 */
Wb2(2),
/** ウェーバ3乗 */
Wb3(3),
/** ウェーバ-1乗 */
Wb_1(-1),
/** ウェーバ-2乗 */
Wb_2(-2),
/** ウェーバ-3乗 */
Wb_3(-3),
/** オーム */
Ohm(1),
/** オーム2乗 */
Ohm2(2),
/** オーム3乗 */
Ohm3(3),
/** オーム-1乗 */
Ohm_1(-1),
/** オーム-2乗 */
Ohm_2(-2),
/** オーム-3乗 */
Ohm_3(-3),
/** シーメンス */
S(1),
/** シーメンス2乗 */
S2(2),
/** シーメンス3乗 */
S3(3),
/** シーメンス-1乗 */
S_1(-1),
/** シーメンス-2乗 */
S_2(-2),
/** シーメンス-3乗 */
S_3(-3),
/** モル */
mol(1),
/** モル2乗 */
mol2(2),
/** モル3乗 */
mol3(3),
/** モル-1乗 */
mol_1(-1),
/** モル-2乗 */
mol_2(-2),
/** モル-3乗 */
mol_3(-3),
/** カンデラ */
cd(1),
/** カンデラ2乗 */
cd2(2),
/** カンデラ3乗 */
cd3(3),
/** カンデラ-1乗 */
cd_1(-1),
/** カンデラ-2乗 */
cd_2(-2),
/** カンデラ-3乗 */
cd_3(-3),
/** ルーメン */
lm(1),
/** ルーメン2乗 */
lm2(2),
/** ルーメン3乗 */
lm3(3),
/** ルーメン-1乗 */
lm_1(-1),
/** ルーメン-2乗 */
lm_2(-2),
/** ルーメン-3乗 */
lm_3(-3),
/** ルクス */
lx(1),
/** ルクス2乗 */
lx2(2),
/** ルクス3乗 */
lx3(3),
/** ルクス-1乗 */
lx_1(-1),
/** ルクス-2乗 */
lx_2(-2),
/** ルクス-3乗 */
lx_3(-3),
/** ベクレル */
Bq(1),
/** ベクレル2乗 */
Bq2(2),
/** ベクレル3乗 */
Bq3(3),
/** ベクレル-1乗 */
Bq_1(-1),
/** ベクレル-2乗 */
Bq_2(-2),
/** ベクレル-3乗 */
Bq_3(-3),
/** グレイ */
Gy(1),
/** グレイ2乗 */
Gy2(2),
/** グレイ3乗 */
Gy3(3),
/** グレイ-1乗 */
Gy_1(-1),
/** グレイ-2乗 */
Gy_2(-2),
/** グレイ-3乗 */
Gy_3(-3),
/** シーベルト */
Sv(1),
/** シーベルト2乗 */
Sv2(2),
/** シーベルト3乗 */
Sv3(3),
/** シーベルト-1乗 */
Sv_1(-1),
/** シーベルト-2乗 */
Sv_2(-2),
/** シーベルト-3乗 */
Sv_3(-3),
/** 秒 */
s(1),
/** 秒2乗 */
s2(2),
/** 秒3乗 */
s3(3),
/** 秒-1乗 */
s_1(-1),
/** 秒-2乗 */
s_2(-2),
/** 秒-3乗 */
s_3(-3),
/** 無次元 */
none(1),
/** 不定 */
undefined(1);
/** 次数 */
private final int degree;
/**
* 新しく生成された<code>UnitType</code>オブジェクトを初期化します。
*
* @param degree 次数
*/
SIunit(final int degree) {
this.degree = degree;
}
/**
* 次数を返します。
*
* @return 次数
*/
public int getDegree() {
return this.degree;
}
/**
* @see java.lang.Enum#toString()
*/
@Override
public String toString() {
if (this.degree == 1) {
return name();
}
String name = name();
if (1 < Math.abs(this.degree)) {
name = name.substring(0, name.length() - 1);
}
if (0 < this.degree) {
return name + "^" + this.degree; //$NON-NLS-1$
}
return name.substring(0, name.indexOf('_')) + "^" + this.degree; //$NON-NLS-1$
}
/**
* 単位を表わす文字列を返します。
*
* @param units 単位の要素
* @return 単位を表わす文字列
*/
public static final String toString(final SIunit[] units) {
final StringBuffer unitString = new StringBuffer();
final SIunit[] sortedUnits = new SIunit[units.length];
System.arraycopy(units, 0, sortedUnits, 0, units.length);
Arrays.sort(sortedUnits);
// 次数が正の単位
for (SIunit unit : sortedUnits) {
if (unit.degree <= 0) {
continue;
}
if (0 < unitString.length()) {
unitString.append("."); //$NON-NLS-1$
}
unitString.append(unit.toString());
}
// 次数が負の単位
for (SIunit unit : sortedUnits) {
if (unit.degree >= 0) {
continue;
}
if (0 < unitString.length()) {
unitString.append("."); //$NON-NLS-1$
}
unitString.append(unit.toString());
}
return unitString.toString();
}
/**
* 2個の単位が等しいか判定します。
*
* @param units1 比較対象の単位1
* @param units2 比較対象の単位2
* @return 2個の単位が等しければtrue、そうでなければfalse
*/
public static final boolean equals(final SIunit[] units1, final SIunit[] units2) {
if (units1 == null && units2 == null) {
return true;
}
if (units1 == null || units2 == null) {
return false;
}
if (units1.length != units2.length) {
return false;
}
for (int i = 0; i < units1.length; i++) {
if (units1[i].equals(units2[i]) == false) {
return false;
}
}
return true;
}
}