OSDN Git Service

Merge branch 'master' of ssh://www.deister.jp/mnt/hdb1/git/hayashi
[hayashilib/hayashi.git] / src / jp / co / areaweb / tools / command / XmlJob.java
1 package jp.co.areaweb.tools.command;\r
2 import java.io.*;\r
3 import java.util.*;\r
4 import javax.xml.parsers.*;\r
5 import org.w3c.dom.*;\r
6 \r
7 public class XmlJob\r
8 {\r
9     public static final boolean debug = false;\r
10 \r
11     /**\r
12      * Jobファイルに記述されたコマンドを順次実行する。\r
13      * @param jobFile Jobコマンドが記述されたファイル\r
14      * @throws IOException JOBファイルの読み込み障害\r
15      */\r
16     public static void execJob(File jobFile) throws Exception {\r
17         execJob(jobFile, null);\r
18     }\r
19 \r
20     /**\r
21      * Jobファイルに記述されたコマンドを順次実行する。\r
22      * @param jobFile Jobコマンドが記述されたファイル\r
23      * @param workDir コマンドを実行するさいのカレントディレクトリ\r
24      * @throws IOException JOBファイルの読み込み障害\r
25      */\r
26     public static void execJob(File jobFile, File workDir) throws Exception {\r
27         if (jobFile == null) {\r
28             throw new IOException("実行するジョブファイルが指定されていません。");\r
29         }\r
30         \r
31         if (debug) {\r
32             System.out.println("[s JobFile] " + jobFile.getName());\r
33         }\r
34         \r
35         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
36         DocumentBuilder builder = factory.newDocumentBuilder();\r
37         Node rootNode = builder.parse(new FileInputStream(jobFile));\r
38         NodeList nl = rootNode.getChildNodes();\r
39         for (int i=0; i < nl.getLength(); i++) {\r
40             Node jobgroupTag = nl.item(i);\r
41             if (jobgroupTag.getNodeType() == Node.ELEMENT_NODE) {\r
42                 if ((jobgroupTag.getNodeName()).equals("jobgroup")) {\r
43                     execJobElement(jobFile, workDir, jobgroupTag.getChildNodes());\r
44                 }\r
45                 else if ((jobgroupTag.getNodeName()).equals("xalan")) {\r
46                     Xalan.execJobElement(jobgroupTag.getChildNodes(), workDir);\r
47                 }\r
48             }\r
49         }\r
50 \r
51         if (debug) {\r
52             System.out.println("[e JobFile] " + jobFile.getName());\r
53         }\r
54     }\r
55 \r
56     /**\r
57      * Jobファイルに記述されたコマンドを順次実行する。\r
58      * @param jobFile Jobコマンドが記述されたファイル\r
59      * @param workDir コマンドを実行するさいのカレントディレクトリ\r
60      * @throws IOException JOBファイルの読み込み障害\r
61      */\r
62     protected static void execJobElement(File jobFile, File workDir, NodeList jobgroupNodes)\r
63             throws Exception {\r
64         if (debug) {\r
65             System.out.println("XmlJob.execJobElement()");\r
66         }\r
67         \r
68         String stdout = null;\r
69         String errout = null;\r
70         Vector<Command> commands = new Vector<Command>();\r
71 \r
72         for (int i=0; i < jobgroupNodes.getLength(); i++) {\r
73             Node node = jobgroupNodes.item(i);\r
74             if (node.getNodeType() == Node.ELEMENT_NODE) {\r
75                 String tagName = node.getNodeName();\r
76                 if (tagName.equals("job")) {\r
77                     NodeList jobNodes = node.getChildNodes();\r
78                     Command command = new Command();\r
79                     for (int j=0; j < jobNodes.getLength(); j++) {\r
80                         Node jobNode = jobNodes.item(j);\r
81                         if (jobNode.getNodeType() == Node.ELEMENT_NODE) {\r
82                             String tagName2 = jobNode.getNodeName();\r
83                             if (tagName2.equals("cmd")) {\r
84                                 command.setCmd(jobNode.getFirstChild().getNodeValue());\r
85                             }\r
86                             else if (tagName2.equals("workDir")) {\r
87                                 command.setWorkDir(new File(jobNode.getFirstChild().getNodeValue()));\r
88                             }\r
89                         }\r
90                     }\r
91                     commands.addElement(command);                          \r
92                 }\r
93                 else if (tagName.equals("stdout")) {\r
94                     NamedNodeMap attrs = node.getAttributes();\r
95                     stdout = attrs.getNamedItem("file").getNodeValue();\r
96                 }\r
97                 else if (tagName.equals("errout")) {\r
98                     NamedNodeMap attrs = node.getAttributes();\r
99                     errout = attrs.getNamedItem("file").getNodeValue();\r
100                 }\r
101             }\r
102         }\r
103 \r
104         // コマンドの実行\r
105         execJobs(stdout, errout, commands);\r
106     }\r
107 \r
108     /**\r
109      * Vector commandsに格納されたコマンドを順次実行する。\r
110      * @throws IOException JOBファイルの読み込み障害\r
111      */\r
112     protected static void execJobs(String stdout, String errout, Vector<Command> commands) throws IOException {\r
113         // コマンドの実行\r
114         PrintWriter stdoutPW;\r
115         if (stdout == null) {\r
116             stdoutPW = new PrintWriter(System.out);\r
117         }\r
118         else {\r
119             stdoutPW = new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(stdout))));\r
120         }\r
121 \r
122         try {\r
123             for (int i=0; i < commands.size(); i++) {\r
124                 Command command = commands.get(i);\r
125                 command.execCommand();\r
126                 stdoutPW.println(command.getOutput());\r
127             }\r
128         }\r
129         finally {\r
130             stdoutPW.close();\r
131         }\r
132     }\r
133     \r
134     /** \r
135     *   サンプル\r
136     */\r
137     static public void main(String[] args) throws Exception {\r
138         if (args.length < 1) {\r
139             System.out.println("exp: java tool.job.XmlJob [jobFileName]");\r
140             return;\r
141         }\r
142 \r
143         XmlJob.execJob(new File(args[0]));\r
144     }\r
145 }\r