Updated whole environment

This commit is contained in:
Clisprail
2013-04-06 21:02:29 +02:00
parent d5409d4138
commit e682387dfd
11 changed files with 244 additions and 62 deletions
@@ -1,10 +1,12 @@
package org.parabot.environment;
import java.lang.reflect.Constructor;
import java.net.URL;
import org.parabot.core.Context;
import org.parabot.core.Core;
import org.parabot.core.classpath.ClassPath;
import org.parabot.core.desc.ServerDescription;
import org.parabot.core.parsers.ServerManifestParser;
import org.parabot.core.parsers.ServerManifestParser.ServerCache;
import org.parabot.core.ui.BotUI;
import org.parabot.core.ui.ServerSelector;
import org.parabot.core.ui.components.BotToolbar;
@@ -22,38 +24,53 @@ public class Environment {
* Loads a new environment
* @param url
*/
public static void load(final URL url, final String serverName) {
public static void load(final ServerDescription desc, final String serverName) {
ServerSelector.getInstance().dispose();
if(!BotUI.getInstance().isVisible()) {
BotUI.getInstance().setVisible(true);
}
final ClassPath classPath = new ClassPath();
classPath.addJar(url.toString());
final ServerLoader serverLoader = new ServerLoader(classPath);
final String[] serverProviders = serverLoader.getServerClassNames();
if (serverProviders == null) {
throw new RuntimeException("No server provided.");
final ClassPath classPath = Core.isDevMode() ? null : new ClassPath();
final ServerCache cache = Core.isDevMode() ? ServerManifestParser.cache.get(desc) : null;
final ServerLoader serverLoader = Core.isDevMode() ? cache.getLoader() : new ServerLoader(classPath);
String[] serverProviders = null;
if(!Core.isDevMode()) {
serverProviders = serverLoader.getServerClassNames();
if (serverProviders == null) {
throw new RuntimeException("No server provided.");
}
}
final String id = "tab" + Context.getID();
final ThreadGroup bot = new ThreadGroup(id);
new Thread(bot, new Runnable() {
@Override
public void run() {
try {
final Class<?> serverProviderClass = serverLoader.loadClass(serverProviders[0]);
final Constructor<?> con = serverProviderClass.getConstructor();
ServerProvider server = (ServerProvider) con.newInstance();
server.context.setEnvironment(serverLoader);
BotToolbar.getInstance().addTab(server.context, serverName);
server.context.load();
final ServerProvider server = !Core.isDevMode() ? fetchServerProvider(serverLoader) : cache.getProviders()[desc.providerIndex];
final Context context = new Context(server);
context.setEnvironment(serverLoader);
BotToolbar.getInstance().addTab(context, serverName);
context.load();
} catch (Throwable t) {
throw new RuntimeException("Error while loading server. " + t.getMessage());
t.printStackTrace();
}
}
}).start();
}
private static ServerProvider fetchServerProvider(ServerLoader loader) {
try {
final String[] serverProviders = loader.getServerClassNames();
if (serverProviders == null) {
throw new RuntimeException("No server provided.");
}
final Class<?> serverProviderClass = loader.loadClass(serverProviders[0]);
final Constructor<?> con = serverProviderClass.getConstructor();
return (ServerProvider) con.newInstance();
} catch (Throwable t) {
throw new RuntimeException("Error while loading server. " + t.getMessage());
}
}
}
@@ -13,7 +13,6 @@ import org.parabot.core.Context;
*
*/
public abstract class ServerProvider {
public Context context = new Context(this);
/**
* Hooks to parse
@@ -47,7 +46,7 @@ public abstract class ServerProvider {
}
public void parseJar() {
context.getClassPath().addJar(getJar());
Context.resolve().getClassPath().addJar(getJar());
}
}