package org.kvj.lima1.pg.sync.data;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.sql.DataSource;
import org.apache.commons.fileupload.FileItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RestoreManager {
private static Logger log = LoggerFactory.getLogger(RestoreManager.class);
static List<String> getFilesInZip(InputStream stream) throws IOException {
ZipInputStream zip = new ZipInputStream(stream);
List<String> files = new ArrayList<String>();
ZipEntry entry = null;
while ((entry = zip.getNextEntry()) != null) {
files.add(entry.getName());
zip.closeEntry();
}
zip.close();
return files;
}
static InputStream openFileInZip(InputStream stream, String name)
throws IOException {
ZipInputStream zip = new ZipInputStream(stream);
ZipEntry entry = null;
while ((entry = zip.getNextEntry()) != null) {
if (entry.getName().equals(name)) {
return zip;
}
zip.closeEntry();
}
zip.close();
return null;
}
public static String restoreFromFiles(DataSource ds, String app,
String user, List<FileItem> items) {
for (FileItem item : items) {
if (!item.isFormField()) {
// File
try {
List<String> files = getFilesInZip(item.getInputStream());
String result = null;
if (files.contains("meta.json")) {
result = FileStorage.restoreFiles(ds, app, user, item);
} else {
result = DataStorage.restoreData(ds, app, user, item);
}
if (null != result) {
log.error("Restore file {} failed", item.getName());
return result;
}
} catch (Exception e) {
log.warn(
"Skip file " + item.getName() + " not a valid one",
e);
}
}
}
return null;
}
}