Merge pull request #34 from scottfrederick/tags
Multiple tag support and refactoring accept().
This commit is contained in:
@@ -12,7 +12,7 @@ import org.springframework.cloud.service.common.AmqpServiceInfo;
|
||||
public class AmqpServiceInfoCreator extends CloudFoundryServiceInfoCreator<AmqpServiceInfo> {
|
||||
|
||||
public AmqpServiceInfoCreator() {
|
||||
super("rabbitmq", "amqp");
|
||||
super(new Tags("rabbitmq"), "amqp");
|
||||
}
|
||||
|
||||
public AmqpServiceInfo createServiceInfo(Map<String,Object> serviceData) {
|
||||
|
||||
@@ -7,57 +7,57 @@ import org.springframework.cloud.ServiceInfoCreator;
|
||||
import org.springframework.cloud.service.ServiceInfo;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ramnivas Laddad
|
||||
*
|
||||
*/
|
||||
public abstract class CloudFoundryServiceInfoCreator<SI extends ServiceInfo> implements ServiceInfoCreator<SI, Map<String,Object>> {
|
||||
public abstract class CloudFoundryServiceInfoCreator<SI extends ServiceInfo> implements ServiceInfoCreator<SI, Map<String, Object>> {
|
||||
|
||||
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<String, Object> serviceData) {
|
||||
return tagsMatch(serviceData) || labelStartsWithTag(serviceData) || uriMatchesScheme(serviceData);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public boolean accept(Map<String,Object> serviceData) {
|
||||
List<String> tags = (List<String>)serviceData.get("tags");
|
||||
protected boolean tagsMatch(Map<String, Object> serviceData) {
|
||||
List<String> serviceTags = (List<String>) serviceData.get("tags");
|
||||
return tags.containsOne(serviceTags);
|
||||
}
|
||||
|
||||
protected boolean labelStartsWithTag(Map<String, Object> 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<String,Object> serviceData) {
|
||||
if (uriScheme == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, String> credentials = (Map<String, String>) 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<String, Object> serviceData) {
|
||||
if (uriScheme == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, String> credentials = (Map<String, String>) 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.springframework.cloud.service.common.MongoServiceInfo;
|
||||
public class MongoServiceInfoCreator extends CloudFoundryServiceInfoCreator<MongoServiceInfo> {
|
||||
|
||||
public MongoServiceInfoCreator() {
|
||||
super("mongodb", "mongodb");
|
||||
super(new Tags("mongodb"), "mongodb");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -5,24 +5,22 @@ import java.util.Map;
|
||||
import org.springframework.cloud.service.common.MonitoringServiceInfo;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Ramnivas Laddad
|
||||
*
|
||||
*/
|
||||
public class MonitoringServiceInfoCreator extends CloudFoundryServiceInfoCreator<MonitoringServiceInfo> {
|
||||
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<String,Object> 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<String, Object> serviceData) {
|
||||
return labelStartsWithTag(serviceData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MonitoringServiceInfo createServiceInfo(Map<String,Object> serviceData) {
|
||||
String id = (String) serviceData.get("name");
|
||||
return new MonitoringServiceInfo(id);
|
||||
}
|
||||
@Override
|
||||
public MonitoringServiceInfo createServiceInfo(Map<String, Object> serviceData) {
|
||||
String id = (String) serviceData.get("name");
|
||||
return new MonitoringServiceInfo(id);
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.MysqlServiceInfo;
|
||||
public class MysqlServiceInfoCreator extends RelationalServiceInfoCreator<MysqlServiceInfo> {
|
||||
|
||||
public MysqlServiceInfoCreator() {
|
||||
super("mysql", "mysql");
|
||||
super(new Tags("mysql"), "mysql");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo;
|
||||
public class PostgresqlServiceInfoCreator extends RelationalServiceInfoCreator<PostgresqlServiceInfo> {
|
||||
|
||||
public PostgresqlServiceInfoCreator() {
|
||||
super("postgresql", "postgres");
|
||||
super(new Tags("postgresql"), "postgres");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,35 +5,34 @@ import java.util.Map;
|
||||
import org.springframework.cloud.service.common.RedisServiceInfo;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Ramnivas Laddad
|
||||
*
|
||||
*/
|
||||
public class RedisServiceInfoCreator extends CloudFoundryServiceInfoCreator<RedisServiceInfo> {
|
||||
|
||||
public RedisServiceInfoCreator() {
|
||||
super("redis", "redis");
|
||||
|
||||
super(new Tags("redis"), "redis");
|
||||
}
|
||||
|
||||
public RedisServiceInfo createServiceInfo(Map<String,Object> serviceData) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String,Object> credentials = (Map<String, Object>) serviceData.get("credentials");
|
||||
|
||||
Map<String, Object> credentials = (Map<String, Object>) 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,24 +12,19 @@ import org.springframework.cloud.util.UriInfo;
|
||||
*/
|
||||
public abstract class RelationalServiceInfoCreator<SI extends RelationalServiceInfo> extends CloudFoundryServiceInfoCreator<SI> {
|
||||
|
||||
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<String,Object> serviceData) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String,Object> credentials = (Map<String, Object>) 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<SI extends RelationalServiceI
|
||||
|
||||
String database = (String) credentials.get("name");
|
||||
|
||||
uri = new UriInfo(getConnectionScheme(), host, port, username, password, database).toString();
|
||||
uri = new UriInfo(getUriScheme(), host, port, username, password, database).toString();
|
||||
}
|
||||
return createServiceInfo(id, uri);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ public class SmtpServiceInfoCreator extends CloudFoundryServiceInfoCreator<SmtpS
|
||||
private static final int DEFAULT_SMTP_PORT = 587;
|
||||
|
||||
public SmtpServiceInfoCreator() {
|
||||
super("smtp", "smtp");
|
||||
super(new Tags("smtp"), "smtp");
|
||||
}
|
||||
|
||||
public SmtpServiceInfo createServiceInfo(Map<String,Object> serviceData) {
|
||||
|
||||
@@ -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<String> 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;
|
||||
}
|
||||
}
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import org.springframework.cloud.service.common.OracleServiceInfo;
|
||||
|
||||
public class UserProvidedOracleServiceInfoCreator extends RelationalServiceInfoCreator<OracleServiceInfo> {
|
||||
public UserProvidedOracleServiceInfoCreator() {
|
||||
super("oracle", "oracle");
|
||||
super(new Tags(), "oracle");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user