From e561d0c4faefce7f0e32e15a5667b6512c6341d7 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Wed, 29 Mar 2017 00:32:38 +0300 Subject: juick-notifications: refactor using with Spring annotations --- .../configuration/APNSConfiguration.java | 23 ++++++++++++++++ .../components/configuration/GCMConfiguration.java | 21 +++++++++++++++ .../configuration/MPNSConfiguration.java | 16 +++++++++++ .../NotificationsAppConfiguration.java | 31 +++++++++++++--------- .../configuration/NotificationsInitializer.java | 5 +++- .../NotificationsMvcConfiguration.java | 15 ++++------- .../configuration/XMPPConfiguration.java | 31 ++++++++++++++++++++++ 7 files changed, 118 insertions(+), 24 deletions(-) create mode 100644 juick-notifications/src/main/java/com/juick/components/configuration/APNSConfiguration.java create mode 100644 juick-notifications/src/main/java/com/juick/components/configuration/GCMConfiguration.java create mode 100644 juick-notifications/src/main/java/com/juick/components/configuration/MPNSConfiguration.java create mode 100644 juick-notifications/src/main/java/com/juick/components/configuration/XMPPConfiguration.java (limited to 'juick-notifications/src/main/java/com/juick/components/configuration') diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/APNSConfiguration.java b/juick-notifications/src/main/java/com/juick/components/configuration/APNSConfiguration.java new file mode 100644 index 00000000..a4959497 --- /dev/null +++ b/juick-notifications/src/main/java/com/juick/components/configuration/APNSConfiguration.java @@ -0,0 +1,23 @@ +package com.juick.components.configuration; + +import com.notnoop.apns.APNS; +import com.notnoop.apns.ApnsService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Created by vital on 28.03.2017. + */ +@Configuration +public class APNSConfiguration { + @Value("${ios_pkcs12_file}") + private String pkcs12File; + @Value("${ios_pkcs12_password}") + private String pkcs12secret; + @Bean + public ApnsService apns() { + return APNS.newService().withCert(pkcs12File, pkcs12secret) + .withProductionDestination().build(); + } +} diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/GCMConfiguration.java b/juick-notifications/src/main/java/com/juick/components/configuration/GCMConfiguration.java new file mode 100644 index 00000000..96c7716f --- /dev/null +++ b/juick-notifications/src/main/java/com/juick/components/configuration/GCMConfiguration.java @@ -0,0 +1,21 @@ +package com.juick.components.configuration; + +import com.google.android.gcm.server.Endpoint; +import com.google.android.gcm.server.Sender; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Created by vital on 29.03.2017. + */ +@Configuration +public class GCMConfiguration { + @Value("${gcm_key}") + private String gcmKey; + + @Bean + public Sender GCMSender() { + return new Sender(gcmKey, Endpoint.GCM); + } +} diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/MPNSConfiguration.java b/juick-notifications/src/main/java/com/juick/components/configuration/MPNSConfiguration.java new file mode 100644 index 00000000..f849b159 --- /dev/null +++ b/juick-notifications/src/main/java/com/juick/components/configuration/MPNSConfiguration.java @@ -0,0 +1,16 @@ +package com.juick.components.configuration; + +import com.juick.components.MPNSClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Created by vital on 29.03.2017. + */ +@Configuration +public class MPNSConfiguration { + @Bean + public MPNSClient mpnsClient() { + return new MPNSClient(); + } +} diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java index 9c76b889..d6b4fa1e 100644 --- a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java +++ b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsAppConfiguration.java @@ -1,21 +1,21 @@ package com.juick.components.configuration; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.juick.components.CleanUp; import com.juick.components.Notifications; -import com.notnoop.apns.APNS; -import com.notnoop.apns.ApnsService; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.InterceptingClientHttpRequestFactory; import org.springframework.http.client.support.BasicAuthorizationInterceptor; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.client.RestTemplate; -import javax.inject.Inject; import java.util.Collections; import java.util.List; @@ -27,16 +27,16 @@ import java.util.List; @PropertySource("classpath:juick.conf") @ComponentScan(basePackages = {"com.juick.components.service"}) public class NotificationsAppConfiguration { - @Inject - private Environment env; + @Value("${api_user:'juick'}") + private String apiUser; + @Value("${api_password:'secret'}") + private String apiSecret; @Bean public RestTemplate rest() { RestTemplate rest = new RestTemplate(); List interceptors = Collections.singletonList( - new BasicAuthorizationInterceptor( - env.getProperty("api_user", "juick"), - env.getProperty("api_password", "secret"))); + new BasicAuthorizationInterceptor(apiUser, apiSecret)); rest.setRequestFactory(new InterceptingClientHttpRequestFactory(rest.getRequestFactory(), interceptors)); return rest; @@ -44,14 +44,19 @@ public class NotificationsAppConfiguration { @Bean public Notifications push() { - return new Notifications(env, rest()); + return new Notifications(); } @Bean - public ApnsService apns() { - return APNS.newService().withCert(env.getProperty("ios_pkcs12_file"), env.getProperty("ios_pkcs12_password")) - .withProductionDestination().build(); + public ObjectMapper jsonMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT); + mapper.registerModule(new Jdk8Module()); + return mapper; } + @Bean public CleanUp cleanUp() { return new CleanUp(); diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsInitializer.java b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsInitializer.java index 617f8686..2421f0e9 100644 --- a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsInitializer.java +++ b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsInitializer.java @@ -13,7 +13,10 @@ public class NotificationsInitializer extends AbstractAnnotationConfigDispatcher @Override protected Class[] getRootConfigClasses() { - return new Class[]{NotificationsAppConfiguration.class}; + return new Class[]{ + NotificationsAppConfiguration.class, APNSConfiguration.class, MPNSConfiguration.class, + GCMConfiguration.class, XMPPConfiguration.class + }; } @Override diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsMvcConfiguration.java b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsMvcConfiguration.java index f92b6a19..3d828832 100644 --- a/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsMvcConfiguration.java +++ b/juick-notifications/src/main/java/com/juick/components/configuration/NotificationsMvcConfiguration.java @@ -1,14 +1,13 @@ package com.juick.components.configuration; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; +import javax.inject.Inject; import java.util.List; /** @@ -17,16 +16,12 @@ import java.util.List; @Configuration @ComponentScan(basePackages = {"com.juick.components.controllers"}) public class NotificationsMvcConfiguration extends WebMvcConfigurationSupport { + @Inject + ObjectMapper jsonMapper; @Override protected void configureMessageConverters(List> converters) { - Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() - .serializationInclusion(JsonInclude.Include.NON_DEFAULT) - .serializationInclusion(JsonInclude.Include.NON_NULL) - .serializationInclusion(JsonInclude.Include.NON_ABSENT) - .serializationInclusion(JsonInclude.Include.NON_EMPTY); - MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(builder.build()); - converter.getObjectMapper().registerModule(new Jdk8Module()); + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(jsonMapper); converters.add(converter); super.configureMessageConverters(converters); } diff --git a/juick-notifications/src/main/java/com/juick/components/configuration/XMPPConfiguration.java b/juick-notifications/src/main/java/com/juick/components/configuration/XMPPConfiguration.java new file mode 100644 index 00000000..22b3d561 --- /dev/null +++ b/juick-notifications/src/main/java/com/juick/components/configuration/XMPPConfiguration.java @@ -0,0 +1,31 @@ +package com.juick.components.configuration; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import rocks.xmpp.core.session.Extension; +import rocks.xmpp.core.session.XmppSessionConfiguration; +import rocks.xmpp.extensions.component.accept.ExternalComponent; + +/** + * Created by vital on 29.03.2017. + */ +@Configuration +public class XMPPConfiguration { + @Value("${push_jid}") + private String pushJid; + @Value("${xmpp_host:'localhost'}") + private String xmppHost; + @Value("${xmpp_port:5347}") + private int xmppPort; + @Value("${push_xmpp_password:'secret'}") + private String xmppPushPassword; + + @Bean + public ExternalComponent xmpp() { + XmppSessionConfiguration configuration = XmppSessionConfiguration.builder() + .extensions(Extension.of(com.juick.Message.class)) + .build(); + return ExternalComponent.create(pushJid, xmppPushPassword, configuration, xmppHost, xmppPort); + } +} -- cgit v1.2.3