KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openbravo > erpCommon > utility > Task


1 /*
2  *************************************************************************
3  * The contents of this file are subject to the Openbravo Public License
4  * Version 1.0 (the "License"), being the Mozilla Public License
5  * Version 1.1 with a permitted attribution clause; you may not use this
6  * file except in compliance with the License. You may obtain a copy of
7  * the License at http://www.openbravo.com/legal/license.html
8  * Software distributed under the License is distributed on an "AS IS"
9  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
10  * License for the specific language governing rights and limitations
11  * under the License.
12  * The Original Code is Openbravo ERP.
13  * The Initial Developer of the Original Code is Openbravo SL
14  * All portions are Copyright (C) 2001-2006 Openbravo SL
15  * All Rights Reserved.
16  * Contributor(s): ______________________________________.
17  ************************************************************************
18 */

19 package org.openbravo.erpCommon.utility;
20
21 import java.io.*;
22 import org.apache.log4j.Logger ;
23
24 public class Task extends Thread JavaDoc {
25
26   private String JavaDoc m_cmd;
27   private Process JavaDoc m_child;
28   private StringBuffer JavaDoc m_out;
29   private StringBuffer JavaDoc m_err;
30   private InputStream m_outStream;
31   private InputStream m_errStream;
32   private OutputStream m_inStream;
33   private Thread JavaDoc m_outReader;
34   private Thread JavaDoc m_errReader;
35   static Logger log4j = Logger.getLogger(Task.class);
36
37
38   public Task(String JavaDoc cmd) {
39     m_child = null;
40     m_out = new StringBuffer JavaDoc();
41     m_err = new StringBuffer JavaDoc();
42     m_outReader = new Thread JavaDoc() {
43       public void run() {
44         if (log4j.isDebugEnabled()) log4j.debug("Task.outReader.run");
45         try {
46           int c;
47           for(;(c = m_outStream.read()) != -1 && !isInterrupted(); m_out.append((char)c));
48           m_outStream.close();
49         } catch(IOException ioe) {
50           log4j.error("Task.outReader" + ioe);
51         }
52         if (log4j.isDebugEnabled()) log4j.debug("Task.outReader.run - done");
53       }
54     };
55     m_errReader = new Thread JavaDoc() {
56       public void run() {
57         if (log4j.isDebugEnabled()) log4j.debug("Task.errReader.run");
58         try {
59           int c;
60           for(;(c = m_errStream.read()) != -1 && !isInterrupted(); m_err.append((char)c));
61           m_errStream.close();
62         } catch(IOException ioe) {
63           log4j.error("Task.errReader" + ioe);
64         }
65         if (log4j.isDebugEnabled()) log4j.debug("Task.errReader.run - done");
66       }
67     };
68     m_cmd = cmd;
69   }
70
71   public void run() {
72     if (log4j.isDebugEnabled()) log4j.debug("Task.run");
73     try {
74       m_child = Runtime.getRuntime().exec(m_cmd);
75       m_outStream = m_child.getInputStream();
76       m_errStream = m_child.getErrorStream();
77       m_inStream = m_child.getOutputStream();
78       if(checkInterrupted()) return;
79       m_outReader.start();
80       m_errReader.start();
81       if(checkInterrupted()) return;
82       m_errReader.join();
83       if(checkInterrupted()) return;
84       m_outReader.join();
85       if(checkInterrupted()) return;
86     } catch (Exception JavaDoc e) {
87       log4j.error("Task.run - error: " + e);
88       return;
89     }
90     try {
91       m_child.waitFor();
92     } catch(InterruptedException JavaDoc ie) { }
93     try {
94       if(m_child != null) if (log4j.isDebugEnabled()) log4j.debug("Task.run - ExitValue=" + m_child.exitValue());
95     } catch(Exception JavaDoc e) { }
96     if (log4j.isDebugEnabled()) log4j.debug("Task.run - done");
97     return;
98   }
99
100   private boolean checkInterrupted() {
101     if(isInterrupted()) {
102       if (log4j.isDebugEnabled()) log4j.debug("Task.checkInterrupted - true");
103       if(m_child != null) m_child.destroy();
104       m_child = null;
105       if(m_outReader != null && m_outReader.isAlive()) m_outReader.interrupt();
106       m_outReader = null;
107       if(m_errReader != null && m_errReader.isAlive()) m_errReader.interrupt();
108       m_errReader = null;
109       if(m_inStream != null)
110         try {
111           m_inStream.close();
112         } catch(Exception JavaDoc e) { }
113       m_inStream = null;
114       if(m_outStream != null)
115         try {
116           m_outStream.close();
117         } catch(Exception JavaDoc e) { }
118       m_outStream = null;
119       if(m_errStream != null)
120         try {
121           m_errStream.close();
122         } catch(Exception JavaDoc e) { }
123       m_errStream = null;
124       return true;
125     } else {
126       return false;
127     }
128   }
129
130   public StringBuffer JavaDoc getOut() {
131     return m_out;
132   }
133
134   public StringBuffer JavaDoc getErr() {
135     return m_err;
136   }
137
138   public OutputStream getInStream() {
139     return m_inStream;
140   }
141 }
142
Popular Tags