]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Source/FrameworkTasks/org/tianocore/framework/tasks/CompressSection.java
Adding new Logger instead of Ant's.
[mirror_edk2.git] / Tools / Source / FrameworkTasks / org / tianocore / framework / tasks / CompressSection.java
1 /** @file
2 CompressSection class.
3
4 CompressSection indicate that all section which in it should be compressed.
5
6 Copyright (c) 2006, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17
18 package org.tianocore.framework.tasks;
19
20 import java.io.ByteArrayOutputStream;
21 import java.io.DataOutputStream;
22 import java.util.ArrayList;
23 import java.util.Iterator;
24 import java.util.List;
25
26 import org.apache.tools.ant.BuildException;
27
28
29 /**
30 CompressSection
31
32 CompressSection indicate that all section which in it should be compressed.
33
34 **/
35 public class CompressSection implements Section, FfsTypes{
36 //
37 // The attribute of compressName.
38 //
39 String compressName = "";
40 //
41 // The list contained the SectFile element.
42 //
43 List<Object> SectList = new ArrayList<Object>();
44
45 public static Object semaphore = new Object();
46
47 /**
48 toBuffer
49
50 This function is to collect all sectFile and compress it , then output
51 the result to buffer.
52
53 @param Buffer The point of output buffer
54
55 **/
56 public void toBuffer (DataOutputStream buffer){
57
58 Section sect;
59
60 //
61 // Get section file in compress node.
62 //
63 try{
64
65 ByteArrayOutputStream bo = new ByteArrayOutputStream ();
66 DataOutputStream Do = new DataOutputStream (bo);
67
68 //
69 // Get each section which under the compress {};
70 // And add it is contains to File;
71 //
72 Iterator SectionIter = SectList.iterator();
73 while (SectionIter.hasNext()){
74 sect = (Section)SectionIter.next();
75
76 //
77 // Call each section class's toBuffer function.
78 //
79 try {
80 sect.toBuffer(Do);
81 }
82 catch (BuildException e) {
83 System.out.print(e.getMessage());
84 throw new BuildException ("Compress.toBuffer failed at section");
85 }
86
87 }
88 Do.close();
89
90
91 synchronized (semaphore) {
92 //
93 // Call compress
94 //
95 byte[] fileBuffer = bo.toByteArray();
96 Compress myCompress = new Compress(fileBuffer, fileBuffer.length);
97
98 //
99 // Add Compress header
100 //
101 CompressHeader Ch = new CompressHeader();
102 Ch.SectionHeader.Size[0] = (byte)((myCompress.outputBuffer.length +
103 Ch.GetSize()) &
104 0xff
105 );
106 Ch.SectionHeader.Size[1] = (byte)(((myCompress.outputBuffer.length +
107 Ch.GetSize())&
108 0xff00) >> 8
109 );
110 Ch.SectionHeader.Size[2] = (byte)(((myCompress.outputBuffer.length +
111 Ch.GetSize()) &
112 0xff0000) >> 16
113 );
114 Ch.SectionHeader.type = (byte) EFI_SECTION_COMPRESSION;
115
116 //
117 // Note: The compressName was not efsfective now. Using the
118 // EFI_STANDARD_COMPRSSION for compressType .
119 // That is follow old Genffsfile tools. Some code will be added for
120 // the different compressName;
121 //
122 Ch.UncompressLen = fileBuffer.length;
123 Ch.CompressType = EFI_STANDARD_COMPRESSION;
124
125 //
126 // Change header struct to byte buffer
127 //
128 byte [] headerBuffer = new byte[Ch.GetSize()];
129 Ch.StructToBuffer(headerBuffer);
130
131 //
132 // First add CompressHeader to Buffer, then add Compress data.
133 //
134 buffer.write (headerBuffer);
135 buffer.write(myCompress.outputBuffer);
136
137 //
138 // Buffer 4 Byte aligment
139 //
140 int size = Ch.GetSize() + myCompress.outputBuffer.length;
141
142 while ((size & 0x03) != 0){
143 size ++;
144 buffer.writeByte(0);
145 }
146 //
147 // Delete temp file
148 //
149 //di.close();
150 //compressOut.delete();
151 }
152
153 }
154 catch (Exception e){
155 throw new BuildException("compress.toBuffer failed!\n");
156 }
157 }
158
159 /**
160 getCompressName
161
162 This function is to get compressName.
163
164 @return The compressName.
165 **/
166 public String getCompressName() {
167 return compressName;
168 }
169
170 /**
171 setCompressName
172
173 This function is to set compressName.
174
175 @param compressName The string of compressName
176 **/
177 public void setCompressName(String compressName) {
178 this.compressName = compressName;
179 }
180
181 /**
182 addSectFile
183
184 This function is to add sectFile element to SectList.
185
186 @param sectFile SectFile element which succeed from section class.
187 **/
188 public void addSectFile (SectFile sectFile) {
189 SectList.add(sectFile);
190
191 }
192
193 /**
194 addTool
195
196 This function is to add tool element to SectList.
197 @param tool Tool element which succeed from section class.
198 **/
199 public void addTool (Tool tool) {
200 SectList.add(tool);
201 }
202 }