70 lines
2.6 KiB
Java
70 lines
2.6 KiB
Java
package org.lucares.pdbui;
|
|
|
|
import java.io.BufferedInputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.nio.file.Path;
|
|
import java.util.Enumeration;
|
|
import java.util.Optional;
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipFile;
|
|
|
|
import org.lucares.pdb.api.StringCompressor;
|
|
import org.lucares.pdb.datastore.Entries;
|
|
import org.lucares.pdb.datastore.RuntimeTimeoutException;
|
|
import org.lucares.performance.db.PerformanceDb;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
@Component
|
|
public class FileDropZipHandler implements FileDropFileTypeHandler {
|
|
|
|
private final PerformanceDb performanceDb;
|
|
private final FileDropConfigProvider configProvider;
|
|
private final StringCompressor stringCompressor;
|
|
|
|
@Autowired
|
|
public FileDropZipHandler(final PerformanceDb performanceDb, final FileDropConfigProvider configProvider,
|
|
final StringCompressor stringCompressor) {
|
|
super();
|
|
this.performanceDb = performanceDb;
|
|
this.configProvider = configProvider;
|
|
this.stringCompressor = stringCompressor;
|
|
}
|
|
|
|
@Override
|
|
public boolean isHandle(final Path file) {
|
|
return file.getFileName().toString().endsWith(".zip");
|
|
}
|
|
|
|
@Override
|
|
public void handle(final Path file) throws IOException, RuntimeTimeoutException, InterruptedException {
|
|
final ZipFile zipFile = new ZipFile(file.toFile());
|
|
final Enumeration<? extends ZipEntry> entries = zipFile.entries();
|
|
|
|
while (entries.hasMoreElements()) {
|
|
final ZipEntry entry = entries.nextElement();
|
|
// System.out.println(entry.getName() + " isDir: " + entry.isDirectory());
|
|
|
|
if (entry.isDirectory()) {
|
|
continue;
|
|
}
|
|
|
|
final Optional<CsvReaderSettings> csvSettings = configProvider.provideCsvReaderSettings(entry.getName());
|
|
if (csvSettings.isPresent()) {
|
|
final ArrayBlockingQueue<Entries> queue = performanceDb.getQueue();
|
|
|
|
final CsvReaderSettings csvReaderSettings = csvSettings.get();
|
|
|
|
final CsvToEntryTransformer csvToEntryTransformer = CsvToEntryTransformerFactory
|
|
.createCsvToEntryTransformer(queue, csvReaderSettings, stringCompressor);
|
|
try (final InputStream inputStream = new BufferedInputStream(zipFile.getInputStream(entry),
|
|
1024 * 1024)) {
|
|
csvToEntryTransformer.readCSV(inputStream);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|