package be.xhibit.teletask.webapp;
import be.xhibit.teletask.client.TeletaskClient;
import be.xhibit.teletask.config.model.json.TDSClientConfig;
import be.xhibit.teletask.model.spec.ClientConfigSpec;
import be.xhibit.teletask.parser.FullNbtModelConsumerImpl;
import be.xhibit.teletask.parser.PrintedFileVisitor;
import com.google.common.base.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileInputStream;
import java.io.IOException;
public final class ClientHolder {
/**
* Logger responsible for logging and debugging statements.
*/
private static final Logger LOG = LoggerFactory.getLogger(ClientHolder.class);
private static TeletaskClient client;
private ClientHolder() {
}
public static void setClient(TeletaskClient client) {
ClientHolder.client = client;
}
public static TeletaskClient getClient() {
if (client == null) {
setClient(TeletaskClient.getInstance(getClientConfig()));
}
return client;
}
protected static ClientConfigSpec getClientConfig() {
ClientConfigSpec clientConfig = null;
String configFile = System.getProperty("configFile");
Preconditions.checkArgument(configFile != null, "Please specify -DconfigFile as a startup parameter");
LOG.debug("Using config file {}", configFile);
try (FileInputStream jsonData = new FileInputStream(configFile)) {
LOG.debug("Trying to load the configFile as json...");
clientConfig = TDSClientConfig.read(jsonData);
} catch (Exception e) {
LOG.debug("Trying to load the configFile as nbt printed text...");
try (FileInputStream inputStream = new FileInputStream(configFile)) {
FullNbtModelConsumerImpl consumer = new FullNbtModelConsumerImpl();
PrintedFileVisitor.getInstance().visit(consumer, inputStream);
clientConfig = consumer.getCentralUnit();
} catch (IOException e1) {
LOG.error("Exception ({}) caught in getClientConfig: {}", e1.getClass().getName(), e1.getMessage(), e1);
}
}
Preconditions.checkState(clientConfig != null, "Could not determine the configuration. Make sure the clientConfig parameter refers to a valid json config file or a valid teletask nbt printed text file.");
return clientConfig;
}
}