}
private boolean doUnzipContent(final InputStream in, final String dest, JCRSessionWrapper currentUserSession) throws RepositoryException {
List<String> errorFiles = new ArrayList<String>();
boolean result = false;
NoCloseZipInputStream zis = null;
try {
zis = new NoCloseZipInputStream(in);
ZipEntry zipentry;
while ((zipentry = zis.getNextEntry()) != null) {
String filename = null;
try {
filename = zipentry.getName().replace('\\', '/');
if (logger.isDebugEnabled()) {
logger.debug("Unzip file (" + zipentry.getMethod() + ")" + filename);
}
if (filename.endsWith("/")) {
filename = filename.substring(0, filename.length() - 1);
}
int endIndex = filename.lastIndexOf('/');
String parentName = dest;
if (endIndex > -1) {
parentName += "/" + filename.substring(0, endIndex);
filename = filename.substring(endIndex + 1);
}
JCRNodeWrapper target = ensureDir(parentName, currentUserSession);
if (zipentry.isDirectory()) {
target.createCollection(JCRContentUtils.escapeLocalNodeName(filename));
} else {
String contentType = JahiaContextLoaderListener.getServletContext().getMimeType(filename);
target.uploadFile(filename, zis, contentType);
}
result = true;
} /*catch (IOException e) {
logger.error("Error when unzipping file", e);
if (filename != null) {
errorFiles.add(filename);
}
} */ catch (InternalError err) {
logger.error("Error when unzipping file", err);
if (filename != null) {
errorFiles.add(filename);
}
}
}
} catch (IOException e) {
logger.error("Error when unzipping file", e);
result = false;
} catch (InternalError err) {
logger.error("Error when unzipping file, " + err.getMessage(), err);
result = false;
} finally {
if (zis != null) {
try {
zis.reallyClose();
} catch (Exception e) {
logger.error("Error when closing zip stream", e);
}
}
}