diff --git a/headless-services/boot-java-language-server/pom.xml b/headless-services/boot-java-language-server/pom.xml index 0fc1279a4..6b5b5e5db 100644 --- a/headless-services/boot-java-language-server/pom.xml +++ b/headless-services/boot-java-language-server/pom.xml @@ -62,6 +62,11 @@ commons-yaml ${dependencies.version} + + org.springframework.ide.vscode + commons-boot-app-cli + ${dependencies.version} + diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/hover/ValueHoverProvider.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/hover/ValueHoverProvider.java index 3781b68d9..a17941e10 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/hover/ValueHoverProvider.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/hover/ValueHoverProvider.java @@ -10,15 +10,12 @@ *******************************************************************************/ package org.springframework.ide.vscode.boot.java.hover; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.concurrent.CompletableFuture; -import org.apache.commons.io.IOUtils; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.ITypeBinding; @@ -29,7 +26,7 @@ import org.eclipse.lsp4j.MarkedString; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.json.JSONObject; -import org.json.JSONTokener; +import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp; import org.springframework.ide.vscode.commons.util.text.TextDocument; /** @@ -69,32 +66,37 @@ public class ValueHoverProvider { if (range != null) { String propertyKey = value.substring(range.getStart(), range.getEnd()); - JSONObject properties = getPropertiesFromProcess(); - if (propertyKey != null && properties != null) { - Iterator keys = properties.keys(); - while (keys.hasNext()) { - String key = (String) keys.next(); - JSONObject props = properties.getJSONObject(key); + if (propertyKey != null) { + JSONObject[] allProperties = getPropertiesFromProcesses(); - if (props.has(propertyKey)) { - String propertyValue = props.getString(propertyKey); + List> hoverContent = new ArrayList<>(); - Range hoverRange = doc.toRange(nodeStartOffset + range.getStart(), range.getEnd() - range.getStart()); + for (int i = 0; i < allProperties.length; i++) { + Iterator keys = allProperties[i].keys(); + while (keys.hasNext()) { + String key = (String) keys.next(); + if (allProperties[i].get(key) instanceof JSONObject) { + JSONObject props = allProperties[i].getJSONObject(key); - Hover hover = new Hover(); - List> hoverContent = new ArrayList<>(); + if (props.has(propertyKey)) { + String propertyValue = props.getString(propertyKey); - hoverContent.add(Either.forLeft("property value for " + propertyKey)); - hoverContent.add(Either.forLeft(propertyValue)); - hoverContent.add(Either.forLeft("coming from:")); - hoverContent.add(Either.forLeft(key)); - - hover.setContents(hoverContent); - hover.setRange(hoverRange); - - return CompletableFuture.completedFuture(hover); + hoverContent.add(Either.forLeft("property value for " + propertyKey)); + hoverContent.add(Either.forLeft(propertyValue)); + hoverContent.add(Either.forLeft("coming from:")); + hoverContent.add(Either.forLeft(key)); + } + } } } + + Range hoverRange = doc.toRange(nodeStartOffset + range.getStart(), range.getEnd() - range.getStart()); + Hover hover = new Hover(); + + hover.setContents(hoverContent); + hover.setRange(hoverRange); + + return CompletableFuture.completedFuture(hover); } } } @@ -105,26 +107,30 @@ public class ValueHoverProvider { return null; } - public JSONObject getPropertiesFromProcess() { + public JSONObject[] getPropertiesFromProcesses() { + List result = new ArrayList<>(); + try { - URL url = new URL("http://localhost:8080/env"); - - URLConnection con = url.openConnection(); - InputStream in = con.getInputStream(); - String encoding = con.getContentEncoding(); - encoding = encoding == null ? "UTF-8" : encoding; - String body = IOUtils.toString(in, encoding); - - JSONTokener tokener = new JSONTokener(body); - JSONObject jsonData = new JSONObject(tokener); - - return jsonData; + Map apps = SpringBootApp.getAllRunningJavaApps(); + Iterator appsIter = apps.values().iterator(); + while (appsIter.hasNext()) { + SpringBootApp app = appsIter.next(); + if (app.isSpringBootApp()) { + String environment = app.getEnvironment(); + if (environment != null) { + JSONObject env = new JSONObject(environment); + if (env != null) { + result.add(env); + } + } + } + } } catch (Exception e) { e.printStackTrace(); } - return null; + return result.toArray(new JSONObject[result.size()]); } public String getPropertyKey(String value, int offset) {