diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java index bc1d31b..74f7235 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java @@ -12,7 +12,7 @@ import org.springframework.cloud.service.common.AmqpServiceInfo; public class AmqpServiceInfoCreator extends CloudFoundryServiceInfoCreator { public AmqpServiceInfoCreator() { - super("rabbitmq", "amqp"); + super(new Tags("rabbitmq"), "amqp"); } public AmqpServiceInfo createServiceInfo(Map serviceData) { diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java index 266dd10..deb1448 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java @@ -7,57 +7,57 @@ import org.springframework.cloud.ServiceInfoCreator; import org.springframework.cloud.service.ServiceInfo; /** - * * @author Ramnivas Laddad - * */ -public abstract class CloudFoundryServiceInfoCreator implements ServiceInfoCreator> { +public abstract class CloudFoundryServiceInfoCreator implements ServiceInfoCreator> { - private String tag; + private Tags tags; private String uriScheme; - public CloudFoundryServiceInfoCreator(String tag, String uriScheme) { - this.tag = tag; + public CloudFoundryServiceInfoCreator(Tags tags, String uriScheme) { + this.tags = tags; this.uriScheme = uriScheme; } - public CloudFoundryServiceInfoCreator(String tag) { - this(tag, null); - } - + public CloudFoundryServiceInfoCreator(Tags tags) { + this(tags, null); + } + + public boolean accept(Map serviceData) { + return tagsMatch(serviceData) || labelStartsWithTag(serviceData) || uriMatchesScheme(serviceData); + } + @SuppressWarnings("unchecked") - public boolean accept(Map serviceData) { - List tags = (List)serviceData.get("tags"); + protected boolean tagsMatch(Map serviceData) { + List serviceTags = (List) serviceData.get("tags"); + return tags.containsOne(serviceTags); + } + + protected boolean labelStartsWithTag(Map serviceData) { String label = (String) serviceData.get("label"); - - boolean tagAcceptable = tags != null && tags.contains(tag); - // Use label as a tag to cover cases where tag doesn't exist and label value - // itself starts with the tag text (for example, "label : mysql-n/a") - boolean labelAcceptable = label != null && label.startsWith(tag); - - return tagAcceptable || labelAcceptable || isUriAcceptable(serviceData); + return tags.startsWith(label); } - - private boolean isUriAcceptable(Map serviceData) { - if (uriScheme == null) { - return false; - } - - @SuppressWarnings("unchecked") - Map credentials = (Map) serviceData.get("credentials"); - if (credentials != null) { - String uri = credentials.get("uri"); - if (uri == null) { - uri = credentials.get("url"); - } - if (uri != null) { - return uri.startsWith(uriScheme + "://"); - } - } - return false; + + protected boolean uriMatchesScheme(Map serviceData) { + if (uriScheme == null) { + return false; + } + + @SuppressWarnings("unchecked") + Map credentials = (Map) serviceData.get("credentials"); + if (credentials != null) { + String uri = credentials.get("uri"); + if (uri == null) { + uri = credentials.get("url"); + } + if (uri != null) { + return uri.startsWith(uriScheme + "://"); + } + } + return false; } - - protected String getTag() { - return tag; + + public String getUriScheme() { + return uriScheme; } } diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java index 9879bdc..11e419a 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java @@ -12,7 +12,7 @@ import org.springframework.cloud.service.common.MongoServiceInfo; public class MongoServiceInfoCreator extends CloudFoundryServiceInfoCreator { public MongoServiceInfoCreator() { - super("mongodb", "mongodb"); + super(new Tags("mongodb"), "mongodb"); } diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MonitoringServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MonitoringServiceInfoCreator.java index b3f8917..1a637a8 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MonitoringServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MonitoringServiceInfoCreator.java @@ -5,24 +5,22 @@ import java.util.Map; import org.springframework.cloud.service.common.MonitoringServiceInfo; /** - * * @author Ramnivas Laddad - * */ public class MonitoringServiceInfoCreator extends CloudFoundryServiceInfoCreator { - public MonitoringServiceInfoCreator() { - super("monitoring"); - } + public MonitoringServiceInfoCreator() { + super(new Tags("monitoring", "newrelic")); + } - // Until NewRelic service payload contains tags, we have to go with overriding to check the label - @Override - public boolean accept(Map serviceData) { - return ((String) serviceData.get("label")).startsWith("newrelic"); - } + // Until NewRelic service payload contains tags, we have to go with overriding to check the label + @Override + public boolean accept(Map serviceData) { + return labelStartsWithTag(serviceData); + } - @Override - public MonitoringServiceInfo createServiceInfo(Map serviceData) { - String id = (String) serviceData.get("name"); - return new MonitoringServiceInfo(id); - } + @Override + public MonitoringServiceInfo createServiceInfo(Map serviceData) { + String id = (String) serviceData.get("name"); + return new MonitoringServiceInfo(id); + } } \ No newline at end of file diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java index 813a642..aca803e 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java @@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.MysqlServiceInfo; public class MysqlServiceInfoCreator extends RelationalServiceInfoCreator { public MysqlServiceInfoCreator() { - super("mysql", "mysql"); + super(new Tags("mysql"), "mysql"); } @Override diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java index c773496..da8be3e 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java @@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo; public class PostgresqlServiceInfoCreator extends RelationalServiceInfoCreator { public PostgresqlServiceInfoCreator() { - super("postgresql", "postgres"); + super(new Tags("postgresql"), "postgres"); } @Override diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java index 7471c65..eddc340 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java @@ -5,35 +5,34 @@ import java.util.Map; import org.springframework.cloud.service.common.RedisServiceInfo; /** - * + * * @author Ramnivas Laddad * */ public class RedisServiceInfoCreator extends CloudFoundryServiceInfoCreator { public RedisServiceInfoCreator() { - super("redis", "redis"); - + super(new Tags("redis"), "redis"); } public RedisServiceInfo createServiceInfo(Map serviceData) { @SuppressWarnings("unchecked") - Map credentials = (Map) serviceData.get("credentials"); - + Map credentials = (Map) serviceData.get("credentials"); + String id = (String) serviceData.get("name"); String uri = (String) credentials.get("uri"); if (uri == null) { - uri = (String) credentials.get("url"); + uri = (String) credentials.get("url"); } if (uri == null) { - String host = (String) credentials.get("hostname"); - Integer port = Integer.parseInt(credentials.get("port").toString()); - String password = (String) credentials.get("password"); - - return new RedisServiceInfo(id, host, port, password); + String host = (String) credentials.get("hostname"); + Integer port = Integer.parseInt(credentials.get("port").toString()); + String password = (String) credentials.get("password"); + + return new RedisServiceInfo(id, host, port, password); } else { - return new RedisServiceInfo(id, uri); + return new RedisServiceInfo(id, uri); } } diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java index e836766..6885101 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java @@ -12,24 +12,19 @@ import org.springframework.cloud.util.UriInfo; */ public abstract class RelationalServiceInfoCreator extends CloudFoundryServiceInfoCreator { - public RelationalServiceInfoCreator(String tag, String uriScheme) { - super(tag, uriScheme); + public RelationalServiceInfoCreator(Tags tags, String uriScheme) { + super(tags, uriScheme); } public abstract SI createServiceInfo(String id, String uri); - - protected String getConnectionScheme() { - // by default return the tag as the uri scheme - return getTag(); - } - + public SI createServiceInfo(Map serviceData) { @SuppressWarnings("unchecked") Map credentials = (Map) serviceData.get("credentials"); - + String id = (String) serviceData.get("name"); - - String uri = null; + + String uri; if (credentials.containsKey("uri")) { uri = credentials.get("uri").toString(); } else { @@ -41,7 +36,7 @@ public abstract class RelationalServiceInfoCreator serviceData) { diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/Tags.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/Tags.java new file mode 100644 index 0000000..6986595 --- /dev/null +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/Tags.java @@ -0,0 +1,42 @@ +package org.springframework.cloud.cloudfoundry; + +import java.util.Arrays; +import java.util.List; + +public class Tags { + private String[] values; + + public Tags(String... values) { + this.values = values; + } + + public String[] getTags() { + return values; + } + + public boolean containsOne(List tags) { + if (tags != null) { + for (String value : values) { + if (tags.contains(value)) { + return true; + } + } + } + return false; + } + + public boolean contains(String tag) { + return tag != null && Arrays.asList(values).contains(tag); + } + + public boolean startsWith(String tag) { + if (tag != null) { + for (String value : values) { + if (tag.startsWith(value)) { + return true; + } + } + } + return false; + } +} diff --git a/cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/TagsTest.java b/cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/TagsTest.java new file mode 100644 index 0000000..149bd2c --- /dev/null +++ b/cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/TagsTest.java @@ -0,0 +1,51 @@ +package org.springframework.cloud.cloudfoundry; + +import org.junit.Test; + +import java.util.Arrays; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class TagsTest { + + private final Tags EMPTY_TAGS = new Tags(); + + @Test + public void containsOne() { + Tags tags = new Tags("test1", "test2"); + assertTrue(tags.containsOne(Arrays.asList("test1", "testx"))); + assertTrue(tags.containsOne(Arrays.asList("testx", "test2"))); + assertFalse(tags.containsOne(Arrays.asList("testx", "testy"))); + } + + @Test + public void containsOneWithEmptyTags() { + assertFalse(EMPTY_TAGS.containsOne(Arrays.asList("test"))); + } + + @Test + public void contains() { + Tags tags = new Tags("test1", "test2"); + assertTrue(tags.contains("test1")); + assertTrue(tags.contains("test2")); + assertFalse(tags.contains("testx")); + } + + @Test + public void containsWithEmptyTags() { + assertFalse(EMPTY_TAGS.contains("test")); + } + + @Test + public void startsWith() { + Tags tags = new Tags("test"); + assertTrue(tags.startsWith("test-123")); + assertFalse(tags.startsWith("abcd")); + } + + @Test + public void startsWithWithEmptyTags() { + assertFalse(EMPTY_TAGS.startsWith("test")); + } +} \ No newline at end of file diff --git a/cloudfoundry-ups-connector/src/main/java/org/springframework/cloud/cloudfoundry/UserProvidedOracleServiceInfoCreator.java b/cloudfoundry-ups-connector/src/main/java/org/springframework/cloud/cloudfoundry/UserProvidedOracleServiceInfoCreator.java index 6b1d201..5246def 100644 --- a/cloudfoundry-ups-connector/src/main/java/org/springframework/cloud/cloudfoundry/UserProvidedOracleServiceInfoCreator.java +++ b/cloudfoundry-ups-connector/src/main/java/org/springframework/cloud/cloudfoundry/UserProvidedOracleServiceInfoCreator.java @@ -4,7 +4,7 @@ import org.springframework.cloud.service.common.OracleServiceInfo; public class UserProvidedOracleServiceInfoCreator extends RelationalServiceInfoCreator { public UserProvidedOracleServiceInfoCreator() { - super("oracle", "oracle"); + super(new Tags(), "oracle"); } @Override diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f82b3fc..dbf4bf9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Mar 20 12:11:25 PDT 2014 +#Mon May 12 12:50:01 CDT 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-all.zip