001: /*
002: * $Id: PackCompressor.java 2036 2008-02-09 11:14:05Z jponge $
003: * IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
004: *
005: * http://izpack.org/
006: * http://izpack.codehaus.org/
007: *
008: * Copyright 2005 Klaus Bartz
009: *
010: * Licensed under the Apache License, Version 2.0 (the "License");
011: * you may not use this file except in compliance with the License.
012: * You may obtain a copy of the License at
013: *
014: * http://www.apache.org/licenses/LICENSE-2.0
015: *
016: * Unless required by applicable law or agreed to in writing, software
017: * distributed under the License is distributed on an "AS IS" BASIS,
018: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
019: * See the License for the specific language governing permissions and
020: * limitations under the License.
021: */
022: package com.izforge.izpack.compressor;
023:
024: import java.io.OutputStream;
025:
026: import com.izforge.izpack.compiler.Compiler;
027:
028: /**
029: * IzPack will be able to support different compression methods for the
030: * packs included in the installation jar file.
031: * This interface declares the handler of one compression format.
032: *
033: * @author Klaus Bartz
034: */
035:
036: public interface PackCompressor {
037:
038: /**
039: * Returns a newly created output stream which write method
040: * writes the given input encoded to the defined output stream.
041: * Attention! This method will be returned a valid output stream
042: * only if it is used in the IzPack compiler, or if this pack compressor
043: * needs no external classes. A call in the
044: * installation should be throw if external classes are used.
045: * The implementation should load the needed classes via reflection
046: * because classes are not present in the installation.
047: * @param os output stream to be used as listener
048: * @return a newly created encoding output stream
049: * @throws Exception
050: */
051: OutputStream getOutputStream(OutputStream os) throws Exception;
052:
053: /**
054: * Returns all symbolic names which are used for this compressor.
055: * @return all symbolic names which are used for this compressor
056: */
057: String[] getCompressionFormatSymbols();
058:
059: /**
060: * Returns the path where the compiler can find the classes;
061: * normaly this is a path to a jar file.
062: * If no additional classes are needed, this method should return null.
063: * @return the path where the compiler can find the classes
064: */
065: String[] getContainerPaths();
066:
067: /**
068: * Returns the qualified names of all needed classes for decoding.
069: * All class files should be placed in the container which will
070: * be referred by the method getContainerPath.
071: * If no additional classes are needed, this method should return null.
072: * @return qualified names of all needed classes for decoding
073: */
074: String[][] getDecoderClassNames();
075:
076: /**
077: * Returns the qualified name of the encoding output stream.
078: * The class file should be placed in the container which will
079: * be referred by the method getContainerPath.
080: * @return qualified name of the encoding output stream
081: */
082: String getEncoderClassName();
083:
084: /**
085: * Returns the qualified name of the class which should be used
086: * as InputStream in the installer. This class mapps the "real"
087: * decoder or - if useable - the decoder name will be returned self.
088: * If useStandardCompression is true, this method returns null.
089: * @return the qualified name of the class which should be used
090: * as InputStream in the installer
091: */
092: String getDecoderMapperName();
093:
094: /**
095: * Returns whether the standard comression should be used with
096: * this pack compressor or not. If this method returns true,
097: * the returns values of the methods getContainerPath and
098: * getDecoderClassNames are not valid (should be null).
099: * @return whether the standard comression should be used or not
100: */
101: boolean useStandardCompression();
102:
103: /**
104: * Receives the current used compiler.
105: * Needed at loading encoder classes and error handling.
106: * @param compiler current active compiler
107: */
108: void setCompiler(Compiler compiler);
109:
110: /**
111: * Returns whether a buffered output stream should be used
112: * intermediate between the output stream of this compressor
113: * and the destination.
114: * @return wether a buffered output stream should be used
115: * intermediate between the output stream of this compressor
116: * and the destination.
117: */
118: boolean needsBufferedOutputStream();
119:
120: /**
121: * Receives the compression level to be used.
122: * @param level compression level to be used
123: */
124: void setCompressionLevel(int level);
125:
126: /**
127: * Returns the compression level to be used.
128: * @return the compression level to be used
129: */
130: int getCompressionLevel();
131:
132: }
|