/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server.property;
import Sirius.util.image.*;
import org.apache.log4j.Logger;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import de.cismet.tools.PasswordEncrypter;
/**
* Verwaltet Informationen zur allgemeinen Serverkonfiguration. (Local-, Call-, Translationserver). Das jeweilige
* Configfile kann folgende Schluessel und Werte besitzen.
*
* <table border=1>
* <tr>
* <td><b>KEY</b></td>
* <td><b>VALUE</b></td>
* <td><b>LS</b></td>
* <td><b>CS</b></td>
* <td><b>PS</b></td>
* <td><b>TS</b></td>
* <td><b>Registry</b></td>
* </tr>
* <tr>
* <td>serverName</td>
* <td>Der Name, mit dem dieser Server im System in Erscheinung tritt</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td></td>
* </tr>
* <tr>
* <td>port</td>
* <td>Der Port, mit dem dieser Server im System in Erscheinung tritt</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td></td>
* </tr>
* <tr>
* <td>defaultIconDirectory</td>
* <td>Standarddirectory fuer Icons</td>
* <td>x</td>
* <td></td>
* <td></td>
* <td></td>
* </tr>
* <tr>
* <td>iconDirectory</td>
* <td>Directory fuer Icons</td>
* <td>x</td>
* </tr>
* <tr>
* <td>dbConnectionString</td>
* <td>der Connectionstring, um die Datenbank zu kontaktieren</td>
* <td></td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* </tr>
* <tr>
* <td>translDbConnectionString</td>
* <td>der Connectionstring, um die TranslationDB zu kontaktieren</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* </tr>
* <tr>
* <td>jdbcDriver</td>
* <td>der JDBC-Treiber fuer die jeweilige DB</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td></td>
* </tr>
* <tr>
* <td>dbType</td>
* <td>Art der DB</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* </tr>
* <tr>
* <td>dbIP</td>
* <td>IP der Datenbank</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* </tr>
* <tr>
* <td>dbPassword</td>
* <td>Benutzerpasswort fuer die DB</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* </tr>
* <tr>
* <td>cacheStatements</td>
* <td>TRUE oder FALSE</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* </tr>
* <tr>
* <td>fileSeparator</td>
* <td>"\\"fuer WinX-Systeme, "/" fuer Linux....</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* </tr>
* <tr>
* <td>registryIPs</td>
* <td>die IP-Adressen, auf denen SiriusRegistries laufen und der Server sich anmelden soll. Mehrerer Adressen sind
* durch ; zu trennen</td>
* <td>x</td>
* <td>x</td>
* <td>x</td>
* <td></td>
* </tr>
* </table>
* <br>
* Beispielfile:<br>
* <br>
* serverName=Altlasten<br>
* defaultIconDirectory=i:\\MetaService\\Sirius\\Icons<br>
* dbConnectionString=jdbc:odbc:altlasten_saarbruecken<br>
* jdbcDriver=jdbc....<br>
* cacheStatements=FALSE<br>
* fileSeperator=\\<br>
* registryIps=134.96.177.20;134.96.177.21;134.96.177.44<br>
*
* @author Bernd Kiefer
* @version 1.1 (schlob) *
*/
public class ServerProperties extends java.util.PropertyResourceBundle {
//~ Static fields/initializers ---------------------------------------------
private static final transient Logger LOG = Logger.getLogger(ServerProperties.class);
//~ Constructors -----------------------------------------------------------
/**
* Aufruf des entsprechenden Superkonstruktors.*
*
* @param inputStream DOCUMENT ME!
*
* @throws IOException DOCUMENT ME!
*/
public ServerProperties(final InputStream inputStream) throws IOException {
super(inputStream);
}
/**
* Aufruf des entsprechenden Superkonstruktors.*
*
* @param configFile DOCUMENT ME!
*
* @throws FileNotFoundException DOCUMENT ME!
* @throws IOException DOCUMENT ME!
*/
public ServerProperties(final String configFile) throws FileNotFoundException, IOException {
super(new FileInputStream(configFile));
}
/**
* Aufruf des entsprechenden Superkonstruktors.*
*
* @param file DOCUMENT ME!
*
* @throws IOException DOCUMENT ME!
*/
public ServerProperties(final File file) throws IOException {
super(new FileInputStream(file));
}
//~ Methods ----------------------------------------------------------------
/**
* Liefert den Wert des Keys "serverName".
*
* @return Servername*
*/
public final String getServerName() {
return this.getString("serverName"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final int getServerPort() {
try {
final String serverPort = getString("serverPort");
if (serverPort == null) {
if (LOG.isInfoEnabled()) {
LOG.info("server port not set, returning rmi registry port"); // NOI18N
}
return Integer.valueOf(getRMIRegistryPort());
} else {
return Integer.valueOf(serverPort);
}
} catch (final Exception e) {
LOG.warn("error finding server port, returning rmi registry port", e); // NOI18N
return Integer.valueOf(getRMIRegistryPort());
}
}
/**
* Delivers the server's rest port.<br/>
* <br/>
* <b>If the port is not retrievable from the property file the port number defaults to <code>9986</code></b>.
*
* @return the server's rest port
*/
public final int getRestPort() {
try {
return Integer.valueOf(getString("server.rest.port")); // NOI18N
} catch (final NumberFormatException e) {
final String message = "could not parse server.rest.port property value"; // NOI18N
LOG.warn(message, e);
return 9986;
} catch (final MissingResourceException e) {
final String message = "server.rest.port property not set"; // NOI18N
if (LOG.isInfoEnabled()) {
LOG.info(message, e);
}
return 9986;
}
}
/**
* Indicates whether rest shall be enabled.<br/>
* <br/>
* <b>If the flag is not retrievable from the property file it defaults to <code>false</code></b>.
*
* @return whether the server shall enable rest
*/
public final boolean isRestEnabled() {
try {
return Boolean.valueOf(getString("server.rest.enable")); // NOI18N
} catch (final MissingResourceException e) {
final String message = "server.rest.enable property not set"; // NOI18N
if (LOG.isInfoEnabled()) {
LOG.info(message, e);
}
return false;
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getServerProxyURL() {
return getString("server.proxy.url");
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getRestServerKeystore() {
return getString("server.rest.keystore.server"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getRestServerKeystorePW() {
return getString("server.rest.keystore.server.password"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getRestServerKeystoreKeyPW() {
return getString("server.rest.keystore.server.keypassword"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getRestClientKeystore() {
return getString("server.rest.keystore.client"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final boolean isRestClientAuth() {
try {
return Boolean.valueOf(getString("server.rest.keystore.client.auth")); // NOI18N
} catch (final MissingResourceException e) {
final String message = "server.rest.keystore.client.auth property not set"; // NOI18N
if (LOG.isInfoEnabled()) {
LOG.info(message, e);
}
return false;
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getRestClientKeystorePW() {
return getString("server.rest.keystore.client.password"); // NOI18N
}
/**
* Indicates whether rest shall be run in debug mode.<br/>
* <br/>
* <b>If the flag is not retrievable from the property file it defaults to <code>false</code></b>.
*
* @return whether the server shall run rest in debug mode
*/
public final boolean isRestDebug() {
try {
return Boolean.valueOf(getString("server.rest.debug")); // NOI18N
} catch (final MissingResourceException e) {
final String message = "server.rest.debug property not set"; // NOI18N
if (LOG.isInfoEnabled()) {
LOG.info(message, e);
}
return false;
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getDefaultIconDir() {
return this.getString("defaultIconDirectory"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getIconDirectory() {
return this.getObject("iconDirectory").toString(); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getQueryStoreDirectory() {
return this.getObject("queryStoreDirectory").toString(); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getDbConnectionString() {
return this.getString("connection.url"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final int getPoolSize() {
return getInt("connection.pool_size"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getJDBCDriver() {
return this.getString("connection.driver_class"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getSQLDialect() {
return this.getString("dialect"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getDbPassword() {
return PasswordEncrypter.decryptString(this.getString("connection.password")); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getDbUser() {
return this.getString("connection.username"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getFileSeparator() {
return this.getString("fileSeparator"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String[] getRegistryIps() {
return this.getStrings("registryIPs"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getRMIRegistryPort() {
try {
final String rmiRegPort = getString("rmiRegistryPort");
if (rmiRegPort == null) {
if (LOG.isInfoEnabled()) {
LOG.info("rmi registry port not set, returning default value 1099"); // NOI18N
}
return "1099";
} else {
return rmiRegPort;
}
} catch (final Exception e) {
LOG.warn("error finding rmi reg port, returning default value 1099", e); // NOI18N
return "1099";
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getStartMode() {
return this.getString("startMode"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getServerPolicy() {
return this.getString("serverPolicy"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getClassNodePolicy() {
return this.getString("classNodePolicy"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getPureNodePolicy() {
return this.getString("pureNodePolicy"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final String getAttributePolicy() {
return this.getString("attributePolicy"); // NOI18N
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public final int[] getQuotedTypes() {
return this.getInts("quotedTypes"); // NOI18N
}
/* MetaJDBC-Treiber */
/**
* DOCUMENT ME!
*
* @return typ des Cache oder null wenn key "cache_type" nicht vorhanden.
*/
public final String getMetaJDBC_CacheType() {
try {
return this.getString("cache_type"); // NOI18N
} catch (Exception e) {
return null;
}
}
/**
* DOCUMENT ME!
*
* @return Pfad zu log4j-File des MetaJDBC-Treibers oder null wenn key "log4j_prop_file" nicht vorhanden.
*/
public final String getLog4jPropertyFile() {
try {
return this.getString("log4j_prop_file"); // NOI18N
} catch (Exception e) {
return null;
}
}
/**
* DOCUMENT ME!
*
* @return Name der Schema oder null wenn key "schema" nicht vorhanden.
*/
public final String getMetaJDBC_schema() {
try {
return this.getString("schema"); // NOI18N
} catch (Exception e) {
return null;
}
}
/* /MetaJDBC-Treiber */
// ----------------------------------------------------------------------------------------------------------------------------
/**
* Liest alle defaultIcons aus dem defaultIconDirectory.
*
* @return DOCUMENT ME!
*/
public Image[] getDefaultIcons() {
final File file = new File(getDefaultIconDir());
// File file = new File("p:\\Metaservice\\Sirius\\System\\imgDefault");
if (LOG.isDebugEnabled()) {
LOG.debug("<SRVProperties> call getDefaultIcons"); // NOI18N
LOG.debug("<SRVProperties> get DefaultIcons from Path: " + getDefaultIconDir() + file.exists()); // NOI18N
}
File[] images = null;
Image[] sImages = new Image[0];
try {
if (file.isDirectory()) {
if (LOG.isDebugEnabled()) {
LOG.debug("<SRVProperties> valid Directory"); // NOI18N
}
images = file.listFiles();
if (LOG.isDebugEnabled()) {
LOG.debug("<SRVProperties> found " + images.length + " icons"); // NOI18N
}
sImages = new Image[images.length];
String s = ""; // NOI18N
for (int i = 0; i < images.length; i++) {
s += (images[i].getName() + ";"); // NOI18N
if (LOG.isDebugEnabled()) {
LOG.debug(s);
}
sImages[i] = new Image(images[i].getAbsolutePath());
}
} else {
throw new Exception("file is not an Directory"); // NOI18N
}
} catch (Exception e) {
LOG.error(e);
}
return sImages;
}
// ----------------------------------------------------------------------------------------------------------------------------
/**
* Liefert den Wert eines Keys als StringArray, sofern die einzelnen Tokens duch Semikolon getrennt sind. z.b.
* a;b;c;def;gh
*
* @param key der gesuchte key.
*
* @return Stringarray mit den einzelnen Tokens*
*/
public String[] getStrings(final String key) {
final StringTokenizer tokenizer = new StringTokenizer(this.getString(key), ";"); // NOI18N
final String[] stringArray = new String[tokenizer.countTokens()];
int i = 0;
while (tokenizer.hasMoreTokens()) {
stringArray[i++] = tokenizer.nextToken();
}
return stringArray;
}
/**
* ---------------------------------------------------------------------------------------------------------------
*
* @param key DOCUMENT ME!
* @param delimiter DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String[] getStrings(final String key, final String delimiter) {
final StringTokenizer tokenizer = new StringTokenizer(this.getString(key), delimiter);
final String[] stringArray = new String[tokenizer.countTokens()];
int i = 0;
while (tokenizer.hasMoreTokens()) {
stringArray[i++] = tokenizer.nextToken();
}
return stringArray;
}
// ----------------------------------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------
/**
* Liefert den Wert eines Keys als Object.
*
* @param key DOCUMENT ME!
* @param c DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Object[] getObjectList(final String key, final Createable c) {
final java.lang.String[] args = getStrings(key);
final java.lang.Object[] objects = (Object[])Array.newInstance(c.getClass(), args.length);
for (int i = 0; i < args.length; i++) {
objects[i] = c.createObject(args[i], ","); // NOI18N
}
return objects;
}
/**
* DOCUMENT ME!
*
* @param key DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int[] getInts(final String key) {
final StringTokenizer tokenizer = new StringTokenizer(this.getString(key), ";"); // NOI18N
final int[] intArray = new int[tokenizer.countTokens()];
int i = 0;
while (tokenizer.hasMoreTokens()) {
intArray[i++] = new Integer(tokenizer.nextToken()).intValue();
}
return intArray;
}
/**
* DOCUMENT ME!
*
* @param key DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public int getInt(final String key) {
return new Integer(getString(key)).intValue();
}
} // end class