From f25d2c9c94b0d586c0281237f67baa056deb9579 Mon Sep 17 00:00:00 2001 From: nsingh Date: Tue, 17 Jan 2017 10:29:59 -0800 Subject: [PATCH] Fixed regression in error handling in CF support --- .../{v2 => }/CloudFoundryClientFactory.java | 4 +- .../client/cftarget/CFTargetCache.java | 10 +-- .../client/cftarget/CfCliParamsProvider.java | 78 +++++++------------ .../client/cftarget/ClientParamsProvider.java | 9 ++- .../DefaultCloudFoundryClientFactoryV2.java | 1 + .../cloudfoundry/client/CFClientTest.java | 1 - .../yaml/AbstractCFHintsProvider.java | 3 +- .../yaml/ManifestYamlLanguageServer.java | 2 +- 8 files changed, 41 insertions(+), 67 deletions(-) rename vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/{v2 => }/CloudFoundryClientFactory.java (82%) diff --git a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/v2/CloudFoundryClientFactory.java b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/CloudFoundryClientFactory.java similarity index 82% rename from vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/v2/CloudFoundryClientFactory.java rename to vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/CloudFoundryClientFactory.java index 4dfc1463b..22c96ec7e 100644 --- a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/v2/CloudFoundryClientFactory.java +++ b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/CloudFoundryClientFactory.java @@ -8,10 +8,8 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.commons.cloudfoundry.client.v2; +package org.springframework.ide.vscode.commons.cloudfoundry.client; -import org.springframework.ide.vscode.commons.cloudfoundry.client.ClientRequests; -import org.springframework.ide.vscode.commons.cloudfoundry.client.ClientTimeouts; import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CFClientParams; public interface CloudFoundryClientFactory { diff --git a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CFTargetCache.java b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CFTargetCache.java index 1f7cd2e55..6deed8a03 100644 --- a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CFTargetCache.java +++ b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CFTargetCache.java @@ -12,11 +12,10 @@ package org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.springframework.ide.vscode.commons.cloudfoundry.client.ClientTimeouts; -import org.springframework.ide.vscode.commons.cloudfoundry.client.v2.CloudFoundryClientFactory; +import org.springframework.ide.vscode.commons.cloudfoundry.client.CloudFoundryClientFactory; import org.springframework.ide.vscode.commons.util.Assert; import com.google.common.cache.CacheBuilder; @@ -53,7 +52,8 @@ public class CFTargetCache { /** * @return non-null list of targets, or throws exception if no targets found - * @throws Exception if no targets found, or error in resolving targets + * @throws Exception + * if no targets found, or error in resolving targets */ public synchronized List getOrCreate() throws Exception { @@ -68,10 +68,6 @@ public class CFTargetCache { } } - if (targets.isEmpty()) { - throw new ExecutionException(new Error(paramsProvider.noParamsAvailableMessage())); - } - return targets; } diff --git a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CfCliParamsProvider.java b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CfCliParamsProvider.java index c76c757c0..7e2c79e91 100644 --- a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CfCliParamsProvider.java +++ b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/CfCliParamsProvider.java @@ -15,11 +15,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.springframework.ide.vscode.commons.util.ExternalCommand; -import org.springframework.ide.vscode.commons.util.ExternalProcess; import com.fasterxml.jackson.databind.ObjectMapper; @@ -38,8 +33,6 @@ public class CfCliParamsProvider implements ClientParamsProvider { public static final String NAME = "Name"; public static final String SSL_DISABLED = "SSLDisabled"; - private static Logger logger = Logger.getLogger(CfCliParamsProvider.class.getName()); - /* * (non-Javadoc) * @@ -47,48 +40,38 @@ public class CfCliParamsProvider implements ClientParamsProvider { * ClientParamsProvider#getParams() */ @Override - public List getParams() { - try { - File file = getConfigJsonFile(); - if (file != null) { - ObjectMapper mapper = new ObjectMapper(); - Map userData = mapper.readValue(file, Map.class); - if (userData != null) { - String refreshToken = (String) userData.get(REFRESH_TOKEN); - // Only support connecting to CF via refresh token for now - if (refreshToken == null) { - return null; - } - CFCredentials credentials = CFCredentials.fromRefreshToken(refreshToken); - boolean sslDisabled = (Boolean) userData.get(SSL_DISABLED); - String target = (String) userData.get(TARGET); - Map orgFields = (Map) userData.get(ORGANIZATION_FIELDS); - Map spaceFields = (Map) userData.get(SPACE_FIELDS); - if (target != null && orgFields != null && spaceFields != null) { - String orgName = (String) orgFields.get(NAME); - String spaceName = (String) spaceFields.get(NAME); - List params = new ArrayList<>(); - params.add(new CFClientParams(target, null, credentials, orgName, spaceName, sslDisabled)); - return params; - } + public List getParams() throws Exception { + File file = getConfigJsonFile(); + List params = new ArrayList<>(); + + if (file != null) { + ObjectMapper mapper = new ObjectMapper(); + Map userData = mapper.readValue(file, Map.class); + if (userData != null) { + String refreshToken = (String) userData.get(REFRESH_TOKEN); + // Only support connecting to CF via refresh token for now + if (refreshToken == null) { + return null; + } + CFCredentials credentials = CFCredentials.fromRefreshToken(refreshToken); + boolean sslDisabled = (Boolean) userData.get(SSL_DISABLED); + String target = (String) userData.get(TARGET); + Map orgFields = (Map) userData.get(ORGANIZATION_FIELDS); + Map spaceFields = (Map) userData.get(SPACE_FIELDS); + if (target != null && orgFields != null && spaceFields != null) { + String orgName = (String) orgFields.get(NAME); + String spaceName = (String) spaceFields.get(NAME); + params.add(new CFClientParams(target, null, credentials, orgName, spaceName, sslDisabled)); } } - } catch (IOException | InterruptedException e) { - log(e); } - return null; - } - - /* - * (non-Javadoc) - * - * @see org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget. - * ClientParamsProvider#noParamsAvailableMessage() - */ - @Override - public String noParamsAvailableMessage() { - return "Unable to fetch information from Cloud Foundry. Please use cf CLI to configure and login to Cloud Foundry."; + if (params.isEmpty()) { + throw new Exception( + "Unable to fetch information from Cloud Foundry. Please use cf CLI to configure and login to Cloud Foundry."); + } else { + return params; + } } private File getConfigJsonFile() throws IOException, InterruptedException { @@ -112,9 +95,4 @@ public class CfCliParamsProvider implements ClientParamsProvider { private String getUnixHomeDir() throws IOException, InterruptedException { return System.getProperty("user.home"); } - - private void log(Exception e) { - logger.log(Level.SEVERE, e.getMessage(), e); - } - } diff --git a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/ClientParamsProvider.java b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/ClientParamsProvider.java index ea58c2d3d..f8c4d9f6f 100644 --- a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/ClientParamsProvider.java +++ b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/cftarget/ClientParamsProvider.java @@ -14,8 +14,11 @@ import java.util.List; public interface ClientParamsProvider { - List getParams(); - - String noParamsAvailableMessage(); + /** + * + * @return non-null list of params to connect to Cloud Foundry + * @throws Exception if failure to resolve any params for Cloud Foundry + */ + List getParams() throws Exception; } \ No newline at end of file diff --git a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/v2/DefaultCloudFoundryClientFactoryV2.java b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/v2/DefaultCloudFoundryClientFactoryV2.java index 510555b1a..c2bf33271 100644 --- a/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/v2/DefaultCloudFoundryClientFactoryV2.java +++ b/vscode-extensions/commons/commons-cf/src/main/java/org/springframework/ide/vscode/commons/cloudfoundry/client/v2/DefaultCloudFoundryClientFactoryV2.java @@ -12,6 +12,7 @@ package org.springframework.ide.vscode.commons.cloudfoundry.client.v2; import org.springframework.ide.vscode.commons.cloudfoundry.client.ClientRequests; import org.springframework.ide.vscode.commons.cloudfoundry.client.ClientTimeouts; +import org.springframework.ide.vscode.commons.cloudfoundry.client.CloudFoundryClientFactory; import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CFClientParams; public class DefaultCloudFoundryClientFactoryV2 implements CloudFoundryClientFactory { diff --git a/vscode-extensions/commons/commons-cf/src/test/java/org/springframework/ide/vscode/commons/cloudfoundry/client/CFClientTest.java b/vscode-extensions/commons/commons-cf/src/test/java/org/springframework/ide/vscode/commons/cloudfoundry/client/CFClientTest.java index e10469058..9d082949b 100644 --- a/vscode-extensions/commons/commons-cf/src/test/java/org/springframework/ide/vscode/commons/cloudfoundry/client/CFClientTest.java +++ b/vscode-extensions/commons/commons-cf/src/test/java/org/springframework/ide/vscode/commons/cloudfoundry/client/CFClientTest.java @@ -20,7 +20,6 @@ import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CFTar import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CfCliParamsProvider; import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.ClientParamsProvider; import org.springframework.ide.vscode.commons.cloudfoundry.client.cftarget.CFTargetCache; -import org.springframework.ide.vscode.commons.cloudfoundry.client.v2.CloudFoundryClientFactory; import org.springframework.ide.vscode.commons.cloudfoundry.client.v2.DefaultCloudFoundryClientFactoryV2; public class CFClientTest { diff --git a/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/AbstractCFHintsProvider.java b/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/AbstractCFHintsProvider.java index 1dacfac44..fede17366 100644 --- a/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/AbstractCFHintsProvider.java +++ b/vscode-extensions/vscode-manifest-yaml/src/main/java/org/springframework/ide/vscode/manifest/yaml/AbstractCFHintsProvider.java @@ -55,8 +55,7 @@ public abstract class AbstractCFHintsProvider implements Provider