All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.julielab.xmlData.config.DBConfig Maven / Gradle / Ivy

Go to download

A utility for managing documents stored in a PostgreSQL database. The documents are imported into a PostgreSQL DB as full texts with the goal to be able to retrieve the documents by their PubMedID efficiently. For more sophisticated tasks, a user configuration file can be delivered which can take control of the table schema to use, the PostgreSQL schema to use and the actual database server to connect to as well as the concrete database.

The newest version!
package de.julielab.xmlData.config;

import java.io.IOException;

import org.apache.commons.lang3.StringUtils;

import com.ximpleware.AutoPilot;
import com.ximpleware.EOFException;
import com.ximpleware.EncodingException;
import com.ximpleware.EntityException;
import com.ximpleware.NavException;
import com.ximpleware.ParseException;
import com.ximpleware.PilotException;
import com.ximpleware.VTDException;
import com.ximpleware.VTDGen;
import com.ximpleware.VTDNav;
import com.ximpleware.XPathEvalException;
import com.ximpleware.XPathParseException;

public class DBConfig extends ConfigBase {

	private static final String XPATH_CONF_DB_INFO = "//DBConnectionInformation";
	private static final String XPATH_CONF_ACTIVE_DB_NAME = "//activeDBConnection";
	private static final String XPATH_CONF_ACTIVE_PG_SCHEMA = "//activePostgresSchema";
	private static final String XPATH_CONF_ACTIVE_DATA_PG_SCHEMA = "//activeDataPostgresSchema";

	private static final String XPATH_CONF_DBs = XPATH_CONF_DB_INFO + "/DBConnections";
	private static final String XPATH_CONF_DB = XPATH_CONF_DBs + "/DBConnection";
	private static final String XPATH_CONF_MAX_CON = XPATH_CONF_DB_INFO + "/maxActiveDBConnections";
	private static final String XPATH_CONF_TEMPLATE = XPATH_CONF_DB + "[@name='%s']";
	private static final String XPATH_CONF_URL_TEMPLATE = XPATH_CONF_TEMPLATE;
	private static final String ATTRIBUTE_URL = "url";

	private String url;
	private String activePGSchema;
	private int maxConnections = 5;
	private String activeDatabase;
	private String activeDataPGSchema;

	public DBConfig(byte[] configData) throws VTDException {
		try {
			// Convert the schema name to lower case as Postgres does so.
			activePGSchema = getActiveConfig(configData, XPATH_CONF_ACTIVE_PG_SCHEMA).toLowerCase();
			activeDataPGSchema = getActiveConfig(configData, XPATH_CONF_ACTIVE_DATA_PG_SCHEMA).toLowerCase();
			activeDatabase = getActiveConfig(configData, XPATH_CONF_ACTIVE_DB_NAME);
			buildDatabaseValues(activeDatabase, configData);

			VTDGen vg = new VTDGen();
			vg.setDoc(configData);
			vg.parse(true);
			VTDNav vn = vg.getNav();
			AutoPilot ap = new AutoPilot(vn);
			String maxConnString = stringFromXpath(ap, XPATH_CONF_MAX_CON);
			if (!StringUtils.isBlank(maxConnString))
				maxConnections = Integer.parseInt(maxConnString);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void buildDatabaseValues(String activeDatabase, byte[] mergedConfData)
			throws EncodingException, EOFException, EntityException, ParseException, XPathParseException,
			XPathEvalException, NavException, PilotException {
		VTDGen vg = new VTDGen();
		vg.setDoc(mergedConfData);
		vg.parse(true);
		VTDNav vn = vg.getNav();
		AutoPilot ap = new AutoPilot(vn);

		ap.selectXPath(String.format(XPATH_CONF_URL_TEMPLATE, activeDatabase));
		if (ap.evalXPath() != -1) {
			int attrIndex = vn.getAttrVal(ATTRIBUTE_URL);
			if (attrIndex != -1)
				url = vn.toString(attrIndex);
		} else {
			throw new IllegalArgumentException(
					"There is no database connection named \"" + activeDatabase + "\" defined in the configuration.");
		}
	}

	/**
	 * @return - url of the database
	 */
	public String getUrl() {
		return url;
	}

	/**
	 * 
	 * @return The active Postgres Schema.
	 */
	public String getActivePGSchema() {
		return activePGSchema;
	}

	/**
	 * 
	 * @return The active data Postgres Schema.
	 */
	public String getActiveDataPGSchema() {
		return activeDataPGSchema;
	}

	/**
	 * @param pgSchema
	 */
	public void setActivePGSchema(String pgSchema) {
		activePGSchema = pgSchema;
	}

	public String getActiveDatabase() {
		return activeDatabase;
	}

	public int getMaxConnections() {
		return maxConnections;
	}

	@Override
	public String toString() {
		String str;
		str = "Database URL: " + url + "\n";
		str += "Active Postgres schema: " + activePGSchema + "\n";
		str += "Max open connections: " + maxConnections;
		return str;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy