OSDN Git Service

1.105.3-SNAPSHOT版開発開始
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / parser / MmdFormatException.java
1 /*\r
2  * unexpected file format founded exception\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2010 MikuToga Partners\r
6  */\r
7 \r
8 package jp.sourceforge.mikutoga.parser;\r
9 \r
10 /**\r
11  * MMD関連ファイルのパース異常系。\r
12  * 必要に応じて、パースに失敗した位置を保持する。\r
13  */\r
14 @SuppressWarnings("serial")\r
15 public class MmdFormatException extends Exception {\r
16 \r
17     private final long position;\r
18 \r
19     /**\r
20      * コンストラクタ。\r
21      */\r
22     public MmdFormatException(){\r
23         this(null);\r
24         return;\r
25     }\r
26 \r
27     /**\r
28      * コンストラクタ。\r
29      * @param message エラーメッセージ\r
30      */\r
31     public MmdFormatException(String message){\r
32         this(message, -1L);\r
33         return;\r
34     }\r
35 \r
36     /**\r
37      * コンストラクタ。\r
38      * @param position 入力ソース先頭から数えたエラー位置。(バイト単位)\r
39      * 負の値を与えると、エラー位置は無効と解釈される。\r
40      */\r
41     public MmdFormatException(long position){\r
42         this(null, position);\r
43         return;\r
44     }\r
45 \r
46     /**\r
47      * コンストラクタ。\r
48      * @param message エラーメッセージ\r
49      * @param position 入力ソース先頭から数えたエラー位置。(バイト単位)\r
50      * 負の値を与えると、エラー位置は無効と解釈される。\r
51      */\r
52     public MmdFormatException(String message, long position){\r
53         super(message);\r
54         this.position = position;\r
55         return;\r
56     }\r
57 \r
58     /**\r
59      * {@inheritDoc}\r
60      * 有効なエラー発生位置を保持している場合、追加出力される。\r
61      * @return {@inheritDoc}\r
62      */\r
63     @Override\r
64     public String getMessage(){\r
65         StringBuilder result = new StringBuilder();\r
66 \r
67         String msg = super.getMessage();\r
68         if(msg != null) result.append(msg);\r
69 \r
70         if(hasPosition()){\r
71             result.append('(')\r
72                   .append("position:")\r
73                   .append(this.position)\r
74                   .append(')');\r
75         }\r
76 \r
77         if(result.length() <= 0) return null;\r
78 \r
79         return result.toString();\r
80     }\r
81 \r
82     /**\r
83      * エラー位置を取得する。\r
84      * @return 入力ソース先頭からのバイト数で表されるエラー位置。\r
85      * 負なら無効なエラー位置。\r
86      */\r
87     public long getPosition(){\r
88         return this.position;\r
89     }\r
90 \r
91     /**\r
92      * 有効なエラー位置が設定されているか判定する。\r
93      * @return エラー位置が有効(非負)ならtrue\r
94      */\r
95     public boolean hasPosition(){\r
96         if(this.position < 0L) return false;\r
97         return true;\r
98     }\r
99 \r
100 }\r