package net.jsunit;
import com.opensymphony.xwork.config.ConfigurationProvider;
import net.jsunit.configuration.*;
import net.jsunit.model.PlatformType;
import net.jsunit.model.RemoteServerConfigurationSource;
import java.util.ArrayList;
import java.util.List;
public class JsUnitAggregateServer
extends AbstractJsUnitServer
implements RemoteServerConfigurationSource, RemoteConfigurationCache {
private static JsUnitAggregateServer instance;
private RemoteServerHitter hitter;
private List<RemoteConfiguration> cachedRemoteConfigurations = new ArrayList<RemoteConfiguration>();
private RemoteConfigurationCacheUpdater remoteConfigurationCacheUpdater;
public JsUnitAggregateServer(AggregateConfiguration configuration) {
this(configuration, new RemoteMachineServerHitter());
}
public JsUnitAggregateServer(AggregateConfiguration configuration, RemoteServerHitter hitter) {
super(configuration);
setHitter(hitter);
registerInstance(this);
remoteConfigurationCacheUpdater = new RemoteConfigurationCacheUpdater(this, configuration.getRemoteMachineURLs(), hitter);
}
public void setHitter(RemoteServerHitter hitter) {
this.hitter = hitter;
}
public RemoteServerHitter getHitter() {
return hitter;
}
public static void main(String args[]) {
try {
ConfigurationSource source = CompositeConfigurationSource.forArguments(args);
JsUnitAggregateServer server = new JsUnitAggregateServer(new AggregateConfiguration(source));
server.start();
} catch (Throwable t) {
t.printStackTrace();
}
}
public String toString() {
return "JsUnit Aggregate Server";
}
public ServerType serverType() {
return ServerType.AGGREGATE;
}
protected void preStart() {
super.preStart();
remoteConfigurationCacheUpdater.fetch();
}
protected void postStart() {
super.postStart();
remoteConfigurationCacheUpdater.start();
}
public List<RemoteConfiguration> getCachedRemoteConfigurations() {
return cachedRemoteConfigurations;
}
public RemoteConfiguration getRemoteMachineConfigurationById(int id) {
return cachedRemoteConfigurations.get(id);
}
public List<RemoteConfiguration> getAllRemoteMachineConfigurations() {
return cachedRemoteConfigurations;
}
public synchronized void setCachedRemoteConfigurations(List<RemoteConfiguration> cachedRemoteConfigurations) {
this.cachedRemoteConfigurations = cachedRemoteConfigurations;
}
protected ConfigurationProvider createConfigurationProvider() {
return new JsUnitAggregateServerConfigurationProvider();
}
protected String resourceBase() {
return ".";
}
public PlatformType getPlatformType() {
return PlatformType.resolve();
}
protected List<String> servletNames() {
List<String> result = new ArrayList<String>();
result.add("config");
result.add("runner");
return result;
}
public void dispose() {
super.dispose();
remoteConfigurationCacheUpdater.stopFetching();
}
public static void registerInstance(JsUnitAggregateServer instance) {
JsUnitAggregateServer.instance = instance;
}
public static JsUnitAggregateServer instance() {
return instance;
}
}