package io.vertx.spi.cluster.ignite.util;
import io.vertx.core.VertxException;
import io.vertx.core.json.DecodeException;
import io.vertx.core.json.JsonObject;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgnitionEx;
import org.apache.ignite.internal.util.typedef.F;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class ConfigHelper {
private ConfigHelper() {
}
public static IgniteConfiguration loadConfiguration(URL config) {
try {
return F.first(IgnitionEx.loadConfigurations(config).get1());
} catch (IgniteCheckedException e) {
throw new VertxException(e);
}
}
public static IgniteConfiguration lookupXmlConfiguration(Class<?> clazz, String... files) {
InputStream is = lookupFiles(clazz, files);
try {
return F.first(IgnitionEx.loadConfigurations(is).get1());
} catch (IgniteCheckedException | IllegalArgumentException e) {
throw new VertxException(e);
}
}
public static JsonObject lookupJsonConfiguration(Class<?> clazz, String... files) {
InputStream is = lookupFiles(clazz, files);
try {
return new JsonObject(readFromInputStream(is));
} catch (NullPointerException | DecodeException | IOException e) {
throw new VertxException(e);
}
}
public static InputStream lookupFiles(Class<?> clazz, String... files) {
ClassLoader ctxClsLoader = Thread.currentThread().getContextClassLoader();
InputStream is = null;
for (String file : files) {
if (ctxClsLoader != null) {
is = ctxClsLoader.getResourceAsStream(file);
}
if (is == null) {
is = clazz.getClassLoader().getResourceAsStream(file);
}
if (is != null) {
break;
}
}
return is;
}
private static String readFromInputStream(InputStream inputStream) throws IOException {
StringBuilder resultStringBuilder = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
String line;
while ((line = br.readLine()) != null) {
resultStringBuilder.append(line).append("\n");
}
}
return resultStringBuilder.toString();
}
}