--- /dev/null
+/*\r
+ * bone group\r
+ *\r
+ * License : The MIT License\r
+ * Copyright(c) 2010 MikuToga Partners\r
+ */\r
+\r
+package jp.sourceforge.mikutoga.pmd;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import jp.sourceforge.mikutoga.corelib.I18nText;\r
+import jp.sourceforge.mikutoga.corelib.SerialNumbered;\r
+\r
+/**\r
+ * ボーングループ。\r
+ * ボーングループ名と0個以上のボーンを配下に持つ。\r
+ * 通し番号0のボーングループは、暗黙に用意される「デフォルトボーングループ」とする。\r
+ */\r
+public class BoneGroup implements SerialNumbered , Iterable<BoneInfo> {\r
+\r
+ private final I18nText groupName = new I18nText();\r
+\r
+ private final List<BoneInfo> boneList = new ArrayList<BoneInfo>();\r
+\r
+ private int serialNo = -1;\r
+\r
+ /**\r
+ * コンストラクタ。\r
+ */\r
+ public BoneGroup(){\r
+ super();\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * ボーングループ名を返す。\r
+ * @return ボーングループ名\r
+ */\r
+ public I18nText getGroupName(){\r
+ return this.groupName;\r
+ }\r
+\r
+ /**\r
+ * ボーンリストを取得する。\r
+ * @return ボーンリスト\r
+ */\r
+ public List<BoneInfo> getBoneList(){\r
+ return this.boneList;\r
+ }\r
+\r
+ /**\r
+ * デフォルトボーングループか否か判定する。\r
+ * 通し番号が0ならデフォルトボーングループ。\r
+ * @return デフォルトボーングループならtrue\r
+ */\r
+ public boolean isDefaultBoneGroup(){\r
+ if(this.serialNo == 0) return true;\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * {@inheritDoc}\r
+ * @return {@inheritDoc}\r
+ */\r
+ public Iterator<BoneInfo> iterator(){\r
+ return this.boneList.iterator();\r
+ }\r
+\r
+ /**\r
+ * {@inheritDoc}\r
+ * @param num {@inheritDoc}\r
+ */\r
+ public void setSerialNumber(int num){\r
+ this.serialNo = num;\r
+ return;\r
+ }\r
+\r
+ /**\r
+ * {@inheritDoc}\r
+ * @return {@inheritDoc}\r
+ */\r
+ public int getSerialNumber(){\r
+ return this.serialNo;\r
+ }\r
+\r
+ /**\r
+ * ボーングループ番号(ボーン枠番号)を返す。\r
+ * 常に通し番号より1少ない値となる。\r
+ * デフォルトボーングループは-1となる。\r
+ * @return ボーングループ番号\r
+ */\r
+ public int getBoneGroupNumber(){\r
+ return this.serialNo - 1;\r
+ }\r
+\r
+ /**\r
+ * {@inheritDoc}\r
+ * @return {@inheritDoc}\r
+ */\r
+ @Override\r
+ public String toString(){\r
+ StringBuilder result = new StringBuilder();\r
+\r
+ result.append("BoneGroup(")\r
+ .append(this.groupName)\r
+ .append(") [");\r
+\r
+ boolean dumped = false;\r
+ for(BoneInfo bone : this){\r
+ if(dumped) result.append(", ");\r
+ result.append(bone.getBoneName());\r
+ dumped = true;\r
+ }\r
+\r
+ result.append(']');\r
+\r
+ return result.toString();\r
+ }\r
+\r
+}\r