From a8d455e3d696d673cfe00bfa1a53569bd90858ab Mon Sep 17 00:00:00 2001 From: nsingh Date: Fri, 6 Apr 2018 08:12:57 -0700 Subject: [PATCH] Some refactoring into CfJson --- .../ide/vscode/manifest/yaml/CfJson.java | 43 +++++++++++++++++++ .../yaml/ManifestYamlLanguageServer.java | 16 ++----- .../yaml/ManifestYamlActualCfClientTest.java | 6 +-- 3 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/CfJson.java diff --git a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/CfJson.java b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/CfJson.java new file mode 100644 index 000000000..574123d15 --- /dev/null +++ b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/CfJson.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.manifest.yaml; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CfTargetsInfo; +import org.springframework.ide.vscode.commons.languageserver.util.Settings; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonSyntaxException; + +public class CfJson { + + private Gson gson = new Gson(); + private final Logger log = LoggerFactory.getLogger(CfJson.class); + + public CfTargetsInfo from(Settings settings) { + try { + JsonElement rawData = settings.getRawSettings(); + if (rawData != null) { + return gson.fromJson(rawData, CfTargetsInfo.class); + } + } catch (JsonSyntaxException e) { + log.error("", e); + } + return null; + } + + public CfTargetsInfo from(String rawJson) { + return gson.fromJson(rawJson, CfTargetsInfo.class); + } + +} diff --git a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java index 7196cd642..60e600739 100644 --- a/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java +++ b/headless-services/manifest-yaml-language-server/src/main/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlLanguageServer.java @@ -68,6 +68,7 @@ import com.google.gson.JsonSyntaxException; public class ManifestYamlLanguageServer extends SimpleLanguageServer { private Yaml yaml = new Yaml(); + private CfJson cfJson = new CfJson(); private ManifestYmlSchema schema; private CFTargetCache cfTargetCache; private final CloudFoundryClientFactory cfClientFactory; @@ -76,7 +77,6 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer { private final ImmutableSet FALLBACK_YML_IDS = ImmutableSet.of(LanguageId.of("yml"), LanguageId.of("yaml")); final private ClientParamsProvider defaultClientParamsProvider; - private Gson gson = new Gson(); public ManifestYamlLanguageServer() { this(DefaultCloudFoundryClientFactoryV2.INSTANCE, CfCliParamsProvider.getInstance()); @@ -137,7 +137,7 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer { documents.onHover(hoverEngine); workspace.onDidChangeConfiguraton(settings -> { - CfTargetsInfo info = fromJson(CfTargetsInfo.class, settings); + CfTargetsInfo info = cfJson.from(settings); if (info != null) { applyCfLoginParameterSettings(info); } @@ -148,17 +148,7 @@ public class ManifestYamlLanguageServer extends SimpleLanguageServer { return cfClientConfig; } - protected T fromJson(Class klass, Settings settings) { - try { - JsonElement rawData = settings.getRawSettings(); - if (rawData != null) { - return gson.fromJson(rawData, klass); - } - } catch (JsonSyntaxException e) { - log.error("", e); - } - return null; - } + @SuppressWarnings("unchecked") private void applyCfLoginParameterSettings(CfTargetsInfo info) { diff --git a/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlActualCfClientTest.java b/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlActualCfClientTest.java index f3f0c1368..dd442de21 100644 --- a/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlActualCfClientTest.java +++ b/headless-services/manifest-yaml-language-server/src/test/java/org/springframework/ide/vscode/manifest/yaml/ManifestYamlActualCfClientTest.java @@ -27,14 +27,14 @@ import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CfTar import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CfTargetsInfoProvder; import org.springframework.ide.vscode.commons.cloudfoundry.client.v2.DefaultCloudFoundryClientFactoryV2; -import com.google.gson.Gson; - public class ManifestYamlActualCfClientTest { private CFTargetCache cfTargetCache; + private CfJson cfJson; @Before public void setup() throws Exception { + cfJson = new CfJson(); CfTargetsInfo info = getTargetsInfoFromEnv(); CfTargetsInfoProvder provider = new CfTargetsInfoProvder(info); CfClientConfig cfClientConfig = CfClientConfig.createDefault(provider); @@ -56,7 +56,7 @@ public class ManifestYamlActualCfClientTest { + " \"noNetworkConnection\": \"No connection to Cloud Foundry: Connect CF Target via Boot Dashboard or login via CF CLI or verify network connections\",\n" + " \"noOrgSpace\": \"No org/space selected: Connect CF Target in Boot Dashboard or login via CF CLI\"\n" + " }\n" + "}"; - return new Gson().fromJson(rawJson, CfTargetsInfo.class); + return cfJson.from(rawJson); } @Ignore @Test