/* DigiDoc4J library
*
* This software is released under either the GNU Library General Public
* License (see LICENSE.LGPL).
*
* Note that the only valid version of the LGPL license as far as this
* project is concerned is the original GNU Library General Public License
* Version 2.1, February 1999
*/
package org.digidoc4j.impl.bdoc.asic;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.commons.io.IOUtils;
import org.digidoc4j.Configuration;
import org.digidoc4j.DataFile;
import org.digidoc4j.exceptions.TechnicalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AsicStreamContainerParser extends AsicContainerParser{
private final static Logger logger = LoggerFactory.getLogger(AsicStreamContainerParser.class);
private ZipInputStream zipInputStream;
public AsicStreamContainerParser(InputStream inputStream, Configuration configuration) {
super(configuration);
zipInputStream = new ZipInputStream(inputStream);
}
@Override
protected void parseContainer() {
parseZipStream();
updateDataFilesMimeType();
}
private void parseZipStream() {
logger.debug("Parsing zip stream");
try {
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
parseEntry(entry);
}
} catch (IOException e) {
logger.error("Error reading bdoc container stream: " + e.getMessage());
throw new TechnicalException("Error reading bdoc container stream: ", e);
} finally {
IOUtils.closeQuietly(zipInputStream);
}
}
private void updateDataFilesMimeType() {
for (DataFile dataFile : getDataFiles().values()) {
String fileName = dataFile.getName();
String mimeType = getDataFileMimeType(fileName);
dataFile.setMediaType(mimeType);
}
}
@Override
protected void extractManifest(ZipEntry entry) {
AsicEntry asicEntry = extractAsicEntry(entry);
parseManifestEntry(asicEntry.getContent());
}
@Override
protected InputStream getZipEntryInputStream(ZipEntry entry) {
return zipInputStream;
}
}