/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* wesendon
******************************************************************************/
package org.eclipse.emf.emfstore.internal.server.connection.xmlrpc;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPoint;
import org.eclipse.emf.emfstore.common.extensionpoint.ESExtensionPointException;
import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
import org.eclipse.emf.emfstore.internal.server.Messages;
import org.eclipse.emf.emfstore.internal.server.ServerConfiguration;
import org.eclipse.emf.emfstore.server.ESLocationProvider;
import org.eclipse.emf.emfstore.server.ESXmlRpcWebServerProvider;
/**
* Manages the webserver for XML RPC connections.
*
* @author wesendon
*/
public final class XmlRpcWebserverManager {
private static final String WEBSERVER_PROVIDER_KEY = "org.eclipse.emf.emfstore.server.webServerProvider"; //$NON-NLS-1$
/**
* The web server provider.
*/
public static ESXmlRpcWebServerProvider webServerProvider = null;
/**
* Returns an instance of the webserver manager.
*
* @return instance of websever manager.
*/
public static ESXmlRpcWebServerProvider getInstance() {
final ESXmlRpcWebServerProvider provider = getWebServerProvider();
return provider;
}
private XmlRpcWebserverManager() {
}
/**
* Returns the registered {@link ESLocationProvider} or if not existent, the
* {@link org.eclipse.emf.emfstore.internal.server.DefaultServerWorkspaceLocationProvider}.
*
* @return workspace location provider
*/
public static synchronized ESXmlRpcWebServerProvider getWebServerProvider() {
if (webServerProvider == null) {
int port = 8080;
try {
port = Integer.valueOf(ServerConfiguration.getProperties()
.getProperty(ServerConfiguration.XML_RPC_PORT));
} catch (final NumberFormatException e) {
port = Integer.valueOf(ServerConfiguration.XML_RPC_PORT_DEFAULT);
}
try {
final IExtensionRegistry reg = Platform.getExtensionRegistry();
final IConfigurationElement[] elements = reg.getConfigurationElementsFor(WEBSERVER_PROVIDER_KEY);
if (new ESExtensionPoint(WEBSERVER_PROVIDER_KEY, true).size() > 0) {
webServerProvider = new ESExtensionPoint(WEBSERVER_PROVIDER_KEY, true).getClass(
"providerClass", ESXmlRpcWebServerProvider.class); //$NON-NLS-1$
} else {
webServerProvider = new XmlRpcBuiltinWebServer();
}
} catch (final ESExtensionPointException e) {
final String message = Messages.ServerConfiguration_No_WebServer_Provider;
ModelUtil.logException(message, e);
return null;
}
webServerProvider.setPort(port);
ModelUtil.logInfo("Using WebServerProvider " + webServerProvider.getClass() + " at port "
+ webServerProvider.getPort());
}
return webServerProvider;
}
}