• R/O
  • HTTP
  • SSH
  • HTTPS

Vmd2XML: Commit

Vmd2XMLは、3D動画制作ツール、MikuMikuDance(MMD)で用いられるモーションデータファイル(*.vmd)の内容を、XML形式のデータファイルと交換するためのアプリケーションです。


Commit MetaInfo

Revision05e547cf705e0e0e270ae9f92aa21fa56fec32dc (tree)
Time2019-07-04 16:35:30
AuthorOlyutorskii <olyutorskii@user...>
CommiterOlyutorskii

Log Message

Merge release/v2.103.2

Change Summary

Incremental Difference

--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -4,6 +4,9 @@
44 Vmd2XML 変更履歴
55
66
7+2.103.2 (2019-07-04)
8+ * Prevent XXE vulnerabilities from external resources.
9+
710 2.102.2 (2019-06-06)
811 ・必須環境をJavaSE8に引き上げ。
912 ・Mercurial(2.101.4)からGit(2.101.104-SNAPSHOT)へSCMを移行。
--- a/config/checkstyle/checkstyle-suppressions.xml
+++ b/config/checkstyle/checkstyle-suppressions.xml
@@ -6,7 +6,7 @@
66
77 <!--
88 Checkstyle suppressions
9- for Checkstyle 8.20 or later
9+ for Checkstyle 8.22 or later
1010
1111 [ https://checkstyle.org/ ]
1212
@@ -31,18 +31,19 @@
3131 <suppress files="" checks="ImportControl" />
3232
3333 <!-- Javadoc Comments -->
34- <suppress files="" checks="JavadocParagraph" />
35- <suppress files="" checks="JavadocTagContinuationIndentation" />
3634 <suppress files="" checks="SummaryJavadocCheck" />
3735
3836 <!-- Miscellaneous -->
3937 <suppress files="" checks="FinalParameters" />
38+ <suppress files="" checks="OrderedProperties" />
4039 <suppress files="" checks="TrailingComment" />
4140
4241 <!-- Modifier -->
43- <suppress files="" checks="InterfaceMemberImpliedModifier" />
42+ <suppress files="" checks="RedundantModifier" />
4443
4544 <!-- Whitespace -->
45+ <suppress files="" checks="MethodParam" />
46+ <suppress files="" checks="ParenPad" />
4647 <suppress files="" checks="SingleSpaceSeparator" />
4748
4849 </suppressions>
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -6,7 +6,7 @@
66
77 <!--
88 Checkstyle modules
9- for Checkstyle 8.21 or later
9+ for Checkstyle 8.22 or later
1010
1111 [ https://checkstyle.org/ ]
1212
@@ -39,6 +39,7 @@
3939 <property name="fileExtensions" value="xml" />
4040 </module>
4141 <module name="RegexpHeader">
42+ <!-- /* ... */ -->
4243 <property name="header" value="^/\*$\n^ \*( .*)?$\n^ \*/$\n" />
4344 <property name="multiLines" value="2" />
4445 <property name="fileExtensions" value="java" />
@@ -55,6 +56,7 @@
5556 <module name="NewlineAtEndOfFile">
5657 <property name="fileExtensions" value="java, properties, xml, xsd, md, txt" />
5758 </module>
59+ <module name="OrderedProperties" />
5860 <module name="Translation" />
5961 <module name="UniqueProperties" />
6062
@@ -188,13 +190,18 @@
188190 <module name="RequireThis">
189191 <property name="checkMethods" value="false" />
190192 </module>
191- <module name="ReturnCount" />
193+ <module name="ReturnCount">
194+ <property name="max" value="5" />
195+ <property name="maxForVoid" value="5" />
196+ </module>
192197 <module name="SimplifyBooleanExpression" />
193198 <module name="SimplifyBooleanReturn" />
194199 <module name="StringLiteralEquality" />
195200 <module name="SuperClone" />
196201 <module name="SuperFinalize" />
197202 <module name="UnnecessaryParentheses" />
203+ <module name="UnnecessarySemicolonInEnumeration" />
204+ <module name="UnnecessarySemicolonInTryWithResources" />
198205 <module name="VariableDeclarationUsageDistance">
199206 <property name="allowedDistance" value="5"/>
200207 </module>
@@ -230,6 +237,7 @@
230237 <property name="scope" value="protected" />
231238 </module>
232239 <module name="MissingJavadocMethod" />
240+ <module name="MissingJavadocPackage" />
233241 <module name="MissingJavadocType" />
234242 <module name="NonEmptyAtclauseDescription" />
235243 <module name="SingleLineJavadoc" />
@@ -352,16 +360,17 @@
352360 <module name="GenericWhitespace" />
353361 <module name="MethodParamPad" />
354362 <module name="NoLineWrap" />
355- <module name="NoWhitespaceAfter" />
356- <module name="NoWhitespaceBefore" />
357- <module name="OperatorWrap" />
358- <module name="ParenPad">
359- <property name="option" value="nospace" />
363+ <module name="NoWhitespaceAfter">
360364 <property
361365 name="tokens"
362- value="CTOR_CALL, METHOD_CALL, SUPER_CTOR_CALL"
366+ value="AT, INC, DEC, UNARY_MINUS, UNARY_PLUS, DOT"
363367 />
364368 </module>
369+ <module name="NoWhitespaceBefore">
370+ <property name="allowLineBreaks" value="true" />
371+ </module>
372+ <module name="OperatorWrap" />
373+ <module name="ParenPad" />
365374 <module name="SeparatorWrap">
366375 <property name="tokens" value="DOT"/>
367376 <property name="option" value="nl"/>
@@ -392,6 +401,6 @@
392401 </module>
393402
394403
395- </module>
404+</module>
396405
397406 <!-- EOF -->
--- a/config/pmd/pmdrules.xml
+++ b/config/pmd/pmdrules.xml
@@ -37,6 +37,11 @@
3737 <property name="checkSingleIfStmt" value="false"/>
3838 </properties>
3939 </rule>
40+ <rule ref="category/java/codestyle.xml/LongVariable" >
41+ <properties>
42+ <property name="minimum" value="25"/>
43+ </properties>
44+ </rule>
4045
4146 <rule ref="category/java/design.xml" >
4247 <exclude name="LawOfDemeter" />
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
1616 <groupId>jp.sourceforge.mikutoga</groupId>
1717 <artifactId>vmd2xml</artifactId>
1818
19- <version>2.102.2</version>
19+ <version>2.103.2</version>
2020
2121 <packaging>jar</packaging>
2222 <name>Vmd2XML</name>
@@ -86,26 +86,23 @@
8686 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
8787 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
8888
89- <locale>en</locale>
90- <site.locales>${locale}</site.locales>
91- <javadoc.locale>${locale}</javadoc.locale>
92- <spotbugs.jvmArgs>-Duser.language=${locale}</spotbugs.jvmArgs>
93-
94- <!-- Walk around: JDK 11 javadoc + Maven -->
95- <detectJavaApiLink>false</detectJavaApiLink>
89+ <!-- DO NOT USE ${locale} with site-plugin -->
90+ <site.locales>en</site.locales>
91+ <javadoc.locale>en</javadoc.locale>
92+ <spotbugs.jvmArgs>-Duser.language=en</spotbugs.jvmArgs>
9693
9794 <surefire-plugin.version>3.0.0-M3</surefire-plugin.version>
9895 <jacoco-plugin.version>0.8.4</jacoco-plugin.version>
9996
10097 <checkstyle-plugin.version>3.1.0</checkstyle-plugin.version>
101- <checkstyleruntime.version>8.21</checkstyleruntime.version>
102- <checkstyle.config.location>${project.basedir}/config/checkstyle/checkstyle.xml</checkstyle.config.location>
103- <checkstyle.suppressions.location>${project.basedir}/config/checkstyle/checkstyle-suppressions.xml</checkstyle.suppressions.location>
98+ <checkstyleruntime.version>8.22</checkstyleruntime.version>
99+ <checkstyle.config.location>config/checkstyle/checkstyle.xml</checkstyle.config.location>
100+ <checkstyle.suppressions.location>config/checkstyle/checkstyle-suppressions.xml</checkstyle.suppressions.location>
104101 <checkstyle.enable.rss>false</checkstyle.enable.rss>
105102
106103 <pmd-plugin.version>3.12.0</pmd-plugin.version>
107104
108- <spotbugs-plugin.version>3.1.11</spotbugs-plugin.version>
105+ <spotbugs-plugin.version>3.1.12</spotbugs-plugin.version>
109106 <spotbugs.effort>Max</spotbugs.effort>
110107 <spotbugs.threshold>Low</spotbugs.threshold>
111108 <!-- for Jenkins -->
@@ -129,7 +126,7 @@
129126 <dependency>
130127 <groupId>jp.sourceforge.mikutoga</groupId>
131128 <artifactId>togagem</artifactId>
132- <version>3.120.2</version>
129+ <version>3.122.2</version>
133130 <scope>compile</scope>
134131 </dependency>
135132
@@ -315,7 +312,7 @@
315312 <execution>
316313 <phase>package</phase>
317314 <goals>
318- <goal>shade</goal>
315+ <goal>shade</goal>
319316 </goals>
320317 <configuration>
321318 <createDependencyReducedPom>false</createDependencyReducedPom>
@@ -349,7 +346,7 @@
349346 <id>attach-sources</id>
350347 <phase>verify</phase>
351348 <goals>
352- <goal>jar-no-fork</goal>
349+ <goal>jar-no-fork</goal>
353350 </goals>
354351 </execution>
355352 </executions>
@@ -508,13 +505,14 @@
508505 <artifactId>maven-javadoc-plugin</artifactId>
509506 <version>3.1.0</version>
510507 <configuration>
508+ <locale>${javadoc.locale}</locale>
509+ <source>${maven.compiler.source}</source>
511510 <author>false</author>
512511 <notimestamp>true</notimestamp>
513512 <quiet>true</quiet>
514513 <show>protected</show>
515514 <header>${project.name} ${project.version} API</header>
516515 <version>true</version>
517- <locale>${javadoc.locale}</locale>
518516 <!-- for JDK11 javadoc -->
519517 <additionalJOption>-J-Duser.language=${javadoc.locale}</additionalJOption>
520518 </configuration>
@@ -571,7 +569,7 @@
571569 <version>${pmd-plugin.version}</version>
572570 <configuration>
573571 <rulesets>
574- <ruleset>${project.basedir}/config/pmd/pmdrules.xml</ruleset>
572+ <ruleset>config/pmd/pmdrules.xml</ruleset>
575573 </rulesets>
576574 </configuration>
577575 <reportSets>
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/BezierParam.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/BezierParam.java
@@ -11,7 +11,9 @@ import java.text.MessageFormat;
1111
1212 /**
1313 * 三次ベジェ曲線による補間カーブを記述する。
14+ *
1415 * <p>制御点P0,P1,P2,P3の座標により記述される。
16+ *
1517 * <p>P0は(0,0)で固定。P3は(127,127)で固定。
1618 * 残りのP1,P2は、P0,P3を対角線とする正方形の内部に位置しなければならない。
1719 */
@@ -72,6 +74,7 @@ public class BezierParam {
7274
7375 /**
7476 * コンストラクタ。
77+ *
7578 * <p>デフォルトの直線補間が設定される。
7679 */
7780 public BezierParam(){
@@ -81,6 +84,7 @@ public class BezierParam {
8184
8285 /**
8386 * 制御点P1のX座標を返す。
87+ *
8488 * @return 制御点P1のX座標
8589 */
8690 public byte getP1x() {
@@ -89,6 +93,7 @@ public class BezierParam {
8993
9094 /**
9195 * 制御点P1のY座標を返す。
96+ *
9297 * @return 制御点P1のY座標
9398 */
9499 public byte getP1y() {
@@ -97,6 +102,7 @@ public class BezierParam {
97102
98103 /**
99104 * 制御点P2のX座標を返す。
105+ *
100106 * @return 制御点P2のX座標
101107 */
102108 public byte getP2x() {
@@ -105,6 +111,7 @@ public class BezierParam {
105111
106112 /**
107113 * 制御点P2のY座標を返す。
114+ *
108115 * @return 制御点P2のY座標
109116 */
110117 public byte getP2y() {
@@ -113,6 +120,7 @@ public class BezierParam {
113120
114121 /**
115122 * 制御点P1のX座標を設定する。
123+ *
116124 * @param p1x 制御点P1のX座標
117125 */
118126 public void setP1x(byte p1x) {
@@ -122,6 +130,7 @@ public class BezierParam {
122130
123131 /**
124132 * 制御点P1のY座標を設定する。
133+ *
125134 * @param p1y 制御点P1のY座標
126135 */
127136 public void setP1y(byte p1y) {
@@ -131,6 +140,7 @@ public class BezierParam {
131140
132141 /**
133142 * 制御点P2のX座標を設定する。
143+ *
134144 * @param p2x 制御点P2のX座標
135145 */
136146 public void setP2x(byte p2x) {
@@ -140,6 +150,7 @@ public class BezierParam {
140150
141151 /**
142152 * 制御点P2のY座標を設定する。
153+ *
143154 * @param p2y 制御点P2のY座標
144155 */
145156 public void setP2y(byte p2y) {
@@ -149,6 +160,7 @@ public class BezierParam {
149160
150161 /**
151162 * 制御点P1の座標を設定する。
163+ *
152164 * @param p1xArg 制御点P1のX座標
153165 * @param p1yArg 制御点P1のY座標
154166 */
@@ -160,6 +172,7 @@ public class BezierParam {
160172
161173 /**
162174 * 制御点P2の座標を設定する。
175+ *
163176 * @param p2xArg 制御点P2のX座標
164177 * @param p2yArg 制御点P2のY座標
165178 */
@@ -171,7 +184,9 @@ public class BezierParam {
171184
172185 /**
173186 * 直線補間か判定する。
187+ *
174188 * <p>P1,P2双方がP0-P3対角線上に存在する場合を直線補間とする。
189+ *
175190 * @return 直線補間ならtrue
176191 */
177192 public boolean isLinear(){
@@ -182,6 +197,7 @@ public class BezierParam {
182197
183198 /**
184199 * MMDデフォルトの直線補間か判定する。
200+ *
185201 * @return MMDデフォルトの直線補間ならtrue
186202 */
187203 public boolean isDefaultLinear(){
@@ -196,6 +212,7 @@ public class BezierParam {
196212
197213 /**
198214 * MMDデフォルトのEaseInOutカーブか判定する。
215+ *
199216 * @return MMDデフォルトのEaseInOutカーブならtrue
200217 */
201218 public boolean isDefaultEaseInOut(){
@@ -232,6 +249,7 @@ public class BezierParam {
232249
233250 /**
234251 * {@inheritDoc}
252+ *
235253 * @return {@inheritDoc}
236254 */
237255 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/BoneMotion.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/BoneMotion.java
@@ -14,6 +14,7 @@ import jp.sfjp.mikutoga.vmd.AbstractNumbered;
1414
1515 /**
1616 * ボーンのモーション情報。
17+ *
1718 * <p>ボーン名、ボーン位置、ボーン回転量、及び補間カーブ情報を持つ。
1819 */
1920 public class BoneMotion extends AbstractNumbered {
@@ -45,6 +46,7 @@ public class BoneMotion extends AbstractNumbered {
4546
4647 /**
4748 * ボーン名を返す。
49+ *
4850 * @return ボーン名
4951 */
5052 public String getBoneName(){
@@ -53,6 +55,7 @@ public class BoneMotion extends AbstractNumbered {
5355
5456 /**
5557 * ボーン名を設定する。
58+ *
5659 * @param boneName ボーン名
5760 */
5861 public void setBoneName(String boneName){
@@ -62,6 +65,7 @@ public class BoneMotion extends AbstractNumbered {
6265
6366 /**
6467 * ボーン回転量を返す。
68+ *
6569 * @return ボーン回転量
6670 */
6771 public MkQuat getRotation(){
@@ -70,6 +74,7 @@ public class BoneMotion extends AbstractNumbered {
7074
7175 /**
7276 * ボーン回転の補間曲線情報を返す。
77+ *
7378 * @return ボーン回転の補間曲線情報
7479 */
7580 public BezierParam getIntpltRotation(){
@@ -78,6 +83,7 @@ public class BoneMotion extends AbstractNumbered {
7883
7984 /**
8085 * ボーン位置を返す。
86+ *
8187 * @return ボーン位置
8288 */
8389 public MkPos3D getPosition(){
@@ -86,6 +92,7 @@ public class BoneMotion extends AbstractNumbered {
8692
8793 /**
8894 * ボーン位置移動の補間情報を返す。
95+ *
8996 * @return ボーン位置移動の補間情報
9097 */
9198 public PosCurve getPosCurve(){
@@ -94,12 +101,16 @@ public class BoneMotion extends AbstractNumbered {
94101
95102 /**
96103 * このモーションが暗黙の位置情報を持つか判定する。
104+ *
97105 * <p>ボーン位置が原点(0,0,0)にあり、
98106 * XYZ3軸の移動補間カーブがデフォルト直線補間の場合、
99107 * 暗黙の位置情報と見なされる。
108+ *
100109 * <p>MMDは、位置情報を持たないボーンのモーションに対し
101110 * 便宜的にこの暗黙の位置情報を割り当てる。
111+ *
102112 * <p>通常の位置モーションが暗黙の位置情報と一致する場合もありうる。
113+ *
103114 * @return 暗黙の位置情報であるならtrue
104115 */
105116 public boolean hasImplicitPosition(){
@@ -111,6 +122,7 @@ public class BoneMotion extends AbstractNumbered {
111122
112123 /**
113124 * {@inheritDoc}
125+ *
114126 * @return {@inheritDoc}
115127 */
116128 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/CameraMotion.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/CameraMotion.java
@@ -13,11 +13,14 @@ import jp.sfjp.mikutoga.vmd.AbstractNumbered;
1313
1414 /**
1515 * カメラモーション情報。
16+ *
1617 * <p>カメラの回転は極座標で表される。
18+ *
1719 * <p>カメラ-ターゲット間の距離は球座標(極座標)の動径に相当する。
1820 * 通常はターゲットより手前に位置するカメラまでの距離が負の値で表される。
1921 * カメラ位置がターゲットを突き抜けた場合は正の値もとりうる。
2022 * ※MMDのUIと符号が逆なので注意。
23+ *
2124 * <p>パースペクティブモードがOFFの場合、
2225 * 画角は無視され遠近感処理が行われなくなる。(平行投影?)
2326 */
@@ -57,6 +60,7 @@ public class CameraMotion extends AbstractNumbered {
5760
5861 /**
5962 * ターゲット位置情報を返す。
63+ *
6064 * @return ターゲット位置情報
6165 */
6266 public MkPos3D getCameraTarget(){
@@ -65,6 +69,7 @@ public class CameraMotion extends AbstractNumbered {
6569
6670 /**
6771 * ターゲット位置移動の補間情報を返す。
72+ *
6873 * @return ターゲット位置移動の補間情報
6974 */
7075 public PosCurve getTargetPosCurve(){
@@ -73,6 +78,7 @@ public class CameraMotion extends AbstractNumbered {
7378
7479 /**
7580 * カメラ回転情報を返す。
81+ *
7682 * @return カメラ回転情報
7783 */
7884 public CameraRotation getCameraRotation(){
@@ -81,6 +87,7 @@ public class CameraMotion extends AbstractNumbered {
8187
8288 /**
8389 * カメラ回転の補間曲線情報を返す。
90+ *
8491 * @return カメラ回転の補間曲線情報
8592 */
8693 public BezierParam getIntpltRotation(){
@@ -89,6 +96,7 @@ public class CameraMotion extends AbstractNumbered {
8996
9097 /**
9198 * カメラ-ターゲット間の距離を返す。
99+ *
92100 * @return カメラ-ターゲット間の距離
93101 */
94102 public double getRange(){
@@ -97,6 +105,7 @@ public class CameraMotion extends AbstractNumbered {
97105
98106 /**
99107 * カメラ-ターゲット間の距離を設定する。
108+ *
100109 * @param range カメラ-ターゲット間の距離
101110 */
102111 public void setRange(double range){
@@ -106,6 +115,7 @@ public class CameraMotion extends AbstractNumbered {
106115
107116 /**
108117 * カメラ-ターゲット間距離の補間曲線情報を返す。
118+ *
109119 * @return カメラ-ターゲット間距離の補間曲線情報
110120 */
111121 public BezierParam getIntpltRange(){
@@ -114,6 +124,7 @@ public class CameraMotion extends AbstractNumbered {
114124
115125 /**
116126 * パースペクティブが有効か判定する。
127+ *
117128 * @return パースペクティブが有効ならtrue
118129 */
119130 public boolean hasPerspective(){
@@ -122,6 +133,7 @@ public class CameraMotion extends AbstractNumbered {
122133
123134 /**
124135 * パースペクティブモードを設定する。
136+ *
125137 * @param mode trueを渡すとパースペクティブが有効になる。
126138 */
127139 public void setPerspectiveMode(boolean mode){
@@ -131,6 +143,7 @@ public class CameraMotion extends AbstractNumbered {
131143
132144 /**
133145 * 投影角度(スクリーン縦画角)を返す。
146+ *
134147 * @return 投影角度(度数法)
135148 */
136149 public int getProjectionAngle(){
@@ -139,6 +152,7 @@ public class CameraMotion extends AbstractNumbered {
139152
140153 /**
141154 * 投影角度(スクリーン縦画角)を設定する。
155+ *
142156 * @param angle 投影角度(度数法)
143157 */
144158 public void setProjectionAngle(int angle){
@@ -148,6 +162,7 @@ public class CameraMotion extends AbstractNumbered {
148162
149163 /**
150164 * スクリーン投射の補間曲線情報を返す。
165+ *
151166 * @return スクリーン投射の補間曲線情報
152167 */
153168 public BezierParam getIntpltProjection(){
@@ -156,6 +171,7 @@ public class CameraMotion extends AbstractNumbered {
156171
157172 /**
158173 * {@inheritDoc}
174+ *
159175 * @return {@inheritDoc}
160176 */
161177 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/CameraRotation.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/CameraRotation.java
@@ -13,17 +13,20 @@ import java.text.MessageFormat;
1313 * 左手系空間でターゲットの周りを回るカメラの回転情報。
1414 * いずれもカメラ姿勢ではなくカメラ運動量を示すため、
1515 * 回転量0と2Πの区別には意味がある。
16+ *
1617 * <p>latitudeはターゲットから見たカメラの仰俯角(≒緯度)。
1718 * 単位はラジアン。
1819 * Y軸回転量が0の時のZ正軸がY正軸へ倒れる方向が正回転。
1920 * (MMDのUIとは符号が逆になるので注意)
2021 * 仰俯角が0の場合、
2122 * カメラはターゲットに対しXZ平面(水平)と平行な箇所に位置する。
23+ *
2224 * <p>longitudeはY軸周りの回転量(≒経度)。
2325 * 単位はラジアン。
2426 * X正軸がZ正軸へ倒れる方向が正回転。(ボーン回転と逆)
2527 * 仰俯角およびY軸回転量が0の場合、
2628 * カメラレンズはZ軸-∞方向からZ軸+∞方向を向く。
29+ *
2730 * <p>rollはレンズをターゲットを向けたカメラのロール回転量。
2831 * 単位はラジアン。
2932 * 仰俯角とY軸回転量が0の時にY正軸がX正軸に倒れる方向が正回転。
@@ -51,6 +54,7 @@ public class CameraRotation {
5154
5255 /**
5356 * ターゲットから見たカメラの仰俯角(≒緯度)を返す。
57+ *
5458 * @return ターゲットから見たカメラの仰俯角(≒緯度)
5559 */
5660 public double getLatitude(){
@@ -59,6 +63,7 @@ public class CameraRotation {
5963
6064 /**
6165 * ターゲットから見たカメラの仰俯角(≒緯度)を設定する。
66+ *
6267 * @param latitude ターゲットから見たカメラの仰俯角(≒緯度)
6368 */
6469 public void setLatitude(double latitude){
@@ -68,6 +73,7 @@ public class CameraRotation {
6873
6974 /**
7075 * Y軸周りの回転量(≒経度)を返す。
76+ *
7177 * @return Y軸周りの回転量(≒経度)
7278 */
7379 public double getLongitude(){
@@ -76,6 +82,7 @@ public class CameraRotation {
7682
7783 /**
7884 * Y軸周りの回転量(≒経度)を設定する。
85+ *
7986 * @param longitude Y軸周りの回転量(≒経度)
8087 */
8188 public void setLongitude(double longitude){
@@ -85,6 +92,7 @@ public class CameraRotation {
8592
8693 /**
8794 * レンズをターゲットを向けたカメラのロール回転量を返す。
95+ *
8896 * @return レンズをターゲットを向けたカメラのロール回転量
8997 */
9098 public double getRoll(){
@@ -93,6 +101,7 @@ public class CameraRotation {
93101
94102 /**
95103 * レンズをターゲットを向けたカメラのロール回転量を設定する。
104+ *
96105 * @param roll レンズをターゲットを向けたカメラのロール回転量
97106 */
98107 public void setRoll(double roll){
@@ -102,6 +111,7 @@ public class CameraRotation {
102111
103112 /**
104113 * {@inheritDoc}
114+ *
105115 * @return {@inheritDoc}
106116 */
107117 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/LuminousColor.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/LuminousColor.java
@@ -11,9 +11,12 @@ import java.text.MessageFormat;
1111
1212 /**
1313 * 光源の色設定。
14+ *
1415 * <p>色情報はRGB色空間で記述される。
16+ *
1517 * <p>MMDのUI上の各色成分指定0~255定義域に便宜上256を追加したものが、
1618 * 0.0以上1.0以下にマップされる。
19+ *
1720 * <ul>
1821 * <li>0は正しく0.0にマップされる。
1922 * <li>128は正しく0.5にマップされる。
@@ -35,6 +38,7 @@ public class LuminousColor {
3538
3639 /**
3740 * コンストラクタ。
41+ *
3842 * <p>MMDデフォルトの光源色(154,154,154)が設定される。
3943 */
4044 public LuminousColor(){
@@ -45,6 +49,7 @@ public class LuminousColor {
4549
4650 /**
4751 * 光源の赤成分を設定する。
52+ *
4853 * @param colR 赤成分
4954 */
5055 public void setColR(float colR) {
@@ -54,6 +59,7 @@ public class LuminousColor {
5459
5560 /**
5661 * 光源の緑成分を設定する。
62+ *
5763 * @param colG 緑成分
5864 */
5965 public void setColG(float colG) {
@@ -63,6 +69,7 @@ public class LuminousColor {
6369
6470 /**
6571 * 光源の青成分を設定する。
72+ *
6673 * @param colB 青成分
6774 */
6875 public void setColB(float colB) {
@@ -72,6 +79,7 @@ public class LuminousColor {
7279
7380 /**
7481 * 光源の赤成分を返す。
82+ *
7583 * @return 赤成分
7684 */
7785 public float getColR(){
@@ -80,6 +88,7 @@ public class LuminousColor {
8088
8189 /**
8290 * 光源の緑成分を返す。
91+ *
8392 * @return 緑成分
8493 */
8594 public float getColG(){
@@ -88,6 +97,7 @@ public class LuminousColor {
8897
8998 /**
9099 * 光源の青成分を返す。
100+ *
91101 * @return 青成分
92102 */
93103 public float getColB(){
@@ -96,6 +106,7 @@ public class LuminousColor {
96106
97107 /**
98108 * {@inheritDoc}
109+ *
99110 * @return {@inheritDoc}
100111 */
101112 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/LuminousMotion.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/LuminousMotion.java
@@ -13,15 +13,20 @@ import jp.sfjp.mikutoga.vmd.AbstractNumbered;
1313
1414 /**
1515 * 光源演出情報。
16+ *
1617 * <p>照明方向は、
1718 * ワールド座標原点から伸びる方向ベクトルとして記述される。
1819 * この方向ベクトルに向けて、無限遠の光源から照明が当たる。
20+ *
1921 * <p>MMDのスライダUI上では
2022 * 方向ベクトル各軸成分の定義域は-1.0以上+1.0以下だが、
2123 * さらに絶対値の大きな値を指定することも可能。
24+ *
2225 * <p>方向ベクトルの長さは演出上の意味を持たないが、
2326 * キーフレーム間の照明方向の補間に影響を及ぼすかもしれない。
27+ *
2428 * <p>方向ベクトルが零ベクトル(0,0,0)の場合、MMDでは全ポリゴンに影が落ちる。
29+ *
2530 */
2631 public class LuminousMotion extends AbstractNumbered {
2732
@@ -52,6 +57,7 @@ public class LuminousMotion extends AbstractNumbered {
5257
5358 /**
5459 * 光源の色情報を返す。
60+ *
5561 * @return 光源の色情報
5662 */
5763 public LuminousColor getColor(){
@@ -60,6 +66,7 @@ public class LuminousMotion extends AbstractNumbered {
6066
6167 /**
6268 * 光源からの照射方向情報を返す。
69+ *
6370 * @return 光源からの照射方向情報
6471 */
6572 public MkVec3D getDirection(){
@@ -68,6 +75,7 @@ public class LuminousMotion extends AbstractNumbered {
6875
6976 /**
7077 * {@inheritDoc}
78+ *
7179 * @return {@inheritDoc}
7280 */
7381 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/MorphMotion.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/MorphMotion.java
@@ -12,6 +12,7 @@ import jp.sfjp.mikutoga.vmd.AbstractNumbered;
1212
1313 /**
1414 * モーフ情報。
15+ *
1516 * <p>通常、モーフ量は0.0以上1.0以下の値をとる。
1617 */
1718 public class MorphMotion extends AbstractNumbered {
@@ -35,6 +36,7 @@ public class MorphMotion extends AbstractNumbered {
3536
3637 /**
3738 * モーフ名を設定する。
39+ *
3840 * @param morphName モーフ名
3941 */
4042 public void setMorphName(String morphName) {
@@ -44,6 +46,7 @@ public class MorphMotion extends AbstractNumbered {
4446
4547 /**
4648 * モーフ名を返す。
49+ *
4750 * @return モーフ名
4851 */
4952 public String getMorphName() {
@@ -52,6 +55,7 @@ public class MorphMotion extends AbstractNumbered {
5255
5356 /**
5457 * モーフ変量を設定する。
58+ *
5559 * @param flex 変量
5660 */
5761 public void setFlex(float flex) {
@@ -61,6 +65,7 @@ public class MorphMotion extends AbstractNumbered {
6165
6266 /**
6367 * モーフ変量を返す。
68+ *
6469 * @return 変量
6570 */
6671 public float getFlex() {
@@ -69,6 +74,7 @@ public class MorphMotion extends AbstractNumbered {
6974
7075 /**
7176 * {@inheritDoc}
77+ *
7278 * @return {@inheritDoc}
7379 */
7480 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/NumberedVmdFlag.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/NumberedVmdFlag.java
@@ -25,11 +25,12 @@ public class NumberedVmdFlag
2525
2626
2727 private boolean shown = true;
28- private final List<IkSwitch> ikSwList = new LinkedList<IkSwitch>();
28+ private final List<IkSwitch> ikSwList = new LinkedList<>();
2929
3030
3131 /**
3232 * コンストラクタ。
33+ *
3334 * <p>モデル表示ありの状態で初期化される。
3435 */
3536 public NumberedVmdFlag(){
@@ -40,6 +41,7 @@ public class NumberedVmdFlag
4041
4142 /**
4243 * モデルを表示するか否か返す。
44+ *
4345 * @return 表示するならtrue
4446 */
4547 public boolean isModelShown(){
@@ -48,6 +50,7 @@ public class NumberedVmdFlag
4850
4951 /**
5052 * モデルを表示するか否か設定する。
53+ *
5154 * @param shownArg 表示するならtrue
5255 */
5356 public void setModelShown(boolean shownArg){
@@ -57,6 +60,7 @@ public class NumberedVmdFlag
5760
5861 /**
5962 * 個別IKボーンフラグのリストを返す。
63+ *
6064 * @return 個別IKボーンフラグのリスト
6165 */
6266 public List<IkSwitch> getIkSwitchList(){
@@ -65,6 +69,7 @@ public class NumberedVmdFlag
6569
6670 /**
6771 * {@inheritDoc}
72+ *
6873 * @return {@inheritDoc}
6974 */
7075 @Override
@@ -74,6 +79,7 @@ public class NumberedVmdFlag
7479
7580 /**
7681 * {@inheritDoc}
82+ *
7783 * @return {@inheritDoc}
7884 */
7985 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/PosCurve.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/PosCurve.java
@@ -14,6 +14,7 @@ import java.util.List;
1414
1515 /**
1616 * 3次元位置移動のモーション補間曲線情報。
17+ *
1718 * <p>XYZ3軸それぞれに対応するベジェ曲線を3本持つ。
1819 */
1920 public class PosCurve implements Iterable<BezierParam> {
@@ -39,13 +40,15 @@ public class PosCurve implements Iterable<BezierParam> {
3940
4041 /**
4142 * {@inheritDoc}
42- * X軸、Y軸、Z軸の順で補間曲線情報を列挙する。
43+ *
44+ * <p>X軸、Y軸、Z軸の順で補間曲線情報を列挙する。
45+ *
4346 * @return {@inheritDoc} 3要素を返す列挙子
4447 */
4548 @Override
4649 public Iterator<BezierParam> iterator(){
4750 List<BezierParam> list;
48- list = new ArrayList<BezierParam>(IT_SZ);
51+ list = new ArrayList<>(IT_SZ);
4952 list.add(this.intpltXpos);
5053 list.add(this.intpltYpos);
5154 list.add(this.intpltZpos);
@@ -54,6 +57,7 @@ public class PosCurve implements Iterable<BezierParam> {
5457
5558 /**
5659 * ボーンX軸移動の補間曲線情報を返す。
60+ *
5761 * @return ボーンX軸移動の補間曲線情報
5862 */
5963 public BezierParam getIntpltXpos(){
@@ -62,6 +66,7 @@ public class PosCurve implements Iterable<BezierParam> {
6266
6367 /**
6468 * ボーンY軸移動の補間曲線情報を返す。
69+ *
6570 * @return ボーンY軸移動の補間曲線情報
6671 */
6772 public BezierParam getIntpltYpos(){
@@ -70,6 +75,7 @@ public class PosCurve implements Iterable<BezierParam> {
7075
7176 /**
7277 * ボーンZ軸移動の補間曲線情報を返す。
78+ *
7379 * @return ボーンZ軸移動の補間曲線情報
7480 */
7581 public BezierParam getIntpltZpos(){
@@ -78,6 +84,7 @@ public class PosCurve implements Iterable<BezierParam> {
7884
7985 /**
8086 * 3軸ともMMDデフォルトの直線補間か判定する。
87+ *
8188 * @return 3軸ともMMDデフォルトの直線補間ならtrue
8289 */
8390 public boolean isDefaultLinear(){
@@ -90,6 +97,7 @@ public class PosCurve implements Iterable<BezierParam> {
9097
9198 /**
9299 * {@inheritDoc}
100+ *
93101 * @return {@inheritDoc}
94102 */
95103 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/ShadowMode.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/ShadowMode.java
@@ -19,6 +19,7 @@ public enum ShadowMode {
1919
2020 /**
2121 * シャドウ描画の質がカメラからの距離の影響をあまり受けないモード。
22+ *
2223 * <p>※MMDのUIにおけるデフォルト。
2324 */
2425 MODE_1(0x01),
@@ -40,19 +41,21 @@ public enum ShadowMode {
4041
4142 /**
4243 * コンストラクタ。
44+ *
4345 * @param code 割り当て番号(byte)
4446 */
45- private ShadowMode(byte code){
47+ ShadowMode(byte code){
4648 this.code = code;
4749 return;
4850 }
4951
5052 /**
5153 * コンストラクタ。
54+ *
5255 * @param iVal 割り当て番号(int)
53- * ※上位24bitは捨てられる。
56+ * ※上位24bitは捨てられる。
5457 */
55- private ShadowMode(int iVal){
58+ ShadowMode(int iVal){
5659 this((byte)(iVal & MASK_8));
5760 return;
5861 }
@@ -60,6 +63,7 @@ public enum ShadowMode {
6063
6164 /**
6265 * byte型値に符号化された時の値を返す。
66+ *
6367 * @return byte型値に符号化された時の値
6468 */
6569 public byte getEncodedByte(){
@@ -68,6 +72,7 @@ public enum ShadowMode {
6872
6973 /**
7074 * byte型値から描画モードを復号する。
75+ *
7176 * @param bVal byte型値
7277 * @return 描画モード。未定義の値が与えられた場合はnull。
7378 */
@@ -83,7 +88,9 @@ public enum ShadowMode {
8388
8489 /**
8590 * int型値から描画モードを復号する。
91+ *
8692 * <p>上位24bitは無視される。
93+ *
8794 * @param iVal int型値
8895 * @return 描画モード。未定義の値が与えられた場合はnull。
8996 */
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/ShadowMotion.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/ShadowMotion.java
@@ -12,8 +12,10 @@ import jp.sfjp.mikutoga.vmd.AbstractNumbered;
1212
1313 /**
1414 * 影(セルフシャドウ)演出情報。
15+ *
1516 * <p>カメラからの距離情報(幾何距離の100倍?)による影演出対象の範囲指定は、
1617 * MMDのスライダUI上では0から9999までが指定可能。
18+ *
1719 * <p>MMDのスライダUI値SからVMDファイル上の生パラメターへの変換式は、
1820 * 「 0.1 - (S / 1.0E+5) 」
1921 * となる。
@@ -27,6 +29,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
2729
2830 /**
2931 * デフォルトの範囲指定生パラメータ。
32+ *
3033 * <p>MMDのスライダUI値「8875」にほぼ相当。
3134 */
3235 public static final double DEF_SCOPE = 0.01125;
@@ -59,6 +62,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
5962 /**
6063 * VMDファイル上の生パラメータ数値による演出対象範囲指定を、
6164 * MMDのUI上の距離情報(カメラからの幾何距離×100倍?)に変換する。
65+ *
6266 * @param param 生パラメータ
6367 * @return MMDのスライダUI上の距離情報
6468 */
@@ -72,6 +76,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
7276 /**
7377 * MMDのUI上の距離情報(カメラからの幾何距離×100倍?)を、
7478 * VMDファイル上の生パラメータ数値に変換する。
79+ *
7580 * @param scope MMDのスライダUI上の距離情報
7681 * @return 生パラメータ
7782 */
@@ -85,6 +90,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
8590
8691 /**
8792 * 影演出の範囲指定の生パラメータを設定する。
93+ *
8894 * @param rawScopeParam 生パラメータ
8995 */
9096 public void setRawScopeParam(double rawScopeParam) {
@@ -94,6 +100,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
94100
95101 /**
96102 * 影演出の範囲指定の生パラメータを返す。
103+ *
97104 * @return 生パラメータ
98105 */
99106 public double getRawScopeParam() {
@@ -102,6 +109,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
102109
103110 /**
104111 * 影演出の範囲指定のスライダUI値を設定する。
112+ *
105113 * @param scope スライダUI値
106114 */
107115 public void setScope(double scope){
@@ -112,6 +120,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
112120
113121 /**
114122 * 影演出の範囲指定のスライダUI値を返す。
123+ *
115124 * @return スライダUI値
116125 */
117126 public double getScope(){
@@ -122,6 +131,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
122131
123132 /**
124133 * 影描画モードを設定する。
134+ *
125135 * @param shadowMode 影描画モード
126136 * @throws NullPointerException 引数がnull
127137 */
@@ -134,6 +144,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
134144
135145 /**
136146 * 影描画モードを返す。
147+ *
137148 * @return 影描画モード
138149 */
139150 public ShadowMode getShadowMode(){
@@ -142,6 +153,7 @@ public strictfp class ShadowMotion extends AbstractNumbered {
142153
143154 /**
144155 * {@inheritDoc}
156+ *
145157 * @return {@inheritDoc}
146158 */
147159 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/VmdMotion.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/VmdMotion.java
@@ -43,13 +43,13 @@ public class VmdMotion {
4343 public VmdMotion(){
4444 super();
4545
46- this.bonePartMap = new LinkedHashMap<String, List<BoneMotion>>();
47- this.morphPartMap = new LinkedHashMap<String, List<MorphMotion>>();
46+ this.bonePartMap = new LinkedHashMap<>();
47+ this.morphPartMap = new LinkedHashMap<>();
4848
49- this.cameraMotionList = new LinkedList<CameraMotion>();
50- this.luminousMotionList = new LinkedList<LuminousMotion>();
51- this.shadowMotionList = new LinkedList<ShadowMotion>();
52- this.flagList = new LinkedList<NumberedVmdFlag>();
49+ this.cameraMotionList = new LinkedList<>();
50+ this.luminousMotionList = new LinkedList<>();
51+ this.shadowMotionList = new LinkedList<>();
52+ this.flagList = new LinkedList<>();
5353
5454 return;
5555 }
@@ -57,6 +57,7 @@ public class VmdMotion {
5757
5858 /**
5959 * モデル名を返す。
60+ *
6061 * @return モデル名
6162 */
6263 public String getModelName(){
@@ -65,8 +66,10 @@ public class VmdMotion {
6566
6667 /**
6768 * モデル名を設定する。
69+ *
6870 * <p>このモーションがモデルモーションかステージ演出情報かは、
6971 * このモデル名で判別される。
72+ *
7073 * @param modelName モデル名
7174 * @throws NullPointerException 引数がnull
7275 * @see jp.sfjp.mikutoga.vmd.VmdUniq#MODELNAME_STAGEACT
@@ -79,8 +82,10 @@ public class VmdMotion {
7982
8083 /**
8184 * モデルモーションか否か判別する。
85+ *
8286 * <p>判別は特殊なモデル名を持つか否かで決定される。
8387 * @return モデルモーションならtrue
88+ *
8489 * @see jp.sfjp.mikutoga.vmd.VmdUniq#MODELNAME_STAGEACT
8590 */
8691 public boolean isModelMotion(){
@@ -93,8 +98,10 @@ public class VmdMotion {
9398
9499 /**
95100 * フラグモーションが存在するか否か判定する。
101+ *
96102 * <p>フラグモーションは、
97103 * MMD Ver7.40以降のVMDフォーマットでなければ記録できない。
104+ *
98105 * @return 存在するならtrue
99106 */
100107 public boolean hasFlagMotion(){
@@ -104,6 +111,7 @@ public class VmdMotion {
104111
105112 /**
106113 * 順序保証されたボーンモーションマップを返す。
114+ *
107115 * @return ボーンモーションマップ
108116 * @see java.util.LinkedHashMap
109117 */
@@ -113,6 +121,7 @@ public class VmdMotion {
113121
114122 /**
115123 * 順序保証されたモーフモーションマップを返す。
124+ *
116125 * @return モーフモーションマップ
117126 * @see java.util.LinkedHashMap
118127 */
@@ -122,6 +131,7 @@ public class VmdMotion {
122131
123132 /**
124133 * カメラモーションのリストを返す。
134+ *
125135 * @return カメラモーションのリスト
126136 */
127137 public List<CameraMotion> getCameraMotionList(){
@@ -130,6 +140,7 @@ public class VmdMotion {
130140
131141 /**
132142 * 照明モーションのリストを返す。
143+ *
133144 * @return 照明モーションのリスト
134145 */
135146 public List<LuminousMotion> getLuminousMotionList(){
@@ -138,6 +149,7 @@ public class VmdMotion {
138149
139150 /**
140151 * シャドウモーションのリストを返す。
152+ *
141153 * @return シャドウモーションのリスト
142154 */
143155 public List<ShadowMotion> getShadowMotionList(){
@@ -146,6 +158,7 @@ public class VmdMotion {
146158
147159 /**
148160 * 各種フレーム番号付きフラグのリストを返す。
161+ *
149162 * @return フレーム番号付きフラグのリスト
150163 */
151164 public List<NumberedVmdFlag> getNumberedFlagList(){
@@ -155,6 +168,7 @@ public class VmdMotion {
155168 /**
156169 * ボーンモーションを追加する。
157170 * 追加順は保持される。
171+ *
158172 * @param motion ボーンモーション
159173 * @see java.util.LinkedHashMap
160174 */
@@ -163,7 +177,7 @@ public class VmdMotion {
163177
164178 List<BoneMotion> list = this.bonePartMap.get(name);
165179 if(list == null){
166- list = new LinkedList<BoneMotion>();
180+ list = new LinkedList<>();
167181 this.bonePartMap.put(name, list);
168182 }
169183
@@ -175,6 +189,7 @@ public class VmdMotion {
175189 /**
176190 * モーフモーションを追加する。
177191 * 追加順は保持される。
192+ *
178193 * @param motion モーフモーション
179194 * @see java.util.LinkedHashMap
180195 */
@@ -183,7 +198,7 @@ public class VmdMotion {
183198
184199 List<MorphMotion> list = this.morphPartMap.get(name);
185200 if(list == null){
186- list = new LinkedList<MorphMotion>();
201+ list = new LinkedList<>();
187202 this.morphPartMap.put(name, list);
188203 }
189204
@@ -214,6 +229,7 @@ public class VmdMotion {
214229
215230 /**
216231 * {@inheritDoc}
232+ *
217233 * @return {@inheritDoc}
218234 */
219235 @Override
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BasicExporter.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BasicExporter.java
@@ -71,6 +71,7 @@ class BasicExporter extends BinaryExporter {
7171
7272 /**
7373 * コンストラクタ。
74+ *
7475 * @param stream 出力ストリーム
7576 */
7677 BasicExporter(OutputStream stream){
@@ -86,6 +87,7 @@ class BasicExporter extends BinaryExporter {
8687
8788 /**
8889 * ヘッダ情報を出力する。
90+ *
8991 * @param motion モーションデータ
9092 * @throws IOException 出力エラー
9193 */
@@ -104,10 +106,12 @@ class BasicExporter extends BinaryExporter {
104106
105107 /**
106108 * モデル名を出力する。
109+ *
107110 * <p>演出データのモデル名には
108111 * 便宜的に
109112 * {@link jp.sfjp.mikutoga.vmd.VmdUniq#MODELNAME_STAGEACT}
110113 * が使われる。
114+ *
111115 * @param motion モーションデータ
112116 * @throws IOException 出力エラー
113117 * @throws IllegalTextExportException 不正なモデル名の出現
@@ -124,6 +128,7 @@ class BasicExporter extends BinaryExporter {
124128
125129 /**
126130 * ボーンモーション情報を出力する。
131+ *
127132 * @param motion モーションデータ
128133 * @throws IOException 出力エラー
129134 * @throws IllegalTextExportException 不正なボーン名の出現
@@ -138,7 +143,7 @@ class BasicExporter extends BinaryExporter {
138143
139144 Map<String, List<BoneMotion>> map = motion.getBonePartMap();
140145
141- List<BoneMotion> bmotionList = new LinkedList<BoneMotion>();
146+ List<BoneMotion> bmotionList = new LinkedList<>();
142147 for(List<BoneMotion> eachList : map.values()){
143148 bmotionList.addAll(eachList);
144149 }
@@ -165,6 +170,7 @@ class BasicExporter extends BinaryExporter {
165170
166171 /**
167172 * ボーン位置情報を出力する。
173+ *
168174 * @param position ボーン位置情報
169175 * @throws IOException 出力エラー
170176 */
@@ -183,6 +189,7 @@ class BasicExporter extends BinaryExporter {
183189
184190 /**
185191 * ボーン回転情報を出力する。
192+ *
186193 * @param rotation ボーン回転情報
187194 * @throws IOException 出力エラー
188195 */
@@ -203,6 +210,7 @@ class BasicExporter extends BinaryExporter {
203210
204211 /**
205212 * ボーンモーションの補間情報を出力する。
213+ *
206214 * @param boneMotion ボーンモーション
207215 * @throws IOException 出力エラー
208216 */
@@ -247,6 +255,7 @@ class BasicExporter extends BinaryExporter {
247255
248256 /**
249257 * 補間情報冗長部の組み立て。
258+ *
250259 * <p>※ MMDの版によって若干出力内容が異なる。
251260 */
252261 private void redundantCopy(){
@@ -265,6 +274,7 @@ class BasicExporter extends BinaryExporter {
265274
266275 /**
267276 * モーフ情報を出力する。
277+ *
268278 * @param motion モーションデータ
269279 * @throws IOException 出力エラー
270280 * @throws IllegalTextExportException 不正なモーフ名の出現
@@ -273,7 +283,7 @@ class BasicExporter extends BinaryExporter {
273283 throws IOException, IllegalTextExportException{
274284 Map<String, List<MorphMotion>> map = motion.getMorphPartMap();
275285
276- List<MorphMotion> morphList = new LinkedList<MorphMotion>();
286+ List<MorphMotion> morphList = new LinkedList<>();
277287 for(List<MorphMotion> eachList : map.values()){
278288 morphList.addAll(eachList);
279289 }
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolExporter.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolExporter.java
@@ -19,6 +19,7 @@ import jp.sfjp.mikutoga.vmd.model.VmdMotion;
1919
2020 /**
2121 * フラグ情報のエクスポーター。
22+ *
2223 * <p>MikuMikuDance Ver7.40以降でサポート
2324 */
2425 class BoolExporter extends BinaryExporter{
@@ -29,6 +30,7 @@ class BoolExporter extends BinaryExporter{
2930
3031 /**
3132 * コンストラクタ。
33+ *
3234 * @param stream 出力ストリーム
3335 */
3436 BoolExporter(OutputStream stream){
@@ -39,6 +41,7 @@ class BoolExporter extends BinaryExporter{
3941
4042 /**
4143 * フラグ情報を出力する。
44+ *
4245 * @param motion モーションデータ
4346 * @throws IOException 出力エラー
4447 * @throws IllegalTextExportException 不正な文字列が指定された。
@@ -70,6 +73,7 @@ class BoolExporter extends BinaryExporter{
7073
7174 /**
7275 * IK有効フラグを出力する。
76+ *
7377 * @param flag フラグ情報
7478 * @throws IOException 出力エラー
7579 * @throws IllegalTextExportException 不正な文字列が指定された。
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolLoader.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolLoader.java
@@ -17,6 +17,7 @@ import jp.sfjp.mikutoga.vmd.parser.VmdBoolHandler;
1717
1818 /**
1919 * フラグ情報のビルダ。
20+ *
2021 * <p>MikuMikuDance Ver7.40以降でサポート
2122 */
2223 class BoolLoader implements VmdBoolHandler{
@@ -28,6 +29,7 @@ class BoolLoader implements VmdBoolHandler{
2829
2930 /**
3031 * コンストラクタ。
32+ *
3133 * @param vmdMotion モーションデータの格納先。
3234 */
3335 BoolLoader(VmdMotion vmdMotion){
@@ -39,6 +41,7 @@ class BoolLoader implements VmdBoolHandler{
3941
4042 /**
4143 * {@inheritDoc}
44+ *
4245 * @param stage {@inheritDoc}
4346 * @param loops {@inheritDoc}
4447 * @throws MmdFormatException {@inheritDoc}
@@ -57,6 +60,7 @@ class BoolLoader implements VmdBoolHandler{
5760
5861 /**
5962 * {@inheritDoc}
63+ *
6064 * @param stage {@inheritDoc}
6165 * @throws MmdFormatException {@inheritDoc}
6266 */
@@ -77,6 +81,7 @@ class BoolLoader implements VmdBoolHandler{
7781
7882 /**
7983 * {@inheritDoc}
84+ *
8085 * @param stage {@inheritDoc}
8186 * @throws MmdFormatException {@inheritDoc}
8287 */
@@ -94,6 +99,7 @@ class BoolLoader implements VmdBoolHandler{
9499
95100 /**
96101 * {@inheritDoc}
102+ *
97103 * @param show {@inheritDoc}
98104 * @param keyFrameNo {@inheritDoc}
99105 * @throws MmdFormatException {@inheritDoc}
@@ -108,6 +114,7 @@ class BoolLoader implements VmdBoolHandler{
108114
109115 /**
110116 * {@inheritDoc}
117+ *
111118 * @param boneName {@inheritDoc}
112119 * @param validIk {@inheritDoc}
113120 * @param keyFrameNo {@inheritDoc}
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdExporter.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdExporter.java
@@ -34,7 +34,9 @@ public class VmdExporter {
3434
3535 /**
3636 * モーションデータをVMDファイル形式で出力する。
37+ *
3738 * <p>異常時には出力データのフラッシュが試みられる。
39+ *
3840 * @param motion モーションデータ
3941 * @param ostream 出力先ストリーム
4042 * @throws IOException 出力エラー
@@ -58,6 +60,7 @@ public class VmdExporter {
5860
5961 /**
6062 * モーションデータをVMDファイル形式で出力する。
63+ *
6164 * @param motion モーションデータ
6265 * @throws IOException 出力エラー
6366 * @throws IllegalVmdDataException モーションデータに不備が発見された
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdLoader.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdLoader.java
@@ -39,6 +39,7 @@ public class VmdLoader {
3939
4040 /**
4141 * 正常パース時に読み残したデータがあったか判定する。
42+ *
4243 * @return 読み残したデータがあればtrue
4344 * @throws IllegalStateException まだパースを試みていない。
4445 */
@@ -50,9 +51,12 @@ public class VmdLoader {
5051 /**
5152 * ボーンモーション補間情報冗長部のチェックを行うか否か設定する。
5253 * デフォルトではチェックを行わない。
54+ *
5355 * <p>※MMDVer7.30前後のVMD出力不具合を回避したい場合は、
5456 * オフにするとパースに成功する場合がある。
57+ *
5558 * <p>※MMD Ver7.39x64以降はチェック回避必須。
59+ *
5660 * @param mode チェックさせたければtrue
5761 */
5862 public void setRedundantCheck(boolean mode){
@@ -63,6 +67,7 @@ public class VmdLoader {
6367 /**
6468 * VMDファイルの読み込みを行いモーション情報を返す。
6569 * 1インスタンスにつき一度しかロードできない。
70+ *
6671 * @param source VMDファイル入力ソース
6772 * @return モーション情報
6873 * @throws IOException 入力エラー
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/ExtraXmlExporter.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/ExtraXmlExporter.java
@@ -15,12 +15,14 @@ import jp.sfjp.mikutoga.xml.XmlExporter;
1515
1616 /**
1717 * XML出力機構の共通部。
18+ *
1819 * <p>主にベジェ補間パラメータ出力部。
1920 */
2021 class ExtraXmlExporter extends ProxyXmlExporter {
2122
2223 /**
2324 * コンストラクタ。
25+ *
2426 * @param delegate 委譲先
2527 */
2628 ExtraXmlExporter(XmlExporter delegate){
@@ -31,6 +33,7 @@ class ExtraXmlExporter extends ProxyXmlExporter {
3133
3234 /**
3335 * 位置移動補間カーブを出力する。
36+ *
3437 * @param posCurve 移動補間情報
3538 * @throws IOException 出力エラー
3639 */
@@ -59,6 +62,7 @@ class ExtraXmlExporter extends ProxyXmlExporter {
5962
6063 /**
6164 * ベジェ曲線による補間曲線情報を出力する。
65+ *
6266 * @param bezier ベジェ曲線
6367 * @throws IOException 出力エラー
6468 */
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema110820.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema110820.java
@@ -9,15 +9,11 @@ package jp.sfjp.mikutoga.vmd.model.xml;
99
1010 import java.net.URI;
1111 import java.net.URISyntaxException;
12-import jp.sfjp.mikutoga.xml.LocalXmlResource;
1312
1413 /**
1514 * 110820形式XML各種リソースの定義。
1615 */
17-public final class Schema110820 implements LocalXmlResource{
18-
19- /** 唯一のシングルトン。 */
20- public static final Schema110820 SINGLETON;
16+public final class Schema110820{
2117
2218 /** XML名前空間識別子。 */
2319 public static final String NS_VMDXML =
@@ -32,8 +28,10 @@ public final class Schema110820 implements LocalXmlResource{
3228 public static final String LOCAL_SCHEMA_VMDXML =
3329 "resources/vmdxml-110820.xsd";
3430
35- private static final URI URI_SCHEMA_VMDXML = URI.create(SCHEMA_VMDXML);
36- private static final URI RES_SCHEMA_VMDXML;
31+ /** schema URI. */
32+ public static final URI URI_SCHEMA_VMDXML = URI.create(SCHEMA_VMDXML);
33+ /** local resource URI. */
34+ public static final URI RES_SCHEMA_VMDXML;
3735
3836 private static final Class<?> THISCLASS = Schema110820.class;
3937
@@ -44,8 +42,6 @@ public final class Schema110820 implements LocalXmlResource{
4442 }catch(URISyntaxException e){
4543 throw new ExceptionInInitializerError(e);
4644 }
47-
48- SINGLETON = new Schema110820();
4945 }
5046
5147
@@ -53,28 +49,7 @@ public final class Schema110820 implements LocalXmlResource{
5349 * コンストラクタ。
5450 */
5551 private Schema110820(){
56- super();
57- assert this.getClass() == THISCLASS;
58- return;
59- }
60-
61-
62- /**
63- * {@inheritDoc}
64- * @return {@inheritDoc}
65- */
66- @Override
67- public URI getOriginalResource(){
68- return URI_SCHEMA_VMDXML;
69- }
70-
71- /**
72- * {@inheritDoc}
73- * @return {@inheritDoc}
74- */
75- @Override
76- public URI getLocalResource(){
77- return RES_SCHEMA_VMDXML;
52+ assert false;
7853 }
7954
8055 }
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema130609.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema130609.java
@@ -9,16 +9,13 @@ package jp.sfjp.mikutoga.vmd.model.xml;
99
1010 import java.net.URI;
1111 import java.net.URISyntaxException;
12-import jp.sfjp.mikutoga.xml.LocalXmlResource;
1312
1413 /**
1514 * 130609形式XML各種リソースの定義。
15+ *
1616 * <p>MikuMikuDance Ver7.40 の新VMDファイルフォーマット対応。
1717 */
18-public final class Schema130609 implements LocalXmlResource{
19-
20- /** 唯一のシングルトン。 */
21- public static final Schema130609 SINGLETON;
18+public final class Schema130609{
2219
2320 /** XML名前空間識別子。 */
2421 public static final String NS_VMDXML =
@@ -33,8 +30,10 @@ public final class Schema130609 implements LocalXmlResource{
3330 public static final String LOCAL_SCHEMA_VMDXML =
3431 "resources/vmdxml-130609.xsd";
3532
36- private static final URI URI_SCHEMA_VMDXML = URI.create(SCHEMA_VMDXML);
37- private static final URI RES_SCHEMA_VMDXML;
33+ /** schema URI. */
34+ public static final URI URI_SCHEMA_VMDXML = URI.create(SCHEMA_VMDXML);
35+ /** local resource URI. */
36+ public static final URI RES_SCHEMA_VMDXML;
3837
3938 private static final Class<?> THISCLASS = Schema130609.class;
4039
@@ -45,8 +44,6 @@ public final class Schema130609 implements LocalXmlResource{
4544 }catch(URISyntaxException e){
4645 throw new ExceptionInInitializerError(e);
4746 }
48-
49- SINGLETON = new Schema130609();
5047 }
5148
5249
@@ -54,28 +51,7 @@ public final class Schema130609 implements LocalXmlResource{
5451 * コンストラクタ。
5552 */
5653 private Schema130609(){
57- super();
58- assert this.getClass() == THISCLASS;
59- return;
60- }
61-
62-
63- /**
64- * {@inheritDoc}
65- * @return {@inheritDoc}
66- */
67- @Override
68- public URI getOriginalResource(){
69- return URI_SCHEMA_VMDXML;
70- }
71-
72- /**
73- * {@inheritDoc}
74- * @return {@inheritDoc}
75- */
76- @Override
77- public URI getLocalResource(){
78- return RES_SCHEMA_VMDXML;
54+ assert false;
7955 }
8056
8157 }
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdTag.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdTag.java
@@ -57,7 +57,7 @@ enum VmdTag {
5757
5858
5959 private static final Map<String, VmdTag> NAME_MAP =
60- new HashMap<String, VmdTag>();
60+ new HashMap<>();
6161
6262 static{
6363 for(VmdTag tag : values()){
@@ -73,7 +73,7 @@ enum VmdTag {
7373 * コンストラクタ。
7474 * @param tagName 要素名
7575 */
76- private VmdTag(String tagName){
76+ VmdTag(String tagName){
7777 this.tagName = tagName.intern();
7878 return;
7979 }
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdXmlExporter.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdXmlExporter.java
@@ -24,7 +24,7 @@ import jp.sfjp.mikutoga.vmd.model.MorphMotion;
2424 import jp.sfjp.mikutoga.vmd.model.PosCurve;
2525 import jp.sfjp.mikutoga.vmd.model.VmdMotion;
2626 import jp.sfjp.mikutoga.xml.BasicXmlExporter;
27-import jp.sfjp.mikutoga.xml.XmlResourceResolver;
27+import jp.sfjp.mikutoga.xml.SchemaUtil;
2828
2929 /**
3030 * VMDモーションデータをXMLへエクスポートする。
@@ -71,6 +71,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
7171
7272 /**
7373 * 出力XMLファイル種別を設定する。
74+ *
7475 * @param type ファイル種別
7576 */
7677 public void setXmlFileType(XmlMotionFileType type){
@@ -95,6 +96,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
9596
9697 /**
9798 * 出力XMLファイル種別を返す。
99+ *
98100 * @return ファイル種別
99101 */
100102 public XmlMotionFileType getXmlFileType(){
@@ -103,7 +105,9 @@ public class VmdXmlExporter extends BasicXmlExporter {
103105
104106 /**
105107 * ボーン回転量をクォータニオンで出力するか否か設定する。
108+ *
106109 * <p>デフォルトではtrue
110+ *
107111 * @param mode trueだとクォータニオン、falseだとオイラー角で出力される。
108112 */
109113 public void setQuaternionMode(boolean mode){
@@ -112,6 +116,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
112116
113117 /**
114118 * ボーン回転量をクォータニオンで出力するか否か返す。
119+ *
115120 * @return クォータニオンで出力するならtrue
116121 */
117122 public boolean isQuaternionMode(){
@@ -120,6 +125,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
120125
121126 /**
122127 * Generatorメタ情報を設定する。
128+ *
123129 * @param generatorArg Generatorメタ情報。nullならXML出力しない。
124130 */
125131 public void setGenerator(String generatorArg){
@@ -129,6 +135,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
129135
130136 /**
131137 * Generatorメタ情報を取得する。
138+ *
132139 * @return Generatorメタ情報。XML出力しないならnullを返す。
133140 */
134141 public String getGenerator(){
@@ -137,6 +144,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
137144
138145 /**
139146 * VMDモーションデータをXML形式で出力する。
147+ *
140148 * @param vmdMotion VMDモーションデータ
141149 * @param xmlOut 出力先
142150 * @throws IOException 出力エラー
@@ -156,6 +164,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
156164
157165 /**
158166 * VMDモーションデータをXML形式で出力する。
167+ *
159168 * @param vmdMotion VMDモーションデータ
160169 * @throws IOException 出力エラー
161170 * @throws IllegalVmdDataException 不正なモーションデータを検出
@@ -187,6 +196,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
187196
188197 /**
189198 * ルート要素がオープンするまでの各種宣言を出力する。
199+ *
190200 * @throws IOException 出力エラー
191201 */
192202 private void putVmdRootOpen() throws IOException{
@@ -217,7 +227,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
217227 ind().putOpenSTag(VmdTag.VMD_MOTION.tag()).ln();
218228 pushNest();
219229 ind().putAttr("xmlns", namespace).ln();
220- ind().putAttr("xmlns:" + XSINS, XmlResourceResolver.NS_XSD).ln();
230+ ind().putAttr("xmlns:" + XSINS, SchemaUtil.NS_XSD).ln();
221231
222232 ind().putRawText(XSINS).putRawText(":schemaLocation=")
223233 .putRawCh('"');
@@ -235,6 +245,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
235245
236246 /**
237247 * ジェネレータ名を出力する。
248+ *
238249 * @throws IOException 出力エラー
239250 */
240251 private void putGenerator() throws IOException{
@@ -252,6 +263,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
252263
253264 /**
254265 * モデル名を出力する。
266+ *
255267 * @param vmdMotion モーションデータ
256268 * @throws IOException 出力エラー
257269 */
@@ -276,6 +288,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
276288
277289 /**
278290 * ボーンモーションデータを出力する。
291+ *
279292 * @param vmdMotion モーションデータ
280293 * @throws IOException 出力エラー
281294 */
@@ -304,6 +317,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
304317
305318 /**
306319 * ボーン別モーションデータを出力する。
320+ *
307321 * @param boneName ボーン名
308322 * @param list ボーンモーションのリスト
309323 * @throws IOException 出力エラー
@@ -336,6 +350,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
336350
337351 /**
338352 * ボーンモーションを出力する。
353+ *
339354 * @param boneMotion ボーンモーション
340355 * @throws IOException 出力エラー
341356 */
@@ -362,6 +377,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
362377
363378 /**
364379 * ボーン位置を出力する。
380+ *
365381 * @param boneMotion ボーンモーション
366382 * @throws IOException 出力エラー
367383 */
@@ -401,6 +417,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
401417
402418 /**
403419 * ボーン回転を出力する。
420+ *
404421 * @param boneMotion ボーンモーション
405422 * @throws IOException 出力エラー
406423 */
@@ -442,6 +459,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
442459
443460 /**
444461 * ボーン回転を出力する。
462+ *
445463 * @param boneMotion ボーンモーション
446464 * @throws IOException 出力エラー
447465 */
@@ -481,6 +499,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
481499
482500 /**
483501 * モーフデータを出力する。
502+ *
484503 * @param vmdMotion モーションデータ
485504 * @throws IOException 出力エラー
486505 */
@@ -501,6 +520,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
501520
502521 /**
503522 * 箇所別モーフデータを出力する。
523+ *
504524 * @param listMap モーフデータの名前付きリストマップ
505525 * @throws IOException 出力エラー
506526 */
@@ -539,6 +559,7 @@ public class VmdXmlExporter extends BasicXmlExporter {
539559
540560 /**
541561 * 個別のモーフモーションを出力する。
562+ *
542563 * @param morphMotion モーフモーション
543564 * @throws IOException 出力エラー
544565 */
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlHandler.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlHandler.java
@@ -16,6 +16,7 @@ import org.xml.sax.SAXException;
1616
1717 /**
1818 * XMLモーションファイルパース用SAXハンドラ。
19+ *
1920 * <p>下位リスナに各種通知が振り分けられる。
2021 */
2122 class XmlHandler implements ContentHandler{
@@ -50,6 +51,7 @@ class XmlHandler implements ContentHandler{
5051
5152 /**
5253 * ビルド対象のモーションを返す。
54+ *
5355 * @return ビルド対象のモーション
5456 */
5557 VmdMotion getVmdMotion(){
@@ -58,6 +60,7 @@ class XmlHandler implements ContentHandler{
5860
5961 /**
6062 * {@inheritDoc}
63+ *
6164 * @throws SAXException {@inheritDoc}
6265 */
6366 @Override
@@ -74,6 +77,7 @@ class XmlHandler implements ContentHandler{
7477
7578 /**
7679 * {@inheritDoc}
80+ *
7781 * @throws SAXException {@inheritDoc}
7882 */
7983 @Override
@@ -84,6 +88,7 @@ class XmlHandler implements ContentHandler{
8488
8589 /**
8690 * {@inheritDoc}
91+ *
8792 * @param prefix {@inheritDoc}
8893 * @param uri {@inheritDoc}
8994 * @throws SAXException {@inheritDoc}
@@ -91,8 +96,8 @@ class XmlHandler implements ContentHandler{
9196 @Override
9297 public void startPrefixMapping(String prefix, String uri)
9398 throws SAXException {
94- if( Schema110820.NS_VMDXML.equals(uri)
95- || Schema130609.NS_VMDXML.equals(uri) ){
99+ if( Schema110820.NS_VMDXML.equals(uri)
100+ || Schema130609.NS_VMDXML.equals(uri) ){
96101 this.nspfx = prefix;
97102 this.nsuri = uri;
98103 }
@@ -101,6 +106,7 @@ class XmlHandler implements ContentHandler{
101106
102107 /**
103108 * {@inheritDoc}
109+ *
104110 * @param prefix {@inheritDoc}
105111 * @throws SAXException {@inheritDoc}
106112 */
@@ -115,6 +121,7 @@ class XmlHandler implements ContentHandler{
115121
116122 /**
117123 * {@inheritDoc}
124+ *
118125 * @param uri {@inheritDoc}
119126 * @param localName {@inheritDoc}
120127 * @param qName {@inheritDoc}
@@ -149,6 +156,7 @@ class XmlHandler implements ContentHandler{
149156
150157 /**
151158 * タグ出現に従い通知リスナを切り替える。
159+ *
152160 * @param tag タグ種別
153161 */
154162 private void switchListener(VmdTag tag){
@@ -176,6 +184,7 @@ class XmlHandler implements ContentHandler{
176184
177185 /**
178186 * {@inheritDoc}
187+ *
179188 * @param uri {@inheritDoc}
180189 * @param localName {@inheritDoc}
181190 * @param qName {@inheritDoc}
@@ -198,6 +207,7 @@ class XmlHandler implements ContentHandler{
198207
199208 /**
200209 * {@inheritDoc}
210+ *
201211 * @param locator {@inheritDoc}
202212 */
203213 @Override
@@ -207,6 +217,7 @@ class XmlHandler implements ContentHandler{
207217
208218 /**
209219 * {@inheritDoc}
220+ *
210221 * @param target {@inheritDoc}
211222 * @param data {@inheritDoc}
212223 * @throws SAXException {@inheritDoc}
@@ -219,6 +230,7 @@ class XmlHandler implements ContentHandler{
219230
220231 /**
221232 * {@inheritDoc}
233+ *
222234 * @param ch {@inheritDoc}
223235 * @param start {@inheritDoc}
224236 * @param length {@inheritDoc}
@@ -232,6 +244,7 @@ class XmlHandler implements ContentHandler{
232244
233245 /**
234246 * {@inheritDoc}
247+ *
235248 * @param ch {@inheritDoc}
236249 * @param start {@inheritDoc}
237250 * @param length {@inheritDoc}
@@ -245,6 +258,7 @@ class XmlHandler implements ContentHandler{
245258
246259 /**
247260 * {@inheritDoc}
261+ *
248262 * @param name {@inheritDoc}
249263 * @throws SAXException {@inheritDoc}
250264 */
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlMotionFileType.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlMotionFileType.java
@@ -14,7 +14,9 @@ public enum XmlMotionFileType {
1414
1515 /**
1616 * XMLファイル(自動判別)。
17+ *
1718 * <p>読み込み時のスキーマ判別は自動。
19+ *
1820 * <p>書き込み時のスキーマは最新。
1921 */
2022 XML_AUTO,
@@ -34,6 +36,4 @@ public enum XmlMotionFileType {
3436 */
3537 XML_130609,
3638
37- ;
38-
3939 }
--- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlVmdLoader.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlVmdLoader.java
@@ -25,7 +25,9 @@ public class XmlVmdLoader {
2525
2626 /**
2727 * コンストラクタ。
28+ *
2829 * <p>XMLリーダは名前空間をサポートしていなければならない。
30+ *
2931 * @param reader XMLリーダ
3032 * @throws NullPointerException 引数がnull
3133 */
@@ -39,6 +41,7 @@ public class XmlVmdLoader {
3941
4042 /**
4143 * XMLのパースを開始する。
44+ *
4245 * @param source XML入力
4346 * @return モーションデータ
4447 * @throws SAXException 構文エラー
--- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/CmdLine.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/CmdLine.java
@@ -33,6 +33,7 @@ final class CmdLine {
3333
3434 /**
3535 * コマンドライン解析を行う。
36+ *
3637 * @param args コマンドライン
3738 * @return 解析されたコマンドライン並び
3839 */
@@ -43,11 +44,12 @@ final class CmdLine {
4344
4445 /**
4546 * コマンドライン解析を行う。
47+ *
4648 * @param argList コマンドライン
4749 * @return 解析されたコマンドライン並び
4850 */
4951 static List<CmdLine> parse(List<String> argList){
50- List<CmdLine> result = new LinkedList<CmdLine>();
52+ List<CmdLine> result = new LinkedList<>();
5153
5254 Iterator<String> it = argList.iterator();
5355 while (it.hasNext()) {
@@ -62,7 +64,7 @@ final class CmdLine {
6264 if (info.opt != null) {
6365 exArgNum = info.opt.getExArgNum();
6466 }
65- info.optArgs = new ArrayList<String>(exArgNum + 1);
67+ info.optArgs = new ArrayList<>(exArgNum + 1);
6668
6769 info.optArgs.add(arg);
6870
@@ -81,8 +83,9 @@ final class CmdLine {
8183
8284 /**
8385 * オプション識別子を返す。
86+ *
8487 * @return オプション識別子。
85- * オプションを伴わない単純なコマンドライン引数の場合はnullを返す。
88+ * オプションを伴わない単純なコマンドライン引数の場合はnullを返す。
8689 */
8790 OptSwitch getOptSwitch() {
8891 return this.opt;
@@ -90,9 +93,10 @@ final class CmdLine {
9093
9194 /**
9295 * オプションに付随する引数群を返す。
96+ *
9397 * @return オプションに付随する引数群。
94- * 先頭要素はオプション識別子。
95- * 単純なコマンドライン引数の場合は自身が1要素のみを占める。
98+ * 先頭要素はオプション識別子。
99+ * 単純なコマンドライン引数の場合は自身が1要素のみを占める。
96100 */
97101 List<String> getOptArgs() {
98102 return this.optArgs;
--- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/MotionFileType.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/MotionFileType.java
@@ -26,7 +26,9 @@ public enum MotionFileType {
2626
2727 /**
2828 * XMLファイル(自動判別)。
29+ *
2930 * <p>読み込み時のスキーマ判別は自動。
31+ *
3032 * <p>書き込み時のスキーマは最新。
3133 */
3234 XML_AUTO,
@@ -52,14 +54,16 @@ public enum MotionFileType {
5254 /**
5355 * コンストラクタ。
5456 */
55- private MotionFileType(){
57+ MotionFileType(){
5658 return;
5759 }
5860
5961
6062 /**
6163 * ファイル種別をXMLファイル種別に変換する。
64+ *
6265 * <p>未定義の場合はXML_AUTOを返す。
66+ *
6367 * @return XMLファイル種別
6468 */
6569 public XmlMotionFileType toXmlType(){
@@ -85,6 +89,7 @@ public enum MotionFileType {
8589
8690 /**
8791 * ファイル種別がXMLか判定する。
92+ *
8893 * @return XMLならtrue
8994 */
9095 public boolean isXml(){
@@ -102,6 +107,7 @@ public enum MotionFileType {
102107
103108 /**
104109 * ファイル種別がVMDか判定する。
110+ *
105111 * @return VMDならtrue
106112 */
107113 public boolean isVmd(){
--- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptInfo.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptInfo.java
@@ -74,6 +74,7 @@ final class OptInfo {
7474
7575 /**
7676 * フォーマット種別指定子をデコードする。
77+ *
7778 * @param arg 文字列
7879 * @return デコード結果。
7980 * @throws CmdLineException 不正なフォーマット種別
@@ -100,6 +101,7 @@ final class OptInfo {
100101
101102 /**
102103 * 改行文字指定子をデコードする。
104+ *
103105 * @param arg 文字列
104106 * @return デコード結果。
105107 * @throws CmdLineException 不正なフォーマット種別
@@ -122,6 +124,7 @@ final class OptInfo {
122124
123125 /**
124126 * ブール指定子をデコードする。
127+ *
125128 * @param arg 文字列
126129 * @return デコード結果。
127130 * @throws CmdLineException 不正なフォーマット種別
@@ -130,13 +133,13 @@ final class OptInfo {
130133 throws CmdLineException{
131134 boolean result;
132135
133- if( "on" .equals(arg)
134- || "true".equals(arg)
135- || "yes" .equals(arg) ){
136+ if( "on" .equals(arg)
137+ || "true".equals(arg)
138+ || "yes" .equals(arg) ){
136139 result = true;
137- }else if( "off" .equals(arg)
138- || "false".equals(arg)
139- || "no" .equals(arg) ){
140+ }else if( "off" .equals(arg)
141+ || "false".equals(arg)
142+ || "no" .equals(arg) ){
140143 result = false;
141144 }else{
142145 String errMsg = MessageFormat.format(ERRMSG_INVBOOL, arg);
@@ -148,7 +151,9 @@ final class OptInfo {
148151
149152 /**
150153 * ファイル名からファイル種別を類推する。
154+ *
151155 * <p>拡張子が「.vmd」ならVMDファイル、「.xml」ならXMLファイル。
156+ *
152157 * @param fileName ファイル名
153158 * @return ファイル種別。識別不可ならNONE。
154159 */
@@ -165,6 +170,7 @@ final class OptInfo {
165170
166171 /**
167172 * ヘルプ要求があるかコマンドライン列を調べる。
173+ *
168174 * @param cmds コマンドライン列
169175 * @return ヘルプ要求があればtrue
170176 */
@@ -180,6 +186,7 @@ final class OptInfo {
180186
181187 /**
182188 * 個別のオプション情報を格納する。
189+ *
183190 * @param opt オプション識別子
184191 * @param exArg 引数。なければnull
185192 * @param result オプション情報格納先
@@ -230,6 +237,7 @@ final class OptInfo {
230237
231238 /**
232239 * コマンドラインを解析する。
240+ *
233241 * @param args コマンドライン
234242 * @return オプション情報
235243 * @throws CmdLineException 不正なコマンドライン
@@ -267,7 +275,9 @@ final class OptInfo {
267275
268276 /**
269277 * 単純なコマンドラインエラーを検出する。
278+ *
270279 * <p>検出項目は未知のオプションおよび不正な引数の個数
280+ *
271281 * @param cmdLines コマンドライン
272282 * @throws CmdLineException 異常系
273283 */
@@ -300,6 +310,7 @@ final class OptInfo {
300310
301311 /**
302312 * ファイルフォーマット情報の推測を行う。
313+ *
303314 * @param result オプション情報
304315 */
305316 private static void fixFormat(OptInfo result){
@@ -316,6 +327,7 @@ final class OptInfo {
316327
317328 /**
318329 * オプション整合性の事後検査。
330+ *
319331 * @param result オプション情報
320332 * @throws CmdLineException 不正なオプション設定
321333 */
@@ -343,6 +355,7 @@ final class OptInfo {
343355
344356 /**
345357 * ヘルプ表示が必要か否か判定する。
358+ *
346359 * @return 必要ならtrue
347360 */
348361 boolean needHelp(){
@@ -351,6 +364,7 @@ final class OptInfo {
351364
352365 /**
353366 * 入力ファイル種別を返す。
367+ *
354368 * @return 入力ファイル種別
355369 */
356370 MotionFileType getInFileType(){
@@ -359,6 +373,7 @@ final class OptInfo {
359373
360374 /**
361375 * 出力ファイル種別を返す。
376+ *
362377 * @return 出力ファイル種別
363378 */
364379 MotionFileType getOutFileType(){
@@ -367,6 +382,7 @@ final class OptInfo {
367382
368383 /**
369384 * 入力ファイル名を返す。
385+ *
370386 * @return 入力ファイル名
371387 */
372388 String getInFilename(){
@@ -375,6 +391,7 @@ final class OptInfo {
375391
376392 /**
377393 * 出力ファイル名を返す。
394+ *
378395 * @return 出力ファイル名
379396 */
380397 String getOutFilename(){
@@ -383,6 +400,7 @@ final class OptInfo {
383400
384401 /**
385402 * 上書きモードか否か返す。
403+ *
386404 * @return 上書きモードならtrue
387405 */
388406 boolean overwriteMode(){
@@ -391,6 +409,7 @@ final class OptInfo {
391409
392410 /**
393411 * XML改行文字を返す。
412+ *
394413 * @return 改行文字
395414 */
396415 String getNewline(){
@@ -399,6 +418,7 @@ final class OptInfo {
399418
400419 /**
401420 * ジェネレータ名を返す。
421+ *
402422 * @return ジェネレータ名。表示したくない時はnull
403423 */
404424 String getGenerator(){
@@ -407,6 +427,7 @@ final class OptInfo {
407427
408428 /**
409429 * 回転情報のXML出力形式を得る。
430+ *
410431 * @return クォータニオン形式ならtrue、YXZオイラー角形式ならfalse。
411432 */
412433 boolean isQuaterniomMode(){
--- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptSwitch.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptSwitch.java
@@ -54,7 +54,7 @@ enum OptSwitch {
5454 private static final Map<String, OptSwitch> MAP_OPT;
5555
5656 static{
57- Map<String, OptSwitch> map = new HashMap<String, OptSwitch>();
57+ Map<String, OptSwitch> map = new HashMap<>();
5858
5959 for(OptSwitch opt : values()){
6060 for(String cmdarg : opt.cmdopts){
@@ -73,10 +73,11 @@ enum OptSwitch {
7373
7474 /**
7575 * コンストラクタ。
76+ *
7677 * @param argnum 必要な引数の数
7778 * @param cmdopts オプションスイッチパターン群
7879 */
79- private OptSwitch(int argnum, String... cmdopts) {
80+ OptSwitch(int argnum, String... cmdopts) {
8081 this.exArgNum = argnum;
8182
8283 List<String> optlist;
@@ -90,6 +91,7 @@ enum OptSwitch {
9091
9192 /**
9293 * コンソール提示用ヘルプ出力文字列を返す。
94+ *
9395 * @return オプションヘルプ文字列
9496 */
9597 static String getConsoleHelp(){
@@ -98,7 +100,9 @@ enum OptSwitch {
98100
99101 /**
100102 * 文字列に合致するオプションを返す。
103+ *
101104 * <p>一つのオプションが複数の表記に合致する場合がある。
105+ *
102106 * @param cmd 文字列
103107 * @return オプション種別。合致する物が見つからなければnull
104108 */
@@ -110,7 +114,9 @@ enum OptSwitch {
110114
111115 /**
112116 * 各オプションに後続する引数の数を返す。
117+ *
113118 * <p>引数をとらないオプションは0を返す。
119+ *
114120 * @return 引数の数
115121 */
116122 int getExArgNum(){
--- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2Xml.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2Xml.java
@@ -72,7 +72,7 @@ public final class Vmd2Xml {
7272 + "If you want to overwrite, use -f.";
7373
7474 private static final String MSG_OLDJRE = "You need JRE {0} or later.";
75- private static final String REQUIRED_JRE = "1.6";
75+ private static final String REQUIRED_JRE = "1.8";
7676
7777 static{
7878 THISCLASS = Vmd2Xml.class;
@@ -111,6 +111,7 @@ public final class Vmd2Xml {
111111
112112 /**
113113 * VMを終了させる。
114+ *
114115 * @param code 終了コード
115116 * @see java.lang.System#exit(int)
116117 */
@@ -122,6 +123,7 @@ public final class Vmd2Xml {
122123
123124 /**
124125 * 共通エラーメッセージを出力する。
126+ *
125127 * @param text 個別メッセージ
126128 */
127129 private static void errMsg(String text){
@@ -132,6 +134,7 @@ public final class Vmd2Xml {
132134
133135 /**
134136 * 標準エラー出力へ例外情報出力。
137+ *
135138 * @param ex 例外
136139 * @param dumpStack スタックトレースを出力するならtrue
137140 */
@@ -148,6 +151,7 @@ public final class Vmd2Xml {
148151
149152 /**
150153 * 標準エラー出力へ例外情報出力。
154+ *
151155 * @param ex 例外
152156 */
153157 private static void thPrintln(Throwable ex){
@@ -158,6 +162,7 @@ public final class Vmd2Xml {
158162 /**
159163 * 入出力エラー処理。
160164 * 例外を出力してVM終了する。
165+ *
161166 * @param ex 例外
162167 */
163168 private static void ioError(IOException ex){
@@ -168,6 +173,7 @@ public final class Vmd2Xml {
168173 /**
169174 * XML構文エラー処理。
170175 * 例外を出力してVM終了する。
176+ *
171177 * @param ex 例外
172178 */
173179 private static void xmlError(Throwable ex){
@@ -178,6 +184,7 @@ public final class Vmd2Xml {
178184 /**
179185 * VMDファイルフォーマットエラー処理。
180186 * 例外を出力してVM終了する。
187+ *
181188 * @param ex 例外
182189 */
183190 private static void vmdError(MmdFormatException ex){
@@ -188,6 +195,7 @@ public final class Vmd2Xml {
188195 /**
189196 * 内部エラー処理。
190197 * 例外を出力してVM終了する。
198+ *
191199 * @param ex 例外
192200 */
193201 private static void internalError(Throwable ex){
@@ -223,8 +231,11 @@ public final class Vmd2Xml {
223231
224232 /**
225233 * ファイルサイズを0に切り詰める。
234+ *
226235 * <p>ファイルが存在しなければなにもしない。
236+ *
227237 * <p>通常ファイルでなければなにもしない。
238+ *
228239 * @param file ファイル
229240 * @throws IOException 入出力エラー
230241 */
@@ -251,7 +262,9 @@ public final class Vmd2Xml {
251262
252263 /**
253264 * 入力ソースを準備する。
265+ *
254266 * <p>入力ファイルが通常ファイルとして存在しなければエラー終了。
267+ *
255268 * @param optInfo オプション情報
256269 * @return 入力ソース
257270 */
@@ -273,8 +286,11 @@ public final class Vmd2Xml {
273286
274287 /**
275288 * 出力ストリームを準備する。
289+ *
276290 * <p>出力ファイルが通常ファイルでない場合はエラー終了。
291+ *
277292 * <p>既存の出力ファイルに上書き指示が伴っていなければエラー終了。
293+ *
278294 * @param optInfo オプション情報
279295 * @return 出力ストリーム
280296 */
@@ -319,6 +335,7 @@ public final class Vmd2Xml {
319335
320336 /**
321337 * オプション情報に従いコンバータを生成する。
338+ *
322339 * @param optInfo オプション情報
323340 * @return コンバータ
324341 */
@@ -337,7 +354,9 @@ public final class Vmd2Xml {
337354
338355 /**
339356 * 実際のコンバート作業と異常系処理を行う。
357+ *
340358 * <p>異常系が起きた場合、このメソッドは制御を戻さない。
359+ *
341360 * @param converter コンバータ
342361 * @param source 入力ソース
343362 * @param ostream 出力ストリーム
@@ -353,9 +372,7 @@ public final class Vmd2Xml {
353372 internalError(e);
354373 }catch(MmdFormatException e){
355374 vmdError(e);
356- }catch(TogaXmlException e){
357- xmlError(e);
358- }catch(SAXException e){
375+ }catch(TogaXmlException | SAXException e){
359376 xmlError(e);
360377 }
361378
@@ -364,11 +381,13 @@ public final class Vmd2Xml {
364381
365382 /**
366383 * コマンドライン文字列をオプション情報としてパースする。
384+ *
367385 * <p>異常系が起きた場合、このメソッドは制御を戻さない。
386+ *
368387 * @param args コマンドライン文字列群
369388 * @return オプション情報
370389 */
371- private static OptInfo parseOption(String[] args){
390+ private static OptInfo parseOption(String... args){
372391 OptInfo optInfo;
373392
374393 try{
@@ -387,6 +406,7 @@ public final class Vmd2Xml {
387406
388407 /**
389408 * Mainエントリ。
409+ *
390410 * @param args コマンドパラメータ
391411 */
392412 public static void main(String[] args){
--- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2XmlConv.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2XmlConv.java
@@ -54,6 +54,7 @@ public class Vmd2XmlConv {
5454
5555 /**
5656 * 入力ファイル種別を設定する。
57+ *
5758 * @param type ファイル種別
5859 * @throws IllegalArgumentException 具体的な種別を渡さなかった
5960 */
@@ -67,6 +68,7 @@ public class Vmd2XmlConv {
6768
6869 /**
6970 * 入力ファイル種別を返す。
71+ *
7072 * @return ファイル種別
7173 */
7274 public MotionFileType getInTypes(){
@@ -75,6 +77,7 @@ public class Vmd2XmlConv {
7577
7678 /**
7779 * 出力ファイル種別を設定する。
80+ *
7881 * @param type ファイル種別
7982 * @throws IllegalArgumentException 具体的な種別を渡さなかった
8083 */
@@ -88,6 +91,7 @@ public class Vmd2XmlConv {
8891
8992 /**
9093 * 出力ファイル種別を返す。
94+ *
9195 * @return ファイル種別
9296 */
9397 public MotionFileType getOutTypes(){
@@ -96,6 +100,7 @@ public class Vmd2XmlConv {
96100
97101 /**
98102 * XML出力用改行文字列を設定する。
103+ *
99104 * @param newline 改行文字
100105 */
101106 public void setNewline(String newline){
@@ -105,6 +110,7 @@ public class Vmd2XmlConv {
105110
106111 /**
107112 * XML出力用改行文字列を返す。
113+ *
108114 * @return 改行文字
109115 */
110116 public String getNewline(){
@@ -113,6 +119,7 @@ public class Vmd2XmlConv {
113119
114120 /**
115121 * ジェネレータ名を設定する。
122+ *
116123 * @param generator ジェネレータ名。表示したくない場合はnull
117124 */
118125 public void setGenerator(String generator){
@@ -122,6 +129,7 @@ public class Vmd2XmlConv {
122129
123130 /**
124131 * ジェネレータ名を返す。
132+ *
125133 * @return ジェネレータ名。非表示の場合はnullを返す。
126134 */
127135 public String getGenerator(){
@@ -130,8 +138,9 @@ public class Vmd2XmlConv {
130138
131139 /**
132140 * 回転情報をクォータニオン形式でXML出力するか設定する。
141+ *
133142 * @param sw クォータニオン形式ならtrue、
134- * YXZオイラー角で出力したければfalse。
143+ * YXZオイラー角で出力したければfalse。
135144 */
136145 public void setQuaterniomMode(boolean sw){
137146 this.isQuaternionMode = sw;
@@ -140,6 +149,7 @@ public class Vmd2XmlConv {
140149
141150 /**
142151 * 回転情報のXML出力形式を得る。
152+ *
143153 * @return クォータニオン形式ならtrue、YXZオイラー角形式ならfalse。
144154 */
145155 public boolean isQuaterniomMode(){
@@ -148,8 +158,10 @@ public class Vmd2XmlConv {
148158
149159 /**
150160 * ファイル変換を行う。
161+ *
151162 * <p>XML入力の場合は{@link #convert(InputSource, OutputStream)}を
152163 * 推奨する。
164+ *
153165 * @param is 入力ストリーム
154166 * @param os 出力ストリーム
155167 * @throws IOException 入力エラー
@@ -172,10 +184,13 @@ public class Vmd2XmlConv {
172184
173185 /**
174186 * ファイル変換を行う。
187+ *
175188 * <p>VMD入力の場合は{@link InputStream}に
176189 * バイトストリームが直接設定されていなければならない。
190+ *
177191 * <p>XML入力の場合は{@link InputStream}に
178192 * URL(systemId)のみの設定を推奨する。
193+ *
179194 * @param source 入力ソース
180195 * @param os 出力ストリーム
181196 * @throws IOException 入力エラー
@@ -198,8 +213,10 @@ public class Vmd2XmlConv {
198213
199214 /**
200215 * モーションファイルを読み込む。
216+ *
201217 * <p>XML読み込みの場合は、
202218 * こちらより{@link #readMotion(InputSource)}版を推奨する。
219+ *
203220 * @param is 入力ストリーム
204221 * @return モーションデータ
205222 * @throws IOException 入力エラー
@@ -226,8 +243,10 @@ public class Vmd2XmlConv {
226243
227244 /**
228245 * モーションファイルを読み込む。
246+ *
229247 * <p>VMD入力の場合は、{@link InputStream}に
230248 * 納められたバイトストリームかSystemId-URLから読み込む。
249+ *
231250 * @param source 入力ソース
232251 * @return モーションデータ
233252 * @throws IOException 入力エラー
@@ -260,6 +279,7 @@ public class Vmd2XmlConv {
260279
261280 /**
262281 * モーションファイルを出力する。
282+ *
263283 * @param motion モーションデータ
264284 * @param os 出力ストリーム
265285 * @throws IOException 出力エラー
@@ -281,7 +301,9 @@ public class Vmd2XmlConv {
281301
282302 /**
283303 * VMDファイルからモーションデータを読み込む。
304+ *
284305 * <p>入力ストリームは最後に閉じられる。
306+ *
285307 * @param is 入力ストリーム
286308 * @return モーションデータ
287309 * @throws IOException 入力エラー
@@ -300,6 +322,7 @@ public class Vmd2XmlConv {
300322
301323 /**
302324 * XMLファイルからモーションデータを読み込む。
325+ *
303326 * @param source 入力ソース
304327 * @return モーションデータ
305328 * @throws IOException 入力エラー
@@ -320,6 +343,7 @@ public class Vmd2XmlConv {
320343
321344 /**
322345 * モーションデータをVMDファイルに出力する。
346+ *
323347 * @param motion モーションデータ
324348 * @param ostream 出力ストリーム
325349 * @throws IOException 出力エラー
@@ -335,6 +359,7 @@ public class Vmd2XmlConv {
335359
336360 /**
337361 * モーションデータをXMLファイルに出力する。
362+ *
338363 * @param motion モーションデータ
339364 * @param ostream 出力ストリーム
340365 * @throws IOException 出力エラー
--- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java
+++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java
@@ -14,6 +14,7 @@ import java.io.InputStream;
1414 import java.net.MalformedURLException;
1515 import java.net.URI;
1616 import java.net.URL;
17+import javax.xml.XMLConstants;
1718 import javax.xml.parsers.ParserConfigurationException;
1819 import javax.xml.parsers.SAXParser;
1920 import javax.xml.parsers.SAXParserFactory;
@@ -21,11 +22,12 @@ import javax.xml.validation.Schema;
2122 import jp.sfjp.mikutoga.vmd.model.xml.Schema110820;
2223 import jp.sfjp.mikutoga.vmd.model.xml.Schema130609;
2324 import jp.sfjp.mikutoga.xml.BotherHandler;
24-import jp.sfjp.mikutoga.xml.LocalXmlResource;
25+import jp.sfjp.mikutoga.xml.NoopEntityResolver;
2526 import jp.sfjp.mikutoga.xml.SchemaUtil;
26-import jp.sfjp.mikutoga.xml.XmlResourceResolver;
2727 import org.xml.sax.InputSource;
2828 import org.xml.sax.SAXException;
29+import org.xml.sax.SAXNotRecognizedException;
30+import org.xml.sax.SAXNotSupportedException;
2931 import org.xml.sax.XMLReader;
3032
3133 /**
@@ -33,6 +35,16 @@ import org.xml.sax.XMLReader;
3335 */
3436 final class XmlInputUtil {
3537
38+ private static final String F_DISALLOW_DOCTYPE_DECL =
39+ "http://apache.org/xml/features/disallow-doctype-decl";
40+ private static final String F_EXTERNAL_GENERAL_ENTITIES =
41+ "http://xml.org/sax/features/external-general-entities";
42+ private static final String F_EXTERNAL_PARAMETER_ENTITIES =
43+ "http://xml.org/sax/features/external-parameter-entities";
44+ private static final String F_LOAD_EXTERNAL_DTD =
45+ "http://apache.org/xml/features/nonvalidating/load-external-dtd";
46+
47+
3648 /**
3749 * 隠しコンストラクタ。
3850 */
@@ -44,6 +56,7 @@ final class XmlInputUtil {
4456
4557 /**
4658 * 実在ファイルからXML入力ソースを得る。
59+ *
4760 * @param file 実在ファイル
4861 * @return XML入力ソース
4962 */
@@ -70,8 +83,10 @@ final class XmlInputUtil {
7083
7184 /**
7285 * InputSourceからInputStreamを得る。
86+ *
7387 * <p>入力ソースには、少なくともバイトストリームか
7488 * URL文字列(SystemId)のいずれかが設定されていなければならない。
89+ *
7590 * @param source 入力ソース
7691 * @return 入力バイトストリーム
7792 * @throws IllegalArgumentException 入力ソースの設定が足りない。
@@ -98,11 +113,13 @@ final class XmlInputUtil {
98113
99114 /**
100115 * SAXパーサファクトリを生成する。
116+ *
101117 * <ul>
102118 * <li>XML名前空間機能は有効になる。
103119 * <li>DTDによる形式検証は無効となる。
104120 * <li>XIncludeによる差し込み機能は無効となる。
105121 * </ul>
122+ *
106123 * @param schema スキーマ
107124 * @return ファクトリ
108125 */
@@ -112,7 +129,19 @@ final class XmlInputUtil {
112129 factory.setNamespaceAware(true);
113130 factory.setValidating(false);
114131 factory.setXIncludeAware(false);
115-// factory.setFeature(name, value);
132+
133+ try{
134+ factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
135+ factory.setFeature(F_DISALLOW_DOCTYPE_DECL, true);
136+ factory.setFeature(F_EXTERNAL_GENERAL_ENTITIES, false);
137+ factory.setFeature(F_EXTERNAL_PARAMETER_ENTITIES, false);
138+ factory.setFeature(F_LOAD_EXTERNAL_DTD, false);
139+ }catch( ParserConfigurationException
140+ | SAXNotRecognizedException
141+ | SAXNotSupportedException e ){
142+ assert false;
143+ throw new AssertionError(e);
144+ }
116145
117146 factory.setSchema(schema);
118147
@@ -121,6 +150,7 @@ final class XmlInputUtil {
121150
122151 /**
123152 * SAXパーサを生成する。
153+ *
124154 * @param schema スキーマ
125155 * @return SAXパーサ
126156 */
@@ -130,64 +160,72 @@ final class XmlInputUtil {
130160 SAXParser parser;
131161 try{
132162 parser = factory.newSAXParser();
133- }catch(ParserConfigurationException e){
163+ }catch(ParserConfigurationException | SAXException e){
134164 assert false;
135165 throw new AssertionError(e);
136- }catch(SAXException e){
166+ }
167+
168+ try{
169+ parser.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
170+ parser.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
171+ }catch(SAXNotRecognizedException | SAXNotSupportedException e){
137172 assert false;
138173 throw new AssertionError(e);
139174 }
140175
141-// parser.setProperty(name, value);
142-
143176 return parser;
144177 }
145178
146179 /**
147180 * スキーマを生成する。
148- * @param resolver リゾルバ
181+ *
149182 * @param xmlInType 入力XML種別
150183 * @return スキーマ
151184 */
152- private static Schema builsSchema(XmlResourceResolver resolver,
153- MotionFileType xmlInType ){
154- LocalXmlResource[] schemaArray;
185+ private static Schema buildSchema(MotionFileType xmlInType ){
186+ URI[] schemaUris;
155187 switch(xmlInType){
156188 case XML_110820:
157- schemaArray = new LocalXmlResource[]{
158- Schema110820.SINGLETON,
189+ schemaUris = new URI[]{
190+ Schema110820.RES_SCHEMA_VMDXML,
159191 };
160192 break;
161193 case XML_130609:
162- schemaArray = new LocalXmlResource[]{
163- Schema130609.SINGLETON,
194+ schemaUris = new URI[]{
195+ Schema130609.RES_SCHEMA_VMDXML,
164196 };
165197 break;
166198 case XML_AUTO:
167- schemaArray = new LocalXmlResource[]{
168- Schema110820.SINGLETON,
169- Schema130609.SINGLETON,
199+ schemaUris = new URI[]{
200+ Schema110820.RES_SCHEMA_VMDXML,
201+ Schema130609.RES_SCHEMA_VMDXML,
170202 };
171203 break;
172204 default:
173205 throw new IllegalStateException();
174206 }
175207
176- Schema schema = SchemaUtil.newSchema(resolver, schemaArray);
208+ Schema schema;
209+ try{
210+ schema = SchemaUtil.newSchema(schemaUris);
211+ }catch(IOException | SAXException e){
212+ assert false;
213+ throw new AssertionError(e);
214+ }
177215
178216 return schema;
179217 }
180218
181219 /**
182220 * XMLリーダを生成する。
221+ *
183222 * <p>エラーハンドラには{@link BotherHandler}が指定される。
223+ *
184224 * @param xmlInType 入力XML種別
185225 * @return XMLリーダ
186226 */
187227 static XMLReader buildReader(MotionFileType xmlInType){
188- XmlResourceResolver resolver = new XmlResourceResolver();
189-
190- Schema schema = builsSchema(resolver, xmlInType);
228+ Schema schema = buildSchema(xmlInType);
191229
192230 SAXParser parser = buildParser(schema);
193231
@@ -199,7 +237,7 @@ final class XmlInputUtil {
199237 throw new AssertionError(e);
200238 }
201239
202- reader.setEntityResolver(resolver);
240+ reader.setEntityResolver(NoopEntityResolver.NOOP_RESOLVER);
203241 reader.setErrorHandler(BotherHandler.HANDLER);
204242
205243 return reader;
Show on old repository browser