/**
* Copyright (c) 2003 Daffodil Software Ltd all rights reserved.
* This program is free software; you can redistribute it and/or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
* There are special exceptions to the terms and conditions of the GPL
* as it is applied to this software. See the GNU General Public License for more details.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.io.*;
import java.util.zip.*;
/**
* This class is used to make zip file of the XML file,BLOB.lob and CLOB.lob
* so that compacted files can be transferred over the network. Besides it, this
* class contains method for unzipping it.
*/
public class ZipHandler
{
/**
* makes a zip file named from at path
* @param zipURL
* @param xmlURL
* @param xmlFileName
*/
public static void makeZip(String zipURL, String xmlURL, String xmlFileName) throws
IOException
{
FileOutputStream fos = new FileOutputStream(new File(zipURL));
ZipOutputStream zos = new ZipOutputStream(fos);
// zos.setLevel();
FileInputStream fis = new FileInputStream(xmlURL);
zos.putNextEntry(new ZipEntry(xmlFileName+".xml"));
writeInOutputStream(fis,zos);
String bpath = "c:\\";
FileInputStream fisBLOB = createInputStream(bpath);
zos.putNextEntry(new ZipEntry("blob.lob"));
writeInOutputStream(fisBLOB, zos);
zos.closeEntry();
String cpath = "c:\\";
FileInputStream fisCLOB = createInputStream(cpath);
zos.putNextEntry(new ZipEntry("clob.lob"));
writeInOutputStream(fisCLOB, zos);
zos.closeEntry();
fis.close();
fisCLOB.close();
fisBLOB.close();
zos.close();
fos.close();
}
/**
* unzipps a zip file placed at to path
* @param zipURL
* @param xmlURL
*/
public static void unZip(String zipURL, String xmlURL) throws IOException
{
FileOutputStream fosBLOB = new FileOutputStream(new File("c:\\"));
FileOutputStream fosCLOB = new FileOutputStream(new File("c:\\"));
FileInputStream fis = new FileInputStream(new File(zipURL));
ZipInputStream zis = new ZipInputStream(fis);
FileOutputStream fos = new FileOutputStream(xmlURL);
ZipEntry ze = zis.getNextEntry();
ExtractZip(zis, fos, fosBLOB, fosCLOB, ze);
ze = zis.getNextEntry();
ExtractZip(zis, fos, fosBLOB, fosCLOB, ze);
ze = zis.getNextEntry();
ExtractZip(zis, fos, fosBLOB, fosCLOB, ze);
fos.flush();
fis.close();
fos.close();
fosCLOB.close();
fosBLOB.close();
zis.close();
}
private static void ExtractZip(ZipInputStream zis, FileOutputStream fos,
FileOutputStream fosBLOB,
FileOutputStream fosCLOB, ZipEntry ze) throws
IOException {
if (ze.getName().equalsIgnoreCase("blob.lob"))
writeInOutputStream(zis, fosBLOB);
else if (ze.getName().equalsIgnoreCase("clob.lob"))
writeInOutputStream(zis, fosCLOB);
else
writeInOutputStream(zis, fos);
}
private static void writeInOutputStream(InputStream is,
OutputStream os) throws
IOException {
byte[] buf = new byte[1024];
int len = 0;
while ( (len = is.read(buf)) > 0)
{
os.write(buf, 0, len);
}
}
/**
* makes a zip file named from at path
* @param zipURL
* @param xmlURL
* @param xmlFileName
*/
public static void makeStructZip(String zipURL, String xmlURL, String xmlFileName) throws
IOException
{
FileOutputStream fos = new FileOutputStream(new File(zipURL));
ZipOutputStream zos = new ZipOutputStream(fos);
// zos.setLevel();
FileInputStream fis = new FileInputStream(xmlURL);
zos.putNextEntry(new ZipEntry(xmlFileName+".xml"));
writeInOutputStream(fis,zos);
zos.closeEntry();
fis.close();
zos.close();
}
/**
* unzipps a zip file placed at to path
* @param zipURL
* @param xmlURL
*/
public static void unStructZip(String zipURL, String xmlURL) throws IOException
{
FileInputStream fis = new FileInputStream(new File(zipURL));
ZipInputStream zis = new ZipInputStream(fis);
FileOutputStream fos = new FileOutputStream(xmlURL);
ZipEntry ze = zis.getNextEntry();
writeInOutputStream(zis,fos);
fos.flush();
fis.close();
fos.close();
zis.close();
}
private static FileInputStream createInputStream(String bpath) throws IOException{
FileInputStream fis = null;
try
{
fis = new FileInputStream(bpath);
}
catch (FileNotFoundException ex)
{
FileOutputStream temp = new FileOutputStream(bpath);
fis = new FileInputStream(bpath);
}
return fis;
}
}