1ffd61f0158303ffa4cb8ecc4a78b4c15d8694ca
[people/mcb30/edk2.git] / edk2 / Tools / Java / Source / FrameworkTasks / org / tianocore / framework / tasks / EfiCompressTask.java
1 /** @file\r
2  EfiCompressTask class.\r
3 \r
4  EfiCompressTask is used to call EfiCompress.exe to strip input file.\r
5 \r
6 \r
7  Copyright (c) 2006, Intel Corporation\r
8  All rights reserved. This program and the accompanying materials\r
9  are licensed and made available under the terms and conditions of the BSD License\r
10  which accompanies this distribution.  The full text of the license may be found at\r
11  http://opensource.org/licenses/bsd-license.php\r
12 \r
13  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
14  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
15 \r
16  **/\r
17 package org.tianocore.framework.tasks;\r
18 \r
19 import java.io.File;\r
20 \r
21 import org.apache.tools.ant.Task;\r
22 import org.apache.tools.ant.Project;\r
23 import org.apache.tools.ant.BuildException;\r
24 import org.apache.tools.ant.taskdefs.Execute;\r
25 import org.apache.tools.ant.taskdefs.LogStreamHandler;\r
26 import org.apache.tools.ant.types.Commandline;\r
27 \r
28 import org.tianocore.common.logger.EdkLog;\r
29 \r
30 /**\r
31   EfiCompressTask class.\r
32 \r
33   EfiCompressTask is used to call EfiCompress.exe to strip input file.\r
34 **/\r
35 public class EfiCompressTask extends Task implements EfiDefine {\r
36     //\r
37     // \r
38     // \r
39     private final static String toolName = "EfiCompress";\r
40     //\r
41     // input file\r
42     //\r
43     private FileArg inputFile = new FileArg();\r
44 \r
45     //\r
46     // output file\r
47     //\r
48     private FileArg outputFile = new FileArg();\r
49 \r
50     //\r
51     // output directory, this variable is added by jave wrap\r
52     //\r
53     private String outputDir = ".";\r
54 \r
55     /**\r
56       execute\r
57      \r
58       EfiCompressTask execute function is to assemble tool command line & execute\r
59       tool command line\r
60      \r
61       @throws BuidException\r
62      **/\r
63     public void execute() throws BuildException {\r
64 \r
65         Project project = this.getOwningTarget().getProject();\r
66 \r
67         //\r
68         // absolute path of efi tools\r
69         //\r
70         String path = project.getProperty("env.FRAMEWORK_TOOLS_PATH");\r
71         String command;\r
72         String argument;\r
73         if (path == null) {\r
74             command = toolName;\r
75         } else {\r
76             command = path + File.separator + toolName;\r
77         }\r
78         //\r
79         // argument of tools\r
80         //\r
81         argument = "" + inputFile + outputFile;\r
82         //\r
83         // return value of fwimage execution\r
84         //\r
85         int revl = -1;\r
86 \r
87         try {\r
88             Commandline cmdline = new Commandline();\r
89             cmdline.setExecutable(command);\r
90             cmdline.createArgument().setLine(argument);\r
91 \r
92             LogStreamHandler streamHandler = new LogStreamHandler(this,\r
93                     Project.MSG_INFO, Project.MSG_WARN);\r
94             Execute runner = new Execute(streamHandler, null);\r
95 \r
96             runner.setAntRun(project);\r
97             runner.setCommandline(cmdline.getCommandline());\r
98             runner.setWorkingDirectory(new File(outputDir));\r
99 \r
100             //\r
101             // Set debug log information.\r
102             //\r
103             EdkLog.log(this, EdkLog.EDK_VERBOSE, Commandline.toString(cmdline.getCommandline()));\r
104             EdkLog.log(this, EdkLog.EDK_INFO, this.inputFile.toFileList() + " => "\r
105                                               + this.outputFile.toFileList());\r
106 \r
107             revl = runner.execute();\r
108             if (EFI_SUCCESS == revl) {\r
109                 //\r
110                 // command execution success\r
111                 //\r
112                 EdkLog.log(this, EdkLog.EDK_VERBOSE, toolName + " succeeded!");\r
113             } else {\r
114                 //\r
115                 // command execution fail\r
116                 //\r
117                 EdkLog.log(this, EdkLog.EDK_INFO, "ERROR = " + Integer.toHexString(revl));\r
118                 throw new BuildException(toolName + " failed!");\r
119 \r
120             }\r
121         } catch (Exception e) {\r
122             throw new BuildException(e.getMessage());\r
123         }\r
124     }\r
125 \r
126     /**\r
127       getInputFile\r
128      \r
129       This function is to get class member "inputFile".\r
130      \r
131       @return string of input file name.\r
132      **/\r
133     public String getInputFile() {\r
134         return inputFile.getValue();\r
135     }\r
136 \r
137     /**\r
138       setComponentType\r
139      \r
140       This function is to set class member "inputFile".\r
141      \r
142       @param inputFile\r
143                  string of input file name.\r
144      **/\r
145     public void setInputFile(String inputFile) {\r
146         this.inputFile.setArg(" ", inputFile);\r
147     }\r
148 \r
149     /**\r
150       getOutputFile\r
151      \r
152       This function is to get class member "outputFile"\r
153      \r
154       @return outputFile string of output file name.\r
155      **/\r
156     public String getOutputFile() {\r
157         return outputFile.getValue();\r
158     }\r
159 \r
160     /**\r
161       setOutputFile\r
162      \r
163       This function is to set class member "outputFile"\r
164      \r
165       @param outputFile\r
166                  string of output file name.\r
167      **/\r
168     public void setOutputFile(String outputFile) {\r
169         this.outputFile.setArg(" ", outputFile);\r
170     }\r
171 \r
172     /**\r
173       getOutputDir\r
174      \r
175       This function is to get class member "outputDir"\r
176      \r
177       @return outputDir string of output directory.\r
178      **/\r
179     public String getOutputDir() {\r
180         return outputDir;\r
181     }\r
182 \r
183     /**\r
184       setOutputDir\r
185      \r
186       This function is to set class member "outputDir"\r
187      \r
188       @param outputDir\r
189                  string of output directory.\r
190      **/\r
191     public void setOutputDir(String outputDir) {\r
192         this.outputDir = outputDir;\r
193     }\r
194 }\r