Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ public class NotebookConfigs {
private static final String CONFIG_PROJECTS_MAPPING = "projects.mapping";
private static final String CONFIG_VM_OPTIONS = "vmOptions";
private static final String[] NOTEBOOK_CONFIG_LABELS = {
CONFIG_CLASSPATH,
CONFIG_MODULEPATH,
CONFIG_ADDMODULES,
CONFIG_ENABLE_PREVIEW,
CONFIG_IMPLICIT_IMPORTS,
CONFIG_PROJECTS_MAPPING,
CONFIG_VM_OPTIONS
CONFIG_CLASSPATH,
CONFIG_MODULEPATH,
CONFIG_ADDMODULES,
CONFIG_ENABLE_PREVIEW,
CONFIG_IMPLICIT_IMPORTS,
CONFIG_PROJECTS_MAPPING,
CONFIG_VM_OPTIONS
};
private volatile String classPath = null;
private volatile String modulePath = null;
Expand All @@ -66,6 +66,11 @@ public CompletableFuture<Void> getInitialized() {
return initialized;
}

public CompletableFuture<Void> awaitInitialized() {
CompletableFuture<Void> init = initialized;
return init != null ? init : CompletableFuture.completedFuture(null);
}

public String getClassPath() {
return classPath;
}
Expand Down Expand Up @@ -122,18 +127,33 @@ private CompletableFuture<Void> initializeConfigs() {
ClientConfigurationManager configManager = client.getClientConfigurationManager();
configManager.registerConfigChangeListener(client.getNbCodeCapabilities().getConfigurationPrefix() + NOTEBOOK_CONFIG_SECTION,
(config, newValue) -> notebookConfigsChangeListener(newValue.getAsJsonObject()));
return configManager.getConfiguration(NOTEBOOK_CONFIG_SECTION)
.thenApply(c -> {
if (c != null) {
notebookConfigsChangeListener(c.getAsJsonObject());
}
return null;
});
return loadConfigs(configManager, true);
}
return CompletableFuture.completedFuture(null);

}

public CompletableFuture<Void> refreshConfigs() {
NbCodeLanguageClient client = LanguageClientInstance.getInstance().getClient();
if (client == null) {
return CompletableFuture.completedFuture(null);
}
return awaitInitialized()
.thenCompose(v -> loadConfigs(client.getClientConfigurationManager(), false));
}

private CompletableFuture<Void> loadConfigs(ClientConfigurationManager configManager, boolean useCache) {
CompletableFuture<JsonElement> config = useCache
? configManager.getConfiguration(NOTEBOOK_CONFIG_SECTION)
: configManager.getConfigurationWithoutCaching(NOTEBOOK_CONFIG_SECTION);
return config.thenApply(c -> {
if (c != null && c.isJsonObject()) {
notebookConfigsChangeListener(c.getAsJsonObject());
}
return null;
});
}

public String getJdkVersion() {
// As per JEP-223
return System.getProperty("java.specification.version");
Expand All @@ -143,55 +163,70 @@ public void notebookConfigsChangeListener(JsonObject settings) {
if (settings == null) {
return;
}
JsonElement classPathConfig = settings.get(CONFIG_CLASSPATH);

JsonElement classPathConfig = getConfig(settings, CONFIG_CLASSPATH);
if (classPathConfig != null && classPathConfig.isJsonArray()) {
classPath = String.join(File.pathSeparator, classPathConfig.getAsJsonArray().asList().stream().map((elem) -> elem.getAsString()).toList());
} else {
classPath = null;
}

JsonElement modulePathConfig = settings.get(CONFIG_MODULEPATH);
JsonElement modulePathConfig = getConfig(settings, CONFIG_MODULEPATH);
if (modulePathConfig != null && modulePathConfig.isJsonArray()) {
modulePath = String.join(File.pathSeparator, modulePathConfig.getAsJsonArray().asList().stream().map((elem) -> elem.getAsString()).toList());
} else {
modulePath = null;
}

JsonElement addModulesConfig = settings.get(CONFIG_ADDMODULES);
JsonElement addModulesConfig = getConfig(settings, CONFIG_ADDMODULES);
if (addModulesConfig != null && addModulesConfig.isJsonArray()) {
addModules = String.join(",", addModulesConfig.getAsJsonArray().asList().stream().map((elem) -> elem.getAsString()).toList());
} else {
addModules = null;
}

JsonElement enablePreviewConfig = settings.get(CONFIG_ENABLE_PREVIEW);
JsonElement enablePreviewConfig = getConfig(settings, CONFIG_ENABLE_PREVIEW);
if (enablePreviewConfig != null && enablePreviewConfig.isJsonPrimitive()) {
JsonPrimitive primitive = enablePreviewConfig.getAsJsonPrimitive();
enablePreview = primitive.isBoolean() && primitive.getAsBoolean();
} else {
enablePreview = false;
}

JsonElement implicitImportsConfig = settings.get(CONFIG_IMPLICIT_IMPORTS);
JsonElement implicitImportsConfig = getConfig(settings, CONFIG_IMPLICIT_IMPORTS);
if (implicitImportsConfig != null && implicitImportsConfig.isJsonArray()) {
implicitImports = implicitImportsConfig.getAsJsonArray().asList().stream().map((elem) -> elem.getAsString()).toList();
} else {
implicitImports = null;
}

JsonElement notebookProjectMappingConfig = settings.get(CONFIG_PROJECTS_MAPPING);
JsonElement notebookProjectMappingConfig = getConfig(settings, CONFIG_PROJECTS_MAPPING);
if (notebookProjectMappingConfig != null && notebookProjectMappingConfig.isJsonObject()) {
notebookProjectMapping = notebookProjectMappingConfig.getAsJsonObject();
} else {
notebookProjectMapping = new JsonObject();
}

JsonElement notebookVmOptionsConfig = settings.get(CONFIG_VM_OPTIONS);
JsonElement notebookVmOptionsConfig = getConfig(settings, CONFIG_VM_OPTIONS);
if (notebookVmOptionsConfig != null && notebookVmOptionsConfig.isJsonArray()) {
notebookVmOptions = notebookVmOptionsConfig.getAsJsonArray().asList().stream().map(el -> el.getAsString()).toList();
} else {
notebookVmOptions = Collections.emptyList();
}
}

private static JsonElement getConfig(JsonObject settings, String key) {
JsonElement direct = settings.get(key);
if (direct != null) {
return direct;
}
JsonElement current = settings;
for (String part : key.split("\\.")) {
if (current == null || !current.isJsonObject()) {
return null;
}
current = current.getAsJsonObject().get(part);
}
return current;
}
}
Loading