]>
git.proxmox.com Git - mirror_edk2.git/blob - Tools/Java/Source/FrameworkTasks/org/tianocore/framework/tasks/CompressSection.java
4 CompressSection indicate that all section which in it should be compressed.
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
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.
18 package org
.tianocore
.framework
.tasks
;
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
;
26 import org
.apache
.tools
.ant
.BuildException
;
32 CompressSection indicate that all section which in it should be compressed.
35 public class CompressSection
implements Section
, FfsTypes
{
36 private int alignment
= 0;
38 // The attribute of compressName.
40 private String compressName
= "";
42 // The list contained the SectFile element.
44 private List
<Section
> sectList
= new ArrayList
<Section
>();
46 public static Object semaphore
= new Object();
50 This function is to collect all sectFile and compress it , then output
53 @param Buffer The point of output buffer
56 public void toBuffer (DataOutputStream buffer
){
61 // Get section file in compress node.
65 ByteArrayOutputStream bo
= new ByteArrayOutputStream ();
66 DataOutputStream Do
= new DataOutputStream (bo
);
69 // Get each section which under the compress {};
70 // And add it is contains to File;
72 Iterator SectionIter
= sectList
.iterator();
73 while (SectionIter
.hasNext()){
74 sect
= (Section
)SectionIter
.next();
77 // Call each section class's toBuffer function.
82 catch (BuildException e
) {
83 System
.out
.print(e
.getMessage());
84 throw new BuildException ("Compress.toBuffer failed at section");
90 synchronized (semaphore
) {
94 byte[] fileBuffer
= bo
.toByteArray();
95 Compress myCompress
= new Compress(fileBuffer
, fileBuffer
.length
);
98 // Add Compress header
100 CompressHeader Ch
= new CompressHeader();
101 Ch
.SectionHeader
.Size
[0] = (byte)((myCompress
.outputBuffer
.length
+
105 Ch
.SectionHeader
.Size
[1] = (byte)(((myCompress
.outputBuffer
.length
+
109 Ch
.SectionHeader
.Size
[2] = (byte)(((myCompress
.outputBuffer
.length
+
113 Ch
.SectionHeader
.type
= (byte) EFI_SECTION_COMPRESSION
;
116 // Note: The compressName was not efsfective now. Using the
117 // EFI_STANDARD_COMPRSSION for compressType .
118 // That is follow old Genffsfile tools. Some code will be added for
119 // the different compressName;
121 Ch
.UncompressLen
= fileBuffer
.length
;
122 Ch
.CompressType
= EFI_STANDARD_COMPRESSION
;
125 // Change header struct to byte buffer
127 byte [] headerBuffer
= new byte[Ch
.GetSize()];
128 Ch
.StructToBuffer(headerBuffer
);
131 // First add CompressHeader to Buffer, then add Compress data.
133 buffer
.write (headerBuffer
);
134 buffer
.write(myCompress
.outputBuffer
);
137 // Buffer 4 Byte aligment
139 int size
= Ch
.GetSize() + myCompress
.outputBuffer
.length
;
141 while ((size
& 0x03) != 0){
149 //compressOut.delete();
154 throw new BuildException("compress.toBuffer failed!\n");
161 This function is to get compressName.
163 @return The compressName.
165 public String
getCompressName() {
172 This function is to set compressName.
174 @param compressName The string of compressName
176 public void setCompressName(String compressName
) {
177 this.compressName
= compressName
;
183 This function is to add sectFile element to SectList.
185 @param sectFile SectFile element which succeed from section class.
187 public void addSectFile (SectFile sectFile
) {
188 sectList
.add(sectFile
);
195 This function is to add tool element to SectList.
196 @param tool Tool element which succeed from section class.
198 public void addTool (Tool tool
) {
202 public int getAlignment() {
206 public void setAlignment(int alignment
) {
210 this.alignment
= alignment
;