
service.database.command.ExportDatabase Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of database-service Show documentation
Show all versions of database-service Show documentation
This is a library providing an API for accessing databases via socket connections
The newest version!
package service.database.command;
import databaseconnector.api.Column;
import databaseconnector.api.DatabaseConnection;
import databaseconnector.api.exception.TableNotExistsException;
import databaseconnector.api.sql.SQLDatabaseConnection;
import service.database.exception.DatabaseRoleNotActivatedException;
import service.database.exception.ZipCreationException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ExportDatabase extends AbstractDatabaseCommand {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
setAccessControlAllowOriginHeader(req, resp);
try{
SQLDatabaseConnection databaseConnection = getDatabaseConnection();
Pattern tablePattern = getTablePattern(req);
Set tableNames = databaseConnection.read(row -> tablePattern.asPredicate().test(row.getTable().getName()))
.map(row -> row.getTable().getName().toLowerCase())
.collect(Collectors.toSet());
resp.setContentType("application/zip");
ZipOutputStream zipOutputStream = new ZipOutputStream(resp.getOutputStream(), StandardCharsets.UTF_8);
tableNames.forEach(tableName -> {
ZipEntry zipEntry = new ZipEntry(String.format("%s.csv", tableName));
try {
zipOutputStream.putNextEntry(zipEntry);
} catch (IOException e) {
throw new ZipCreationException(e);
}
PrintWriter writer = new PrintWriter(zipOutputStream, true);
try {
List columnNames = databaseConnection.getColumns(tableName).stream()
.map(Column::getName)
.collect(Collectors.toList());
writer.println(String.join(";", columnNames));
databaseConnection.read(row -> row.getTable().getName().equalsIgnoreCase(tableName)).forEach(row -> {
List values = columnNames.stream().map(columnName -> {
Optional rowColumn = row.getColumns().stream()
.filter(column -> column.getName().equalsIgnoreCase(columnName))
.findAny();
if (!rowColumn.isPresent()){
return "";
}
Optional value = row.get(rowColumn.get());
if (!value.isPresent()){
return "";
}
return value.get().get();
}).collect(Collectors.toList());
String valueString = String.join(";", values);
writer.println(valueString);
});
} catch (TableNotExistsException e) {
throw new ZipCreationException(e);
}
writer.flush();
});
zipOutputStream.close();
resp.setStatus(200);
} catch (DatabaseRoleNotActivatedException exception) {
displayError(resp, 501, exception.getMessage());
} catch (ZipCreationException exception) {
displayError(resp, 500, exception.getMessage());
}
}
public static String getCommand(){
return "/command/database/export";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy