diff --git a/common/twitter-common/src/main/java/org/springframework/cloud/fn/common/twitter/TwitterConnectionConfiguration.java b/common/twitter-common/src/main/java/org/springframework/cloud/fn/common/twitter/TwitterConnectionConfiguration.java index 057204d2..b5b65c78 100644 --- a/common/twitter-common/src/main/java/org/springframework/cloud/fn/common/twitter/TwitterConnectionConfiguration.java +++ b/common/twitter-common/src/main/java/org/springframework/cloud/fn/common/twitter/TwitterConnectionConfiguration.java @@ -39,9 +39,6 @@ import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.MimeTypeUtils; -//import org.springframework.cloud.stream.config.BindingProperties; -// import org.springframework.integration.support.MutableMessage; - /** * * @author Christian Tzolov diff --git a/supplier/twitter-supplier/src/test/java/org/springframework/cloud/fn/supplier/twitter/status/stream/TwitterTestUtils.java b/common/twitter-common/src/main/java/org/springframework/cloud/fn/common/twitter/util/TwitterTestUtils.java similarity index 97% rename from supplier/twitter-supplier/src/test/java/org/springframework/cloud/fn/supplier/twitter/status/stream/TwitterTestUtils.java rename to common/twitter-common/src/main/java/org/springframework/cloud/fn/common/twitter/util/TwitterTestUtils.java index 69305887..25b27679 100644 --- a/supplier/twitter-supplier/src/test/java/org/springframework/cloud/fn/supplier/twitter/status/stream/TwitterTestUtils.java +++ b/common/twitter-common/src/main/java/org/springframework/cloud/fn/common/twitter/util/TwitterTestUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.fn.supplier.twitter.status.stream; +package org.springframework.cloud.fn.common.twitter.util; import java.io.IOException; diff --git a/consumer/twitter-consumer/README.adoc b/consumer/twitter-consumer/README.adoc index 2e95ceac..1f95e184 100644 --- a/consumer/twitter-consumer/README.adoc +++ b/consumer/twitter-consumer/README.adoc @@ -22,9 +22,9 @@ You can import `TwitterUpdateConsumerConfiguration` in the application and then - `Consumer updateStatus` - if you have an `StatusUpdate` instance you can use the `updateStatus` to apply it. -- `Function, StatusUpdate> toStatusUpdateQuery` - function that converts a `Message` text into a `StatusUpdate` instance using the `TwitterUpdateConsumerProperties` properties. +- `Function, StatusUpdate> messageToStatusUpdateFunction` - function that converts a `Message` text into a `StatusUpdate` instance using the `TwitterUpdateConsumerProperties` properties. -- `Consumer> twitterStatusUpdateConsumer` - composes `toStatusUpdateQuery` and `updateStatus` to update the twitter status from Message text. +- `Consumer> twitterStatusUpdateConsumer` - composes `messageToStatusUpdateFunction` and `updateStatus` to update the twitter status from Message text. Note: the Message content is expected to be in text format. Consider using the `byteArrayTextToString` utility `Function`. diff --git a/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerConfiguration.java b/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerConfiguration.java index cb301826..af49801d 100644 --- a/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerConfiguration.java +++ b/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerConfiguration.java @@ -16,7 +16,6 @@ package org.springframework.cloud.fn.consumer.twitter.status.update; -import java.util.Properties; import java.util.function.Consumer; import java.util.function.Function; @@ -28,16 +27,12 @@ import twitter4j.StatusUpdate; import twitter4j.Twitter; import twitter4j.TwitterException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.fn.common.twitter.TwitterConnectionConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.PropertiesPropertySource; import org.springframework.messaging.Message; -import org.springframework.util.Assert; /** * @@ -50,13 +45,6 @@ public class TwitterUpdateConsumerConfiguration { private static final Log logger = LogFactory.getLog(TwitterUpdateConsumerConfiguration.class); - @Autowired - public void setInfoProperties(ConfigurableEnvironment env) { - Properties props = new Properties(); - props.put("spring.cloud.stream.function.definition", "toText|upper|sink"); - env.getPropertySources().addFirst(new PropertiesPropertySource("function-dsl-props", props)); - } - @Bean public Consumer updateStatus(Twitter twitter) { return statusUpdate -> { @@ -74,7 +62,8 @@ public class TwitterUpdateConsumerConfiguration { } @Bean - public Function, StatusUpdate> toStatusUpdateQuery(TwitterUpdateConsumerProperties updateProperties) { + public Function, StatusUpdate> messageToStatusUpdateFunction( + TwitterUpdateConsumerProperties updateProperties) { return message -> { @@ -106,8 +95,6 @@ public class TwitterUpdateConsumerConfiguration { } if (updateProperties.getLocation().getLat() != null) { - Assert.notNull(updateProperties.getLocation().getLon(), - "If the latitude is set then the longitude must be set too"); double lat = updateProperties.getLocation().getLat().getValue(message, Double.class); double lon = updateProperties.getLocation().getLon().getValue(message, Double.class); statusUpdate.setLocation(new GeoLocation(lat, lon)); diff --git a/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerProperties.java b/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerProperties.java index 5ce35d7f..a1b30e6c 100644 --- a/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerProperties.java +++ b/consumer/twitter-consumer/src/main/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateConsumerProperties.java @@ -81,7 +81,7 @@ public class TwitterUpdateConsumerProperties { /** * (SpEL expression) The location this Tweet refers to. Ignored if geo_enabled for the user is false! */ - private Location location = new Location(); + private final Location location = new Location(); public Expression getText() { return text; diff --git a/consumer/twitter-consumer/src/test/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateSinkFunctionConfigurationTests.java b/consumer/twitter-consumer/src/test/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateSinkFunctionConfigurationTests.java index 808396a0..a3bdcf3e 100644 --- a/consumer/twitter-consumer/src/test/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateSinkFunctionConfigurationTests.java +++ b/consumer/twitter-consumer/src/test/java/org/springframework/cloud/fn/consumer/twitter/status/update/TwitterUpdateSinkFunctionConfigurationTests.java @@ -53,7 +53,7 @@ public class TwitterUpdateSinkFunctionConfigurationTests { } @Test - public void testToStatusUpdateQueryFunction() { + public void testMessageToStatusUpdateFunction() { TwitterUpdateConsumerProperties properties = new TwitterUpdateConsumerProperties(); properties.setAttachmentUrl(expression("'attachmentUrl'")); @@ -64,10 +64,10 @@ public class TwitterUpdateSinkFunctionConfigurationTests { properties.getLocation().setLat(expression("'37.78217'")); properties.getLocation().setLon(expression("'-122.40062'")); - Function, StatusUpdate> toStatusUpdateQueryFunction = - new TwitterUpdateConsumerConfiguration().toStatusUpdateQuery(properties); + Function, StatusUpdate> messageToStatusUpdateFunction = + new TwitterUpdateConsumerConfiguration().messageToStatusUpdateFunction(properties); - StatusUpdate result = toStatusUpdateQueryFunction.apply(new GenericMessage<>("Hello World")); + StatusUpdate result = messageToStatusUpdateFunction.apply(new GenericMessage<>("Hello World")); assertThat(result).isNotNull(); assertThat(result.getStatus()).isEqualTo("Hello World"); diff --git a/function/twitter-function/README.adoc b/function/twitter-function/README.adoc index 14b464d4..9d2e19af 100644 --- a/function/twitter-function/README.adoc +++ b/function/twitter-function/README.adoc @@ -19,7 +19,7 @@ You can import the `TwitterTrendFunctionConfiguration` in a Spring Boot applicat `filterFunction` -You can use `Function, Message> trendOrTrendLocationsFunction` as a qualifier when injecting. +You can use `Function, Message> twitterTrendFunction` as a qualifier when injecting. Once injected, you can use the `apply` method of the `Function` to invoke it and get the result. diff --git a/function/twitter-function/src/main/java/org/springframework/cloud/fn/twitter/trend/TwitterTrendFunctionConfiguration.java b/function/twitter-function/src/main/java/org/springframework/cloud/fn/twitter/trend/TwitterTrendFunctionConfiguration.java index 61253b87..c82f023c 100644 --- a/function/twitter-function/src/main/java/org/springframework/cloud/fn/twitter/trend/TwitterTrendFunctionConfiguration.java +++ b/function/twitter-function/src/main/java/org/springframework/cloud/fn/twitter/trend/TwitterTrendFunctionConfiguration.java @@ -80,7 +80,7 @@ public class TwitterTrendFunctionConfiguration { } @Bean - public Function, Message> trendOrTrendLocationsFunction( + public Function, Message> twitterTrendFunction( Function> managedJson, Function, Trends> trend, TwitterTrendFunctionProperties properties, Function, List> closestOrAvailableTrends) { diff --git a/supplier/twitter-supplier/src/test/java/org/springframework/cloud/fn/supplier/twitter/status/stream/TwitterStreamSupplierTests.java b/supplier/twitter-supplier/src/test/java/org/springframework/cloud/fn/supplier/twitter/status/stream/TwitterStreamSupplierTests.java index 809b5b35..196d7dc4 100644 --- a/supplier/twitter-supplier/src/test/java/org/springframework/cloud/fn/supplier/twitter/status/stream/TwitterStreamSupplierTests.java +++ b/supplier/twitter-supplier/src/test/java/org/springframework/cloud/fn/supplier/twitter/status/stream/TwitterStreamSupplierTests.java @@ -38,6 +38,7 @@ import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.fn.common.twitter.TwitterConnectionProperties; +import org.springframework.cloud.fn.common.twitter.util.TwitterTestUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; @@ -45,6 +46,7 @@ import org.springframework.messaging.Message; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.SocketUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.mockserver.matchers.Times.exactly; @@ -69,7 +71,7 @@ public abstract class TwitterStreamSupplierTests { private static final String MOCK_SERVER_IP = "127.0.0.1"; - private static final Integer MOCK_SERVER_PORT = 1080; + private static final Integer MOCK_SERVER_PORT = SocketUtils.findAvailableTcpPort(); private static ClientAndServer mockServer;