/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.resourcepool;
import com.eas.client.settings.DbConnectionSettings;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author mg
*/
public class DatasourcesArgsConsumer {
public static final String CMD_SWITCHS_PREFIX = "-";
// parameters names
public static final String DB_RESOURCE_CONF_PARAM = "datasource";
public static final String DB_URL_CONF_PARAM = "dburl";
public static final String DB_USERNAME_CONF_PARAM = "dbuser";
public static final String DB_PASSWORD_CONF_PARAM = "dbpassword";
public static final String DB_SCHEMA_CONF_PARAM = "dbschema";
public static final String DB_MAX_CONNECTIONS_CONF_PARAM = "maxconnections";
public static final String DB_MAX_STATEMENTS_CONF_PARAM = "maxstatements";
// error messages
public static final String BAD_DB_RESOURCE_MSG = "Datasource name not specified";
public static final String BAD_DB_USERNAME_MSG = "dbuser value not specified";
public static final String BAD_DB_PASSWORD_MSG = "dbpassword value not specified";
public static final String BAD_DB_MAX_CONNECTIONS_MSG = "Bad maxconnections option";
public static final String BAD_DB_MAX_STATEMENTS_MSG = "Bad maxstatements option";
public static final String BAD_DB_RESOURCE_TIMEOUT_MSG = "Bad resourcetimeout option";
public static final String WITHOUT_DATASOURCE_MSG = " without datasource detected";
protected List<DbConnectionSettings> parsedDatasources = new ArrayList<>();
public int consume(String[] args, int i) throws Exception {
if ((CMD_SWITCHS_PREFIX + DB_RESOURCE_CONF_PARAM).equalsIgnoreCase(args[i])) {
if (i + 1 < args.length) {
String datasourcename = args[i + 1];
DbConnectionSettings settings = new DbConnectionSettings();
settings.setMaxConnections(BearResourcePool.DEFAULT_MAXIMUM_SIZE);
settings.setMaxStatements(BearResourcePool.DEFAULT_MAXIMUM_SIZE * 5);
settings.setName(datasourcename);
parsedDatasources.add(settings);
} else {
throw new IllegalArgumentException(BAD_DB_RESOURCE_MSG);
}
} else if ((CMD_SWITCHS_PREFIX + DB_URL_CONF_PARAM).equalsIgnoreCase(args[i])) {
if (i + 1 < args.length) {
if (!parsedDatasources.isEmpty()) {
parsedDatasources.get(parsedDatasources.size() - 1).setUrl(args[i + 1]);
} else {
throw new IllegalArgumentException(DB_URL_CONF_PARAM + WITHOUT_DATASOURCE_MSG);
}
} else {
throw new IllegalArgumentException(BAD_DB_USERNAME_MSG);
}
} else if ((CMD_SWITCHS_PREFIX + DB_USERNAME_CONF_PARAM).equalsIgnoreCase(args[i])) {
if (i + 1 < args.length) {
if (!parsedDatasources.isEmpty()) {
parsedDatasources.get(parsedDatasources.size() - 1).setUser(args[i + 1]);
} else {
throw new IllegalArgumentException(DB_USERNAME_CONF_PARAM + WITHOUT_DATASOURCE_MSG);
}
} else {
throw new IllegalArgumentException(BAD_DB_USERNAME_MSG);
}
} else if ((CMD_SWITCHS_PREFIX + DB_PASSWORD_CONF_PARAM).equalsIgnoreCase(args[i])) {
if (i + 1 < args.length) {
if (!parsedDatasources.isEmpty()) {
parsedDatasources.get(parsedDatasources.size() - 1).setPassword(args[i + 1]);
} else {
throw new IllegalArgumentException(DB_PASSWORD_CONF_PARAM + WITHOUT_DATASOURCE_MSG);
}
} else {
throw new IllegalArgumentException(BAD_DB_PASSWORD_MSG);
}
} else if ((CMD_SWITCHS_PREFIX + DB_SCHEMA_CONF_PARAM).equalsIgnoreCase(args[i])) {
if (i + 1 < args.length) {
if (!parsedDatasources.isEmpty()) {
parsedDatasources.get(parsedDatasources.size() - 1).setSchema(args[i + 1]);
} else {
throw new IllegalArgumentException(DB_SCHEMA_CONF_PARAM + WITHOUT_DATASOURCE_MSG);
}
} else {
throw new IllegalArgumentException(BAD_DB_PASSWORD_MSG);
}
} else if ((CMD_SWITCHS_PREFIX + DB_MAX_CONNECTIONS_CONF_PARAM).equalsIgnoreCase(args[i])) {
if (i + 1 < args.length) {
if (!parsedDatasources.isEmpty()) {
parsedDatasources.get(parsedDatasources.size() - 1).setMaxConnections(Integer.valueOf(args[i + 1]));
} else {
throw new IllegalArgumentException(DB_MAX_CONNECTIONS_CONF_PARAM + WITHOUT_DATASOURCE_MSG);
}
} else {
throw new IllegalArgumentException(BAD_DB_MAX_CONNECTIONS_MSG);
}
} else if ((CMD_SWITCHS_PREFIX + DB_MAX_STATEMENTS_CONF_PARAM).equalsIgnoreCase(args[i])) {
if (i + 1 < args.length) {
if (!parsedDatasources.isEmpty()) {
parsedDatasources.get(parsedDatasources.size() - 1).setMaxStatements(Integer.valueOf(args[i + 1]));
} else {
throw new IllegalArgumentException(DB_MAX_STATEMENTS_CONF_PARAM + WITHOUT_DATASOURCE_MSG);
}
} else {
throw new IllegalArgumentException(BAD_DB_MAX_STATEMENTS_MSG);
}
} else {
return 0;
}
return 2;
}
public void registerDatasources() throws SQLException {
parsedDatasources.stream().forEach((settings) -> {
GeneralResourceProvider.getInstance().registerDatasource(settings.getName(), settings);
Logger.getLogger(DatasourcesArgsConsumer.class.getName()).log(Level.INFO, "Datasource \"{0}\" has been registered", settings.getName());
});
}
}