All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.skjolber.unzip.ZipFileProcessor Maven / Gradle / Ivy

package com.github.skjolber.unzip;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;

public class ZipFileProcessor implements Runnable {

	protected AtomicInteger counter;
	protected ZipFile zipFile;
	protected FileEntryHandler handler;
	protected List files;
	protected ThreadPoolExecutor executor;
	
	private boolean closed = false;
	
	public ZipFileProcessor(AtomicInteger counter, List files, ZipFile zipFile, FileEntryHandler handler, ThreadPoolExecutor executor) {
		this.counter = counter;
		this.zipFile = zipFile;
		this.handler = handler;
		this.files = files;
		this.executor = executor;
	}

	public void run() {
		do {
			int number = counter.getAndIncrement();
			if(number < files.size()) {
				String name = files.get(number);
				try {
					ZipArchiveEntry ze = zipFile.getEntry(name);
					if(ze != null) {
						InputStream zin = zipFile.getInputStream(ze);
						try {
							handler.beginFileEntry(name);
							FileEntryStreamHandler fileEntryStreamHandler = handler.getFileEntryStreamHandler(name, ze.getSize(), executor);
							if(fileEntryStreamHandler != null) {
								fileEntryStreamHandler.handle(zin, true);
							} else {
								handler.endFileEntry(name, executor);
							}
						} catch (Exception e) {
							throw new RuntimeException("Problem parsing " + name, e);
						} finally {
							zin.close();
						}
					} else {
						// TOOD not found
					}
				} catch (IOException e) {
					throw new IllegalArgumentException(e);
				}
			} else {
				try {
					zipFile.close();
				} catch (IOException e) {
					throw new RuntimeException();
				}

				// work finished
				break;
			}
			
		} while(!closed);
	}

	public void close() {
		this.closed = true;
	}
	

	
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy