Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions src/main/java/ar/com/fernandospr/wns/WnsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import java.util.List;

import javax.ws.rs.client.Client;

import ar.com.fernandospr.wns.client.WnsClient;
import ar.com.fernandospr.wns.client.WnsJerseyClientFactory;
import ar.com.fernandospr.wns.client.WnsRawResourceBuilder;
import ar.com.fernandospr.wns.client.WnsResourceBuilder;
import ar.com.fernandospr.wns.client.WnsXmlResourceBuilder;
Expand All @@ -28,7 +31,7 @@ public class WnsService {
public WnsService(String sid, String clientSecret) {
this(sid, clientSecret, false);
}

/**
* @param sid
* @param clientSecret
Expand All @@ -37,30 +40,37 @@ public WnsService(String sid, String clientSecret) {
public WnsService(String sid, String clientSecret, WnsProxyProperties proxyProperties) {
this(sid, clientSecret, proxyProperties, false);
}

/**
* @param sid
* @param clientSecret
* @param proxyProperties
* @param logging true if System.out logging is needed
*/
public WnsService(String sid, String clientSecret, WnsProxyProperties proxyProperties, boolean logging) {
this.client = new WnsClient(sid, clientSecret,proxyProperties, logging);
this.xmlResourceBuilder = new WnsXmlResourceBuilder();
this.rawResourceBuilder = new WnsRawResourceBuilder();
public WnsService(String sid, String clientSecret, WnsProxyProperties proxyProperties, boolean logging) {
this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging, proxyProperties));
}

/**
* @param sid
* @param clientSecret
* @param logging true if System.out logging is needed
*/
public WnsService(String sid, String clientSecret, boolean logging) {
this.client = new WnsClient(sid, clientSecret, logging);
this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging));
}

/**
* @param sid
* @param clientSecret
* @param client the JAX RS client to use for WNS communication
*/
public WnsService(String sid, String clientSecret, Client client) {
this.client = new WnsClient(sid, clientSecret, client);
this.xmlResourceBuilder = new WnsXmlResourceBuilder();
this.rawResourceBuilder = new WnsRawResourceBuilder();
}

/**
* Pushes a tile to channelUri
* @param channelUri
Expand Down
74 changes: 9 additions & 65 deletions src/main/java/ar/com/fernandospr/wns/client/WnsClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,16 @@

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.ws.rs.client.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.Response;


import ar.com.fernandospr.wns.WnsProxyProperties;
import ar.com.fernandospr.wns.exceptions.WnsException;
import ar.com.fernandospr.wns.model.*;
import ar.com.fernandospr.wns.model.types.WnsNotificationType;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.fasterxml.jackson.jaxrs.xml.JacksonJaxbXMLProvider;
import org.glassfish.jersey.apache.connector.ApacheConnectorProvider;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap;


public class WnsClient {
private static final String SCOPE = "notify.windows.com";
Expand All @@ -32,71 +23,24 @@ public class WnsClient {
private WnsOAuthToken token;
private Client client;


public WnsClient(String sid, String clientSecret, boolean logging) {
this.sid = sid;
this.clientSecret = clientSecret;
this.client = createClient(logging);
this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging));
}

public WnsClient(String sid, String clientSecret, WnsProxyProperties proxyProps, boolean logging) {
this(sid, clientSecret, WnsJerseyClientFactory.createClient(logging, proxyProps));
}

public WnsClient(String sid, String clientSecret, Client client) {
this.sid = sid;
this.clientSecret = clientSecret;
this.client = createClient(logging, proxyProps);
this.client = client;
}

protected String getAuthenticationUri() {
return AUTHENTICATION_URI;
}

private static Client createClient(boolean logging) {
ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class);
Client client = ClientBuilder.newClient(clientConfig);

if (logging) {
LoggingFilter loggingFilter = new LoggingFilter(
Logger.getLogger(WnsClient.class.getName()), true);

client = client.register(loggingFilter);
}
return client;
}

private static Client createClient(boolean logging, WnsProxyProperties proxyProps) {
ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class)
.connectorProvider(new ApacheConnectorProvider());
setProxyCredentials(clientConfig, proxyProps);

Client client = ClientBuilder.newClient(clientConfig);
if (logging) {
LoggingFilter loggingFilter = new LoggingFilter(
Logger.getLogger(WnsClient.class.getName()), true);

client = client.register(loggingFilter);
}
return client;
}

private static void setProxyCredentials(ClientConfig clientConfig, WnsProxyProperties proxyProps) {
if (proxyProps != null) {
String proxyProtocol = proxyProps.getProtocol();
String proxyHost = proxyProps.getHost();
int proxyPort = proxyProps.getPort();
String proxyUser = proxyProps.getUser();
String proxyPass = proxyProps.getPass();

if ((proxyHost != null) && (!proxyHost.trim().isEmpty())) {
clientConfig.property(ClientProperties.PROXY_URI, proxyProtocol + "://" + proxyHost + ":" + proxyPort);
if (!proxyUser.trim().isEmpty()) {
clientConfig.property(ClientProperties.PROXY_PASSWORD, proxyPass);
clientConfig.property(ClientProperties.PROXY_USERNAME, proxyUser);
}
}

}

}

/**
* Based on <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465407.aspx">http://msdn.microsoft.com/en-us/library/windows/apps/hh465407.aspx</a>
*
Expand All @@ -105,7 +49,7 @@ private static void setProxyCredentials(ClientConfig clientConfig, WnsProxyPrope
public void refreshAccessToken() throws WnsException {
WebTarget target = client.target(getAuthenticationUri());

MultivaluedStringMap formData = new MultivaluedStringMap();
MultivaluedHashMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("grant_type", GRANT_TYPE_CLIENT_CREDENTIALS);
formData.add("client_id", this.sid);
formData.add("client_secret", this.clientSecret);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package ar.com.fernandospr.wns.client;

import java.util.logging.Logger;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

import org.glassfish.jersey.apache.connector.ApacheConnectorProvider;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.filter.LoggingFilter;

import ar.com.fernandospr.wns.WnsProxyProperties;

import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.fasterxml.jackson.jaxrs.xml.JacksonJaxbXMLProvider;

public class WnsJerseyClientFactory {
public static Client createClient(boolean logging) {
ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class);
Client client = ClientBuilder.newClient(clientConfig);

if (logging) {
LoggingFilter loggingFilter = new LoggingFilter(
Logger.getLogger(WnsClient.class.getName()), true);

client = client.register(loggingFilter);
}
return client;
}

public static Client createClient(boolean logging, WnsProxyProperties proxyProps) {
ClientConfig clientConfig = new ClientConfig(JacksonJaxbXMLProvider.class, JacksonJsonProvider.class)
.connectorProvider(new ApacheConnectorProvider());
setProxyCredentials(clientConfig, proxyProps);

Client client = ClientBuilder.newClient(clientConfig);
if (logging) {
LoggingFilter loggingFilter = new LoggingFilter(
Logger.getLogger(WnsClient.class.getName()), true);

client = client.register(loggingFilter);
}
return client;
}

private static void setProxyCredentials(ClientConfig clientConfig, WnsProxyProperties proxyProps) {
if (proxyProps != null) {
String proxyProtocol = proxyProps.getProtocol();
String proxyHost = proxyProps.getHost();
int proxyPort = proxyProps.getPort();
String proxyUser = proxyProps.getUser();
String proxyPass = proxyProps.getPass();

if ((proxyHost != null) && (!proxyHost.trim().isEmpty())) {
clientConfig.property(ClientProperties.PROXY_URI, proxyProtocol + "://" + proxyHost + ":" + proxyPort);
if (!proxyUser.trim().isEmpty()) {
clientConfig.property(ClientProperties.PROXY_PASSWORD, proxyPass);
clientConfig.property(ClientProperties.PROXY_USERNAME, proxyUser);
}
}

}

}
}