Adding a new ImageMagickImageProcessor class to replace
[mir.git] / source / mir / util / ExecFunctions.java
1 /*
2  * Copyright (C) 2001, 2002 The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30 package mir.util;
31
32 import java.io.File;
33 import java.io.FileInputStream;
34 import java.io.IOException;
35 import java.io.OutputStream;
36
37 /**
38  * Execute system commands. Warning: the current implementation is
39  * unix specific. 
40  */
41 public class ExecFunctions
42 {
43   /**
44    * Executes a full command (including arguments) in a subshell
45    * and returns the output of the command in a string. Output is
46    * redirected into a temporary fil which is then read into the string
47    */
48   public static String execIntoString(String command)
49     throws IOException
50   {
51     return new String(execIntoByteArray(command));
52   }
53
54   /**
55    * Executes a full command (including arguments) in a subshell
56    * and returns the output of the command in an array of
57    * bytes. Output is redirected into a temporary fil which is then
58    * read into the string
59    */
60   public static byte[] execIntoByteArray(String command)
61     throws IOException
62   {
63     File commandOutput=File.createTempFile("mircmd","");
64     int exitStatus;
65     try
66     {
67       // WARNING: unix specific
68       exitStatus=Runtime.getRuntime().exec(new String[]{
69         "/bin/sh","-c",
70         command+" "+
71         ">"+commandOutput.getAbsolutePath()
72       }).waitFor();
73     }
74     catch(InterruptedException e){ throw new IOException(e.toString());}
75     if(exitStatus!=0)
76     {
77         throw new IOException("command exit satus:"+exitStatus);
78     }
79     byte [] result=FileFunctions.readFileIntoByteArray
80       (commandOutput.getAbsolutePath());
81     commandOutput.delete();
82     return result;
83   }
84
85   /**
86    * Executes a full command (including arguments) in a subshell.
87    * Standard input and output go to /dev/null
88    */
89   public static void simpleExec(String command)
90     throws IOException
91   {
92     int exitStatus;
93     try
94     {
95       // WARNING: unix specific
96       exitStatus=Runtime.getRuntime().exec(new String[]{
97         "/bin/sh","-c",
98         command+" "+">/dev/null 2>/dev/null"
99       }).waitFor();
100     }
101     catch(InterruptedException e){ throw new IOException(e.toString());}
102     if(exitStatus!=0)
103     {
104         throw new IOException("command exit satus:"+exitStatus);
105     }
106   }
107   
108 }