blob: a7b1519f1c885daa042894f68118b3c6776c823c [file] [log] [blame]
/*
* This file is part of the QuickServer library
* Copyright (C) QuickServer.org
*
* Use, modification, copying and distribution of this software is subject to
* the terms and conditions of the GNU Lesser General Public License.
* You should have received a copy of the GNU LGP License along with this
* library; if not, you can download a copy from <http://www.quickserver.org/>.
*
* For questions, suggestions, bug-reports, enhancement-requests etc.
* visit http://www.quickserver.org
*
*/
package org.quickserver.util.xmlreader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.digester3.Digester;
import org.quickserver.net.server.QuickServer;
import org.quickserver.swing.SensitiveInput;
import org.quickserver.util.io.PasswordField;
/**
* This class reads the xml configuration and gives
* QuickServerConfig object.
* @author Akshathkumar Shetty
* @since 1.3
*/
public class ConfigReader {
private static Logger logger = Logger.getLogger(ConfigReader.class.getName());
/**
* Parses XML config of QuickServer of version 1.3 and above
* @since 1.3
*/
public static QuickServerConfig read(String fileName) throws Exception {
File configFile = new File(fileName);
FileInputStream fis = null;
try {
fis = new FileInputStream(configFile);
logger.log(Level.FINE, "Loading config from xml file : {0}", configFile.getAbsolutePath());
return read(fis, configFile.getAbsolutePath());
} finally {
if(fis!=null) {
fis.close();
}
}
}
/**
* Parses XML config of QuickServer of version 1.3 and above
* @since 1.4
*/
public static QuickServerConfig read(InputStream input,String config_file_location)
throws Exception {
Digester digester = new Digester();
digester.setValidating(false);
//digester.setNamespaceAware(true);
//String xsd = "" + new File("quickserver_config.xsd").toURI();
//digester.setSchema(xsd);
String mainTag = "quickserver";
String subTag = "";
digester.addObjectCreate(mainTag, QuickServerConfig.class);
digester.addBeanPropertySetter(mainTag+"/name", "name");
digester.addBeanPropertySetter(mainTag+"/server-banner", "serverBanner");
digester.addBeanPropertySetter(mainTag+"/port", "port");
digester.addBeanPropertySetter(mainTag+"/bind-address", "bindAddr");
//<server-mode>
String curTag = mainTag+"/server-mode";
digester.addObjectCreate(curTag, ServerMode.class);
digester.addBeanPropertySetter(curTag+"/blocking", "blocking");
digester.addSetNext(curTag,"setServerMode");
//</server-mode>
digester.addBeanPropertySetter(mainTag+"/client-event-handler", "clientEventHandler");//v1.4.6
digester.addBeanPropertySetter(mainTag+"/client-command-handler", "clientCommandHandler");
digester.addBeanPropertySetter(mainTag+"/client-object-handler", "clientObjectHandler");
digester.addBeanPropertySetter(mainTag+"/client-binary-handler", "clientBinaryHandler");//v1.4
digester.addBeanPropertySetter(mainTag+"/client-write-handler", "clientWriteHandler");//v1.4.5
digester.addBeanPropertySetter(mainTag+"/authenticator", "authenticator"); //v1.3
digester.addBeanPropertySetter(mainTag+"/client-authentication-handler", "clientAuthenticationHandler"); //v1.4.6
digester.addBeanPropertySetter(mainTag+"/client-data", "clientData");
digester.addBeanPropertySetter(mainTag+"/client-extended-event-handler", "clientExtendedEventHandler");//v1.4.6
digester.addBeanPropertySetter(mainTag+"/timeout", "timeout");
digester.addBeanPropertySetter(mainTag+"/timeout-msg", "timeoutMsg");
digester.addBeanPropertySetter(mainTag+"/max-auth-try", "maxAuthTry");
digester.addBeanPropertySetter(mainTag+"/max-auth-try-msg", "maxAuthTryMsg");
digester.addBeanPropertySetter(mainTag+"/max-connection", "maxConnection");
digester.addBeanPropertySetter(mainTag+"/max-connection-msg", "maxConnectionMsg");
digester.addBeanPropertySetter(mainTag+"/console-logging-level", "consoleLoggingLevel");
digester.addBeanPropertySetter(mainTag+"/console-logging-formatter", "consoleLoggingFormatter");
//<default-data-mode>
curTag = mainTag+"/default-data-mode";
digester.addObjectCreate(curTag, DefaultDataMode.class);
digester.addBeanPropertySetter(curTag+"/data-type-in", "dataModeIn");
digester.addBeanPropertySetter(curTag+"/data-type-out", "dataModeOut");
digester.addSetNext(curTag,"setDefaultDataMode");
//</default-data-mode>
//<object-pool>
curTag = mainTag+"/object-pool";
digester.addObjectCreate(curTag, ObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/init-size", "initSize");
digester.addBeanPropertySetter(curTag+"/pool-manager", "poolManager");
//<thread-object-pool>
digester.addObjectCreate(curTag+"/thread-object-pool", ThreadObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/thread-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/thread-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/thread-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/thread-object-pool","setThreadObjectPoolConfig");
//</thread-object-pool>
//<client-handler-object-pool>
digester.addObjectCreate(curTag+"/client-handler-object-pool", ClientHandlerObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/client-handler-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/client-handler-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/client-handler-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/client-handler-object-pool","setClientHandlerObjectPoolConfig");
//</client-handler-object-pool>
//<byte-buffer-object-pool>
digester.addObjectCreate(curTag+"/byte-buffer-object-pool", ByteBufferObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/byte-buffer-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/byte-buffer-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/byte-buffer-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/byte-buffer-object-pool","setByteBufferObjectPoolConfig");
//</byte-buffer-object-pool>
//<client-data-object-pool>
digester.addObjectCreate(curTag+"/client-data-object-pool", ClientDataObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/client-data-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/client-data-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/client-data-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/client-data-object-pool","setClientDataObjectPoolConfig");
//</client-data-object-pool>
digester.addSetNext(curTag,"setObjectPoolConfig");
//</object-pool>
//<communication-logging>
digester.addBeanPropertySetter(mainTag+"/communication-logging/enable", "communicationLogging");
//</communication-logging>
digester.addBeanPropertySetter(mainTag+"/security-manager-class", "securityManagerClass");
//<access-constraint>
digester.addObjectCreate(mainTag+"/access-constraint", AccessConstraintConfig.class);
//<ip-filter>
digester.addObjectCreate(mainTag+"/access-constraint/ip-filter", IpFilterConfig.class);
digester.addBeanPropertySetter(mainTag+"/access-constraint/ip-filter/enable", "enable");
digester.addBeanPropertySetter(mainTag+"/access-constraint/ip-filter/allow-access", "allowAccess");
//<ip-collection>
digester.addCallMethod(mainTag+"/access-constraint/ip-filter/ip-collection/client-ip-address", "addClientIpAddress", 0);
//<ip-collection>
digester.addSetNext(mainTag+"/access-constraint/ip-filter", "setIpFilterConfig");
//<ip-filter>
digester.addSetNext(mainTag+"/access-constraint", "setAccessConstraintConfig");
//</access-constraint>
//<application-jar-path>
digester.addBeanPropertySetter(mainTag+"/application-jar-path", "applicationJarPath");
//<server-hooks>
digester.addObjectCreate(mainTag+"/server-hooks", ServerHooks.class);
digester.addCallMethod(mainTag+"/server-hooks/class-name", "addClassName", 0);
digester.addSetNext(mainTag+"/server-hooks", "setServerHooks");
//</server-hooks>
//<secure>
curTag = mainTag+"/secure";
digester.addObjectCreate(curTag, Secure.class);
digester.addBeanPropertySetter(curTag+"/enable", "enable");
digester.addBeanPropertySetter(curTag+"/load", "load");
digester.addBeanPropertySetter(curTag+"/port", "port");
digester.addBeanPropertySetter(curTag+"/protocol", "protocol");
digester.addBeanPropertySetter(curTag+"/client-auth-enable", "clientAuthEnable");
//<secure-store>
digester.addObjectCreate(curTag+"/secure-store", SecureStore.class);
digester.addBeanPropertySetter(curTag+"/secure-store/type", "type");
digester.addBeanPropertySetter(curTag+"/secure-store/algorithm", "algorithm");
digester.addBeanPropertySetter(curTag+"/secure-store/provider", "provider");
//<key-store-info>
digester.addObjectCreate(curTag+"/secure-store/key-store-info", KeyStoreInfo.class);
digester.addBeanPropertySetter(curTag+"/secure-store/key-store-info/store-file", "storeFile");
digester.addBeanPropertySetter(curTag+"/secure-store/key-store-info/store-password", "storePassword");
digester.addBeanPropertySetter(curTag+"/secure-store/key-store-info/key-password", "keyPassword");
digester.addSetNext(curTag+"/secure-store/key-store-info","setKeyStoreInfo");
//</key-store-info>
//<trust-store-info>
digester.addObjectCreate(curTag+"/secure-store/trust-store-info", TrustStoreInfo.class);
digester.addBeanPropertySetter(curTag+"/secure-store/trust-store-info/store-file", "storeFile");
digester.addBeanPropertySetter(curTag+"/secure-store/trust-store-info/store-password", "storePassword");
digester.addBeanPropertySetter(curTag+"/secure-store/trust-store-info/type", "type");
digester.addBeanPropertySetter(curTag+"/secure-store/trust-store-info/provider", "provider");
digester.addSetNext(curTag+"/secure-store/trust-store-info","setTrustStoreInfo");
//</trust-store-info>
digester.addBeanPropertySetter(curTag+"/secure-store/secure-store-manager", "secureStoreManager");
digester.addSetNext(curTag+"/secure-store","setSecureStore");
//</secure-store>
digester.addSetNext(curTag,"setSecure");
//</secure>
//<advanced-settings>
curTag = mainTag+"/advanced-settings";
digester.addObjectCreate(curTag, AdvancedSettings.class);
digester.addBeanPropertySetter(curTag+"/charset", "charset");
digester.addBeanPropertySetter(curTag+"/byte-buffer-size", "byteBufferSize");
digester.addBeanPropertySetter(curTag+"/backlog", "backlog");
digester.addBeanPropertySetter(curTag+"/use-direct-byte-buffer", "useDirectByteBuffer");
digester.addBeanPropertySetter(curTag+"/socket-linger", "socketLinger");
digester.addBeanPropertySetter(curTag+"/debug-non-blocking-mode", "debugNonBlockingMode");
digester.addBeanPropertySetter(curTag+"/client-identifier", "clientIdentifier");
digester.addBeanPropertySetter(curTag+"/qsobject-pool-maker", "qsObjectPoolMaker");
digester.addBeanPropertySetter(curTag+"/max-threads-for-nio-write", "maxThreadsForNioWrite");
digester.addBeanPropertySetter(curTag+"/performance-preferences-connection-time", "performancePreferencesConnectionTime");
digester.addBeanPropertySetter(curTag+"/performance-preferences-latency", "performancePreferencesLatency");
digester.addBeanPropertySetter(curTag+"/performance-preferences-bandwidth", "performancePreferencesBandwidth");
digester.addBeanPropertySetter(curTag+"/client-socket-tcp-no-delay", "clientSocketTcpNoDelay");
digester.addBeanPropertySetter(curTag+"/client-socket-traffic-class", "clientSocketTrafficClass");
digester.addBeanPropertySetter(curTag+"/client-socket-receive-buffer-size", "clientSocketReceiveBufferSize");
digester.addBeanPropertySetter(curTag+"/client-socket-send-buffer-size", "clientSocketSendBufferSize");
digester.addSetNext(curTag,"setAdvancedSettings");
//</advanced-settings>
//<qsadmin-server>
subTag = "qsadmin-server";
curTag = mainTag+"/"+subTag;
digester.addObjectCreate(curTag, QSAdminServerConfig.class);
digester.addBeanPropertySetter(curTag+"/name", "name");
digester.addBeanPropertySetter(curTag+"/server-banner", "serverBanner");
digester.addBeanPropertySetter(curTag+"/port", "port");
//<server-mode>
digester.addObjectCreate(curTag+"/server-mode", ServerMode.class);
digester.addBeanPropertySetter(curTag+"/server-mode/blocking", "blocking");
digester.addSetNext(curTag+"/server-mode","setServerMode");
//</server-mode>
digester.addBeanPropertySetter(curTag+"/client-event-handler", "clientEventHandler");
digester.addBeanPropertySetter(curTag+"/client-command-handler", "clientCommandHandler");
digester.addBeanPropertySetter(curTag+"/client-object-handler", "clientObjectHandler");
digester.addBeanPropertySetter(curTag+"/client-binary-handler", "clientBinaryHandler");//v1.4
digester.addBeanPropertySetter(curTag+"/client-write-handler", "clientWriteHandler");//v1.4.5
digester.addBeanPropertySetter(curTag+"/authenticator", "authenticator"); //v1.3
digester.addBeanPropertySetter(curTag+"/client-authentication-handler", "clientAuthenticationHandler"); //v1.4.6
digester.addBeanPropertySetter(curTag+"/client-data", "clientData");
digester.addBeanPropertySetter(curTag+"/client-extended-event-handler", "clientExtendedEventHandler");//v1.4.6
digester.addBeanPropertySetter(curTag+"/timeout", "timeout");
digester.addBeanPropertySetter(curTag+"/max-auth-try", "maxAuthTry");
digester.addBeanPropertySetter(curTag+"/max-auth-try-msg", "maxAuthTryMsg");
digester.addBeanPropertySetter(curTag+"/timeout-msg", "timeoutMsg");
digester.addBeanPropertySetter(curTag+"/max-connection", "maxConnection");
digester.addBeanPropertySetter(curTag+"/max-connection-msg", "maxConnectionMsg");
digester.addBeanPropertySetter(curTag+"/bind-address", "bindAddr");
digester.addBeanPropertySetter(curTag+"/client-object-handler", "clientObjectHandler");
digester.addBeanPropertySetter(curTag+"/console-logging-level", "consoleLoggingLevel");
digester.addBeanPropertySetter(curTag+"/console-logging-formatter", "consoleLoggingFormatter");
//<default-data-mode>
digester.addObjectCreate(curTag+"/default-data-mode", DefaultDataMode.class);
digester.addBeanPropertySetter(curTag+"/default-data-mode/data-type-in", "dataModeIn");
digester.addBeanPropertySetter(curTag+"/default-data-mode/data-type-out", "dataModeOut");
digester.addSetNext(curTag+"/default-data-mode","setDefaultDataMode");
//</default-data-mode>
//<object-pool>
digester.addObjectCreate(curTag+"/object-pool", ObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/object-pool/init-size", "initSize");
digester.addBeanPropertySetter(curTag+"/object-pool/pool-manager", "poolManager");
//<thread-object-pool>
digester.addObjectCreate(curTag+"/object-pool/thread-object-pool", ThreadObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/object-pool/thread-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/object-pool/thread-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/object-pool/thread-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/object-pool/thread-object-pool","setThreadObjectPoolConfig");
//</thread-object-pool>
//<client-handler-object-pool>
digester.addObjectCreate(curTag+"/object-pool/client-handler-object-pool", ClientHandlerObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/object-pool/client-handler-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/object-pool/client-handler-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/object-pool/client-handler-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/object-pool/client-handler-object-pool","setClientHandlerObjectPoolConfig");
//</client-handler-object-pool>
//<byte-buffer-object-pool>
digester.addObjectCreate(curTag+"/object-pool/byte-buffer-object-pool", ByteBufferObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/object-pool/byte-buffer-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/object-pool/byte-buffer-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/object-pool/byte-buffer-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/object-pool/byte-buffer-object-pool","setByteBufferObjectPoolConfig");
//</byte-buffer-object-pool>
//<client-data-object-pool>
digester.addObjectCreate(curTag+"/object-pool/client-data-object-pool", ClientDataObjectPoolConfig.class);
digester.addBeanPropertySetter(curTag+"/object-pool/client-data-object-pool/max-active", "maxActive");
digester.addBeanPropertySetter(curTag+"/object-pool/client-data-object-pool/max-idle", "maxIdle");
digester.addBeanPropertySetter(curTag+"/object-pool/client-data-object-pool/init-size", "initSize");
digester.addSetNext(curTag+"/object-pool/client-data-object-pool","setClientDataObjectPoolConfig");
//</client-data-object-pool>
digester.addSetNext(curTag+"/object-pool", "setObjectPoolConfig");
//</object-pool>
//<command-shell>
digester.addBeanPropertySetter(curTag+"/command-shell/enable", "commandShellEnable");
digester.addBeanPropertySetter(curTag+"/command-shell/prompt-name", "commandShellPromptName");
//</command-shell>
//<communication-logging><enable>
digester.addBeanPropertySetter(curTag+"/communication-logging/enable", "communicationLogging");
//<access-constraint>
digester.addObjectCreate(curTag+"/access-constraint", AccessConstraintConfig.class);
//<ip-filter>
digester.addObjectCreate(curTag+"/access-constraint/ip-filter", IpFilterConfig.class);
digester.addBeanPropertySetter(curTag+"/access-constraint/ip-filter/enable", "enable");
digester.addBeanPropertySetter(curTag+"/access-constraint/ip-filter/allow-access", "allowAccess");
//<ip-collection>
digester.addCallMethod(curTag+"/access-constraint/ip-filter/ip-collection/client-ip-address", "addClientIpAddress", 0);
//<ip-collection>
digester.addSetNext(curTag+"/access-constraint/ip-filter", "setIpFilterConfig");
//<ip-filter>
digester.addSetNext(curTag+"/access-constraint", "setAccessConstraintConfig");
//</access-constraint>
//<server-hooks>
digester.addObjectCreate(curTag+"/server-hooks", ServerHooks.class);
digester.addCallMethod(curTag+"/server-hooks/class-name", "addClassName", 0);
digester.addSetNext(curTag+"/server-hooks", "setServerHooks");
//</server-hooks>
//<secure>
digester.addObjectCreate(curTag+"/secure", Secure.class);
digester.addBeanPropertySetter(curTag+"/secure/enable", "enable");
digester.addBeanPropertySetter(curTag+"/secure/load", "load");
digester.addBeanPropertySetter(curTag+"/secure/port", "port");
digester.addBeanPropertySetter(curTag+"/secure/protocol", "protocol");
digester.addBeanPropertySetter(curTag+"/secure/client-auth-enable", "clientAuthEnable");
//<secure-store>
digester.addObjectCreate(curTag+"/secure/secure-store", SecureStore.class);
digester.addBeanPropertySetter(curTag+"/secure/secure-store/type", "type");
digester.addBeanPropertySetter(curTag+"/secure/secure-store/algorithm", "algorithm");
digester.addBeanPropertySetter(curTag+"/secure/secure-store/provider", "provider");
//<key-store-info>
digester.addObjectCreate(curTag+"/secure/secure-store/key-store-info", KeyStoreInfo.class);
digester.addBeanPropertySetter(curTag+"/secure/secure-store/key-store-info/store-file", "storeFile");
digester.addBeanPropertySetter(curTag+"/secure/secure-store/key-store-info/store-password", "storePassword");
digester.addBeanPropertySetter(curTag+"/secure/secure-store/key-store-info/key-password", "keyPassword");
digester.addSetNext(curTag+"/secure/secure-store/key-store-info","setKeyStoreInfo");
//</key-store-info>
//<trust-store-info>
digester.addObjectCreate(curTag+"/secure/secure-store/trust-store-info", TrustStoreInfo.class);
digester.addBeanPropertySetter(curTag+"/secure/secure-store/trust-store-info/store-file", "storeFile");
digester.addBeanPropertySetter(curTag+"/secure/secure-store/trust-store-info/store-password", "storePassword");
digester.addBeanPropertySetter(curTag+"/secure/secure-store/trust-store-info/type", "type");
digester.addBeanPropertySetter(curTag+"/secure/secure-store/trust-store-info/provider", "provider");
digester.addSetNext(curTag+"/secure/secure-store/trust-store-info","setTrustStoreInfo");
//</trust-store-info>
digester.addBeanPropertySetter(curTag+"/secure/secure-store/secure-store-manager", "secureStoreManager");
digester.addSetNext(curTag+"/secure/secure-store","setSecureStore");
//</secure-store>
digester.addSetNext(curTag+"/secure","setSecure");
//</secure>
digester.addBeanPropertySetter(curTag+"/command-plugin", "commandPlugin");
//<advanced-settings>
digester.addObjectCreate(curTag+"/advanced-settings", AdvancedSettings.class);
digester.addBeanPropertySetter(curTag+"/advanced-settings/charset", "charset");
digester.addBeanPropertySetter(curTag+"/advanced-settings/byte-buffer-size", "byteBufferSize");
digester.addBeanPropertySetter(curTag+"/advanced-settings/backlog", "backlog");
digester.addBeanPropertySetter(curTag+"/advanced-settings/use-direct-byte-buffer", "useDirectByteBuffer");
digester.addBeanPropertySetter(curTag+"/advanced-settings/socket-linger", "socketLinger");
digester.addBeanPropertySetter(curTag+"/advanced-settings/debug-non-blocking-mode", "debugNonBlockingMode");
digester.addBeanPropertySetter(curTag+"/advanced-settings/client-identifier", "clientIdentifier");
digester.addBeanPropertySetter(curTag+"/advanced-settings/qsobject-pool-maker", "qsObjectPoolMaker");
digester.addBeanPropertySetter(curTag+"/advanced-settings/max-threads-for-nio-write", "maxThreadsForNioWrite");
digester.addSetNext(curTag+"/advanced-settings","setAdvancedSettings");
//</advanced-settings>
digester.addSetNext(curTag, "setQSAdminServerConfig");
//</qsadmin-server>
//<db-object-pool>
subTag = "db-object-pool";
digester.addObjectCreate(mainTag+"/"+subTag, DBObjectPoolConfig.class);
//<database-connection-set>
digester.addObjectCreate(mainTag+"/"+subTag+"/database-connection-set", DatabaseConnectionSet.class);
//<database-connection>
curTag = mainTag+"/"+subTag+"/database-connection-set/database-connection";
digester.addObjectCreate(curTag, DatabaseConnectionConfig.class);
digester.addBeanPropertySetter(curTag+"/id", "id");
digester.addBeanPropertySetter(curTag+"/driver", "driver");
digester.addBeanPropertySetter(curTag+"/url", "url");
digester.addBeanPropertySetter(curTag+"/username", "username");
digester.addBeanPropertySetter(curTag+"/password", "password");
digester.addSetNext(curTag, "addDatabaseConnection");
//</database-connection>
digester.addSetNext(mainTag+"/"+subTag+"/database-connection-set", "setDatabaseConnectionSet");
//</database-connection-set>
//<db-pool-util>
curTag = mainTag+"/"+subTag+"/db-pool-util";
digester.addBeanPropertySetter(curTag, "dbPoolUtil");
//</db-pool-util>
digester.addSetNext(mainTag+"/"+subTag, "setDBObjectPoolConfig");
//</db-object-pool>
//<application-configuration>
subTag = "application-configuration";
digester.addObjectCreate(mainTag+"/"+subTag, ApplicationConfiguration.class);
digester.addBeanPropertySetter(mainTag+"/"+subTag+"/prompt-type", "promptType");
curTag = mainTag+"/"+subTag+"/"+"property";
digester.addObjectCreate(curTag, Property.class);
digester.addBeanPropertySetter(curTag+"/property-name", "name");
digester.addBeanPropertySetter(curTag+"/property-value", "value");
digester.addSetNext(curTag, "addProperty");
digester.addSetNext(mainTag+"/"+subTag, "setApplicationConfiguration");
//</application-configuration>
//<init-server-hooks>
subTag = "init-server-hooks";
digester.addObjectCreate(mainTag+"/"+subTag, InitServerHooks.class);
digester.addCallMethod(mainTag+"/"+subTag+"/class-name",
"addClassName", 0);
digester.addSetNext(mainTag+"/"+subTag, "setInitServerHooks");
//</init-server-hooks>
QuickServerConfig qsc = (QuickServerConfig) digester.parse(input);
qsc.setConfigFile(config_file_location);
loadMissingApplicationConfiguration(qsc);
QuickServer.setDebugNonBlockingMode(qsc.getAdvancedSettings().getDebugNonBlockingMode());
return qsc;
}
private static void loadMissingApplicationConfiguration(QuickServerConfig qsc)
throws IOException {
ApplicationConfiguration ac = qsc.getApplicationConfiguration();
if(ac==null) return;
//check if any application-configuration had missing property-value
Set propertyNames = ac.keySet();
Iterator iterator = propertyNames.iterator();
String key = null;
Object value = null;
char sv[] = null;
SensitiveInput sensitiveInput = null;
boolean guiPrompt = ac.getPromptType().equals("console")==false?true:false;
while(iterator.hasNext()) {
key = (String) iterator.next();
value = ac.get(key);
if(value==null) {
if(guiPrompt && sensitiveInput==null) {
sensitiveInput = new SensitiveInput(
qsc.getName()+" - Input Prompt");
}
if(guiPrompt)
sv = sensitiveInput.getInput(key);
else
sv = PasswordField.getPassword("Input property value for "+key+" : ");
if(sv!=null) {
value = new String(sv);
ac.put(key, value);
}
value = null;
}
}
}
/**
* Make the file passed absolute, relative to the location of
* configuration file that loaded QuickServerConfig object passed.
* @since 1.4
*/
public static File makeAbsoluteToConfig(String fileName,
QuickServerConfig config) {
File file = new File(fileName);
if(config==null) return file;
if(file.isAbsolute()==false) {
String temp = config.getConfigFile();
if(temp==null) return file;
file = new File(temp);
temp = file.getParent() + File.separatorChar + fileName;
file = new File(temp);
}
return file;
}
}