package org.jboss.system.server;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import org.jboss.util.MuBoolean;
import org.jboss.util.NestedRuntimeException;
import org.jboss.util.Null;
import org.jboss.util.platform.Java;
public class ServerConfigImpl
implements ServerConfig, ServerConfigImplMBean
{
private Properties props;
private File homeDir;
private URL homeURL;
private URL libraryURL;
private Object patchURL;
private String serverName;
private File serverBaseDir;
private File serverHomeDir;
private File serverTempDir;
private File serverDataDir;
private URL serverBaseURL;
private URL serverHomeURL;
private URL serverLibraryURL;
private URL serverConfigURL;
private MuBoolean exitOnShutdown;
private MuBoolean blockingShutdown;
private MuBoolean requireJBossURLStreamHandlerFactory;
private MuBoolean platformMBeanServer;
private String rootDeployableFilename;
public ServerConfigImpl(final Properties props) throws Exception
{
this.props = props;
homeDir = getFile(ServerConfig.HOME_DIR);
if (homeDir == null)
throw new Exception("Missing configuration value for: " + ServerConfig.HOME_DIR);
System.setProperty(ServerConfig.HOME_DIR, homeDir.toString());
getServerHomeDir();
}
public void initURLs()
throws MalformedURLException
{
homeURL = getURL(ServerConfig.HOME_URL);
if (homeURL == null)
homeURL = homeDir.toURL();
System.setProperty(ServerConfig.HOME_URL, homeURL.toString());
}
public File getHomeDir()
{
return homeDir;
}
public URL getHomeURL()
{
return homeURL;
}
public URL getLibraryURL()
{
if (libraryURL == null)
{
try
{
libraryURL = getURL(ServerConfig.LIBRARY_URL);
if (libraryURL == null)
{
libraryURL = new URL(homeURL, ServerConfig.LIBRARY_URL_SUFFIX);
}
System.setProperty(ServerConfig.LIBRARY_URL, libraryURL.toString());
}
catch (MalformedURLException e)
{
throw new NestedRuntimeException(e);
}
}
return libraryURL;
}
public URL getPatchURL()
{
if (patchURL == null)
{
try
{
patchURL = getURL(ServerConfig.PATCH_URL);
if (patchURL == null)
{
patchURL = Null.VALUE;
}
else
{
System.setProperty(ServerConfig.PATCH_URL, patchURL.toString());
}
}
catch (MalformedURLException e)
{
throw new NestedRuntimeException(e);
}
}
if (patchURL == Null.VALUE)
return null;
return (URL) patchURL;
}
public String getServerName()
{
if (serverName == null)
{
serverName = props.getProperty(ServerConfig.SERVER_NAME, ServerConfig.DEFAULT_SERVER_NAME);
System.setProperty(ServerConfig.SERVER_NAME, serverName);
}
return serverName;
}
public File getServerBaseDir()
{
if (serverBaseDir == null)
{
serverBaseDir = getFile(ServerConfig.SERVER_BASE_DIR);
if (serverBaseDir == null)
{
serverBaseDir = new File(homeDir, ServerConfig.SERVER_BASE_DIR_SUFFIX);
System.setProperty(ServerConfig.SERVER_BASE_DIR, serverBaseDir.toString());
}
}
return serverBaseDir;
}
public File getServerHomeDir()
{
if (serverHomeDir == null)
{
serverHomeDir = getFile(ServerConfig.SERVER_HOME_DIR);
if (serverHomeDir == null)
{
serverHomeDir = new File(getServerBaseDir(), getServerName());
System.setProperty(ServerConfig.SERVER_HOME_DIR, serverHomeDir.toString());
}
}
return serverHomeDir;
}
public File getServerTempDir()
{
if (serverTempDir == null)
{
serverTempDir = getFile(ServerConfig.SERVER_TEMP_DIR);
if (serverTempDir == null)
{
serverTempDir = new File(getServerHomeDir(), ServerConfig.SERVER_TEMP_DIR_SUFFIX);
System.setProperty(ServerConfig.SERVER_TEMP_DIR, serverTempDir.toString());
}
}
return serverTempDir;
}
public File getServerDataDir()
{
if (serverDataDir == null)
{
serverDataDir = getFile(ServerConfig.SERVER_DATA_DIR);
if (serverDataDir == null)
{
serverDataDir = new File(getServerHomeDir(), ServerConfig.SERVER_DATA_DIR_SUFFIX);
System.setProperty(ServerConfig.SERVER_DATA_DIR, serverDataDir.toString());
}
}
return serverDataDir;
}
public File getServerNativeDir()
{
String fileName = System.getProperty(NATIVE_DIR_PROPERTY);
if (fileName != null)
return new File(fileName);
return new File(getServerTempDir(), "native");
}
public File getServerTempDeployDir()
{
return new File(getServerTempDir(), "deploy");
}
public URL getServerBaseURL()
{
if (serverBaseURL == null)
{
try
{
serverBaseURL = getURL(ServerConfig.SERVER_BASE_URL);
if (serverBaseURL == null)
{
serverBaseURL = new URL(homeURL, ServerConfig.SERVER_BASE_URL_SUFFIX);
}
System.setProperty(ServerConfig.SERVER_BASE_URL, serverBaseURL.toString());
}
catch (MalformedURLException e)
{
throw new NestedRuntimeException(e);
}
}
return serverBaseURL;
}
public URL getServerHomeURL()
{
if (serverHomeURL == null)
{
try
{
serverHomeURL = getURL(ServerConfig.SERVER_HOME_URL);
if (serverHomeURL == null)
{
serverHomeURL = new URL(getServerBaseURL(), getServerName() + "/");
}
System.setProperty(ServerConfig.SERVER_HOME_URL, serverHomeURL.toString());
}
catch (MalformedURLException e)
{
throw new NestedRuntimeException(e);
}
}
return serverHomeURL;
}
public URL getServerLibraryURL()
{
if (serverLibraryURL == null)
{
try
{
serverLibraryURL = getURL(ServerConfig.SERVER_LIBRARY_URL);
if (serverLibraryURL == null)
{
serverLibraryURL = new URL(getServerHomeURL(), ServerConfig.LIBRARY_URL_SUFFIX);
}
System.setProperty(ServerConfig.SERVER_LIBRARY_URL, serverLibraryURL.toString());
}
catch (MalformedURLException e)
{
throw new NestedRuntimeException(e);
}
}
return serverLibraryURL;
}
public URL getServerConfigURL()
{
if (serverConfigURL == null)
{
try
{
serverConfigURL = getURL(ServerConfig.SERVER_CONFIG_URL);
if (serverConfigURL == null)
{
serverConfigURL = new URL(getServerHomeURL(), ServerConfig.SERVER_CONFIG_URL_SUFFIX);
}
System.setProperty(ServerConfig.SERVER_CONFIG_URL, serverConfigURL.toString());
}
catch (MalformedURLException e)
{
throw new NestedRuntimeException(e);
}
}
return serverConfigURL;
}
public boolean getPlatformMBeanServer()
{
if (platformMBeanServer == null)
{
if (Java.isCompatible(Java.VERSION_1_5))
{
String value = props.getProperty(ServerConfig.PLATFORM_MBEANSERVER,
(new Boolean(ServerConfig.DEFAULT_PLATFORM_MBEANSERVER)).toString());
value = "".equals(value) ? "true" : value;
platformMBeanServer = new MuBoolean(value);
}
else
{
platformMBeanServer = new MuBoolean(false);
}
}
return platformMBeanServer.get();
}
public void setExitOnShutdown(final boolean flag)
{
if (exitOnShutdown == null)
{
exitOnShutdown = new MuBoolean(flag);
}
else
{
exitOnShutdown.set(flag);
}
}
public boolean getExitOnShutdown()
{
if (exitOnShutdown == null)
{
String value = props.getProperty(ServerConfig.EXIT_ON_SHUTDOWN, null);
if (value == null)
{
exitOnShutdown = new MuBoolean(ServerConfig.DEFAULT_EXIT_ON_SHUTDOWN);
}
else
{
exitOnShutdown = new MuBoolean(value);
}
}
return exitOnShutdown.get();
}
public void setBlockingShutdown(final boolean flag)
{
if (blockingShutdown == null)
{
blockingShutdown = new MuBoolean(flag);
}
else
{
blockingShutdown.set(flag);
}
}
public boolean getBlockingShutdown()
{
if (blockingShutdown == null)
{
String value = props.getProperty(ServerConfig.BLOCKING_SHUTDOWN, null);
if (value == null)
{
blockingShutdown = new MuBoolean(ServerConfig.DEFAULT_BLOCKING_SHUTDOWN);
}
else
{
blockingShutdown = new MuBoolean(value);
}
}
return blockingShutdown.get();
}
public void setRequireJBossURLStreamHandlerFactory(final boolean flag)
{
if (requireJBossURLStreamHandlerFactory == null)
{
requireJBossURLStreamHandlerFactory = new MuBoolean(flag);
}
else
{
requireJBossURLStreamHandlerFactory.set(flag);
}
}
public boolean getRequireJBossURLStreamHandlerFactory()
{
if (requireJBossURLStreamHandlerFactory == null)
{
String value = props.getProperty(ServerConfig.REQUIRE_JBOSS_URL_STREAM_HANDLER_FACTORY, null);
if (value == null)
{
requireJBossURLStreamHandlerFactory = new MuBoolean(ServerConfig.DEFAULT_REQUIRE_JBOSS_URL_STREAM_HANDLER_FACTORY);
}
else
{
requireJBossURLStreamHandlerFactory = new MuBoolean(value);
}
}
return requireJBossURLStreamHandlerFactory.get();
}
public void setRootDeploymentFilename(final String filename)
{
this.rootDeployableFilename = filename;
}
public String getRootDeploymentFilename()
{
if (rootDeployableFilename == null)
{
rootDeployableFilename = props.getProperty(ServerConfig.ROOT_DEPLOYMENT_FILENAME,
ServerConfig.DEFAULT_ROOT_DEPLOYMENT_FILENAME);
}
return rootDeployableFilename;
}
private URL getURL(final String name) throws MalformedURLException
{
String value = props.getProperty(name, null);
if (value != null)
{
if (!value.endsWith("/")) value += "/";
return new URL(value);
}
return null;
}
private File getFile(final String name)
{
String value = props.getProperty(name, null);
if (value != null)
{
return new File(value);
}
return null;
}
}