package net.wasdev.twelvefactorapp; import java.io.StringReader; import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonObject; import javax.json.JsonString; public class CloudantCredentials { private String username; private String password; private String url; public CloudantCredentials(String username, String password, String url, String vcapServices) throws Exception { if (username != null && password != null && url != null) { this.url = url; this.username = username; this.password = password; } else { parseVcapServices(vcapServices); if (this.username == null || this.password == null || this.url == null) { throw new Exception( "Database cannot be accessed at this time, something is null. Passed in variables were " + "username=" + username + ", password=" + ((password == null) ? "null" : "(non-null password)") + ", url=" + url + ". VCAP_SERVICES values were parsed out as " + "username=" + this.username + ", password=" + ((this.password == null) ? "null" : "(non null password)") + ", url=" + this.url); } } } private void parseVcapServices(String vcapServicesEnv) { if (vcapServicesEnv == null) { return; } JsonObject vcapServices = Json.createReader(new StringReader(vcapServicesEnv)).readObject(); JsonArray cloudantObjectArray = vcapServices.getJsonArray("cloudantNoSQLDB"); JsonObject cloudantObject = cloudantObjectArray.getJsonObject(0); JsonObject cloudantCredentials = cloudantObject.getJsonObject("credentials"); JsonString cloudantUsername = cloudantCredentials.getJsonString("username"); username = cloudantUsername.getString(); JsonString cloudantPassword = cloudantCredentials.getJsonString("password"); password = cloudantPassword.getString(); JsonString cloudantUrl = cloudantCredentials.getJsonString("url"); url = cloudantUrl.getString(); } public String getUrl() { return url; } public String getPassword() { return password; } public String getUsername() { return username; } }