}
}
private SQLReportDataFactory fixSQLDataFactoryConfiguration(SQLReportDataFactory factory, HashMap<String, String> postgres_settings) throws Exception {
SQLReportDataFactory new_factory;
DriverConnectionProvider new_settings;
String postgres_host = postgres_settings.get("host");
String postgres_port = postgres_settings.get("port");
String postgres_db = postgres_settings.get("db");
String postgres_login = postgres_settings.get("login");
String postgres_password = postgres_settings.get("password");
if(postgres_host == null || postgres_db == null)
throw new Exception("Invalid JDBC data source settings passed: PostgreS server's hostname (or IP address) and the database name must be set if specifying custom connection settings.");
if(postgres_login == null)
postgres_login = factory.getUserField();
if(postgres_password == null)
postgres_password = factory.getPasswordField();
if(postgres_port == null)
postgres_port = "5432";
String jdbc_url = "jdbc:postgresql://" + postgres_host + ":" + postgres_port + "/" + postgres_db;
new_settings = new DriverConnectionProvider();
new_settings.setDriver("org.postgresql.Driver");
new_settings.setUrl(jdbc_url);
new_settings.setProperty("user", postgres_login);
new_settings.setProperty("password", postgres_password);
//The following may not be necessary since we set the JDBC URL
new_settings.setProperty("::pentaho-reporting::name", "Custom PostgreS datasource");
new_settings.setProperty("::pentaho-reporting::hostname", postgres_host);
new_settings.setProperty("::pentaho-reporting::port", postgres_port);
new_settings.setProperty("::pentaho-reporting::database-name", postgres_db);
new_settings.setProperty("::pentaho-reporting::database-type", "POSTGRESQL");
new_factory = new SQLReportDataFactory(new_settings);
new_factory.setUserField(postgres_login);
new_factory.setPasswordField(postgres_password);
new_factory.setGlobalScriptLanguage(factory.getGlobalScriptLanguage());