OSDN Git Service

start 1.504.9-SNAPSHOT
[jindolf/JinArchiver.git] / src / main / java / jp / sourceforge / jindolf / archiver / ValidateTask.java
1 /*
2  * XML-validation task
3  *
4  * License : The MIT License
5  * Copyright(c) 2008 olyutorskii
6  */
7
8 package jp.sourceforge.jindolf.archiver;
9
10 import java.io.IOException;
11 import java.io.Reader;
12 import java.util.concurrent.Callable;
13 import javax.xml.transform.Source;
14 import javax.xml.transform.stream.StreamSource;
15 import javax.xml.validation.Validator;
16 import org.xml.sax.SAXException;
17
18 /**
19  * XML検証タスク。
20  */
21 public class ValidateTask implements Callable<Void> {
22
23     private static final String ERR_IO    = "XML入力エラーが発生しました";
24     private static final String ERR_XSD   = "XML検証が失敗しました";
25     private static final String ERR_ABORT = "XML検証が中断されました";
26
27
28     private final Reader reader;
29     private final Source source;
30     private final Validator validator;
31
32
33     /**
34      * コンストラクタ。
35      * @param reader 文字入力
36      * @param valid バリデータ
37      */
38     public ValidateTask(Reader reader, Validator valid){
39         super();
40         this.reader = reader;
41         this.source = new StreamSource(this.reader);
42         this.validator = valid;
43         return;
44     }
45
46
47     /**
48      * 例外に応じたエラー説明を返す。
49      * @param cause 例外
50      * @return エラー説明
51      */
52     public static String getErrDescription(Throwable cause){
53         String desc;
54         if     (cause instanceof IOException)  desc = ERR_IO;
55         else if(cause instanceof SAXException) desc = ERR_XSD;
56         else                                   desc = ERR_ABORT;
57         return desc;
58     }
59
60
61     /**
62      * XML検証タスク。
63      * @return null
64      * @throws IOException 入力エラー
65      * @throws SAXException 検証エラー
66      */
67     @Override
68     public Void call() throws IOException, SAXException{
69         try{
70             this.validator.validate(this.source);
71         }finally{
72             this.reader.close();
73         }
74
75         return null;
76     }
77
78 }