Skip to content

Commit

Permalink
Add opt outs (#12)
Browse files Browse the repository at this point in the history
Adds the ability to get and create opt out resources.

Includes some changes and improvements to the existing tests to increase coverage for regression protection.

Usage:

* Create an instance of the optout service

    ```java
    UserPassword userPassword = new UserPassword("YourUsername","YourPassword");
    BasicServiceFactory serviceFactory = ServiceFactory.createBasicAuthenticatingFactory(userPassword);

    OptOutService optOutService = serviceFactory.getOptOutService();
    ```

* Get single opt out

    ```java
    OptOutResponse optout = optOutService.getOptOut("b6a39581-9cfc-40ea-9b40-9320444cf49d");
    ```

* Get paged opt outs

    ```java
    OptOutCollectionResponse optouts = optOutService.getOptOuts(1, 15);
    ```

* Create an opt out

    ```java
    FromAddress fromAddress = new FromAddress();
    fromAddress.setPhoneNumber("99887744556322");

    OptOutRequest request = new OptOutRequestImpl();
    request.setAccountReference("EX006789");
    request.setFromAddress(fromAddress);

    OptOutResponse optout = optOutService.createOptOut(request);
    ```
  • Loading branch information
moretonb authored and EsendexDev committed May 9, 2016
1 parent 88e5187 commit f21b739
Show file tree
Hide file tree
Showing 51 changed files with 1,989 additions and 464 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Esendex Java SDK
================

[![Build Status](https://travis-ci.org/esendex/esendex-java-sdk.svg?branch=master)](https://travis-ci.org/esendex/esendex-java-sdk)

The Esendex Java SDK is an easy to use client for the Esendex REST API which you can use to integrate SMS and Voice messaging into any application built with the JVM.

It contains a set of services for sending SMS and Voice messages, receiving SMS, tracking the status of your sent messages and more.

Full details at http://developers.esendex.com/SDKs/Java-SDK
18 changes: 9 additions & 9 deletions esendex-java-sdk.iml
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.7" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.9" level="project" />
<orderEntry type="library" name="Maven: xmlpull:xmlpull:1.1.3.1" level="project" />
<orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
<orderEntry type="library" name="Maven: junit:junit:4.9" level="project" />
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
<orderEntry type="library" name="Maven: com.pyruby:java-stub-server:0.12" level="project" />
<orderEntry type="library" name="Maven: org.mortbay.jetty:jetty:6.1.26" level="project" />
<orderEntry type="library" name="Maven: org.mortbay.jetty:jetty-util:6.1.26" level="project" />
<orderEntry type="library" name="Maven: org.mortbay.jetty:servlet-api:2.5-20081211" level="project" />
<orderEntry type="library" name="Maven: javax.servlet:servlet-api:2.5" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.pyruby:java-stub-server:0.14" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mortbay.jetty:jetty:6.1.26" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mortbay.jetty:jetty-util:6.1.26" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mortbay.jetty:servlet-api:2.5-20081211" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: javax.servlet:servlet-api:2.5" level="project" />
</component>
</module>
43 changes: 37 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,31 @@
<properties>
<buildnumber>0</buildnumber>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<groupId>esendex-java-sdk</groupId>
<artifactId>esendex-java-sdk</artifactId>
<version>3.0.0</version>
<version>3.1.0</version>

<profiles>
<profile>
<id>doclint-java8-disable</id>
<activation>
<jdk>[1.8,)</jdk>
</activation>
<properties>
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>
</profiles>

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
Expand Down Expand Up @@ -60,7 +79,7 @@
<goal>jar</goal>
</goals>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
<additionalparam>${javadoc.opts}</additionalparam>
</configuration>
</execution>
</executions>
Expand All @@ -87,27 +106,39 @@
</resource>
</resources>
</build>

<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
<version>1.4.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.pyruby</groupId>
<artifactId>java-stub-server</artifactId>
<version>0.12</version>
<version>0.14</version>
<scope>test</scope>
</dependency>
</dependencies>

<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</reporting>
</project>
8 changes: 8 additions & 0 deletions src/main/java/esendex/sdk/java/ServiceFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,12 @@ public SurveysService getSurveysService() {
return new SurveysServiceImpl(authenticator);
}

/**
* Obtains a service suitable for operations on the opt-outs resource.
* @return the service
*/
public OptOutService getOptOutService() {
return new OptOutServiceImpl(authenticator);
}

}
3 changes: 3 additions & 0 deletions src/main/java/esendex/sdk/java/http/HttpQuery.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ public class HttpQuery {
public static final Key<String> ACCOUNT_REFERENCE
= new Key<String>("accountreference");

public static final Key<String> FROM
= new Key<String>("from");

public static final String ACCOUNT_FILTER = "account";


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,29 @@

public class ContactResponseAssembler {

public ContactResponse createResponse(ContactDto dto) {
public ContactResponse createResponse(ContactDto dto) {

ContactResponseImpl resp = new ContactResponseImpl();
ContactResponseImpl resp = new ContactResponseImpl();

resp.setFirstName(dto.getFirstname());
resp.setId(dto.getId());
resp.setFirstName(dto.getFirstname());
resp.setId(dto.getId());
resp.setAccountReference(dto.getAccountReference());
resp.setLastName(dto.getLastname());
resp.setMobileNumber(dto.getPhoneNumber());
resp.setQuickName(dto.getQuickname());
resp.setLastName(dto.getLastname());
resp.setMobileNumber(dto.getPhoneNumber());
resp.setQuickName(dto.getQuickname());

return resp;
}

return resp;
}
public List<ContactResponse> createCollectionResponse(ContactCollectionDto col) {

public List<ContactResponse> createCollectionResponse(ContactCollectionDto col) {
List<ContactResponse> list = new ArrayList<>();
if (col != null) {
for (ContactDto dto : col.getContacts()) {
list.add(createResponse(dto));
}
}

List<ContactResponse> list = new ArrayList<ContactResponse>();
if (col != null) {
for (ContactDto dto : col.getContacts()) {
list.add(createResponse(dto));
}
}
return list;
}
return list;
}
}
10 changes: 10 additions & 0 deletions src/main/java/esendex/sdk/java/model/domain/impl/FromAddress.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package esendex.sdk.java.model.domain.impl;

public class FromAddress {

private String phoneNumber;

public String getPhoneNumber() { return phoneNumber; }

public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package esendex.sdk.java.model.domain.impl;

import esendex.sdk.java.model.domain.response.OptOutCollectionResponse;
import esendex.sdk.java.model.domain.response.OptOutResponse;

import java.util.Iterator;
import java.util.List;

public class OptOutCollectionResponseImpl extends PageableImpl implements OptOutCollectionResponse {

private List<OptOutResponse> optouts;

public OptOutCollectionResponseImpl(List<OptOutResponse> optouts) {
this.optouts = optouts;
}

public List<OptOutResponse> getOptOuts() {
return optouts;
}

public void setOptouts(List<OptOutResponse> optouts) {
this.optouts = optouts;
}

@Override
public Iterator<OptOutResponse> iterator() {
return null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package esendex.sdk.java.model.domain.impl;

import esendex.sdk.java.model.domain.request.OptOutRequest;
import esendex.sdk.java.model.transfer.optout.FromAddressDto;
import esendex.sdk.java.model.transfer.optout.OptOutRequestDto;

public class OptOutRequestAssembler {

public OptOutRequestDto createOptOutDto(OptOutRequest optOutRequest) {

OptOutRequestDto dto = new OptOutRequestDto();

FromAddressDto fromAddress = new FromAddressDto();
fromAddress.setPhoneNumber(optOutRequest.getFromAddress().getPhoneNumber());

dto.setFromAddress(fromAddress);
dto.setAccountReference(optOutRequest.getAccountReference());

return dto;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package esendex.sdk.java.model.domain.impl;

import esendex.sdk.java.model.domain.request.OptOutRequest;

public class OptOutRequestImpl implements OptOutRequest {
private String accountReference;
private FromAddress fromAddress;

@Override
public String getAccountReference() {
return accountReference;
}

@Override
public void setAccountReference(String accountReference) {
this.accountReference = accountReference;
}

@Override
public FromAddress getFromAddress() {
return fromAddress;
}

@Override
public void setFromAddress(FromAddress fromAddress) {
this.fromAddress = fromAddress;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package esendex.sdk.java.model.domain.impl;

import esendex.sdk.java.model.domain.response.OptOutCollectionResponse;
import esendex.sdk.java.model.domain.response.OptOutResponse;
import esendex.sdk.java.model.transfer.optout.OptOutCollectionResponseDto;
import esendex.sdk.java.model.transfer.optout.OptOutResponseDto;

import java.util.ArrayList;
import java.util.List;

public class OptOutResponseAssembler {

public OptOutResponse createResponse(OptOutResponseDto dto) {

OptOutResponseImpl response = new OptOutResponseImpl();

response.setId(dto.getId());
response.setAccountReference(dto.getAccountReference());
response.setReceivedAt(dto.getReceivedAt());

FromAddress from = new FromAddress();
from.setPhoneNumber(dto.getFrom().getPhoneNumber());
response.setFrom(from);

return response;
}

public OptOutCollectionResponse createCollectionResponse(OptOutCollectionResponseDto col) {

List<OptOutResponse> optouts = new ArrayList<>();
if (col.getOptouts() != null) {
for (OptOutResponseDto dto : col.getOptouts()) {
optouts.add(this.createResponse(dto));
}
}

OptOutCollectionResponseImpl response = new OptOutCollectionResponseImpl(optouts);
response.setCount(col.getCount());
response.setStartIndex(col.getStartindex());
response.setTotalCount(col.getTotalcount());

return response;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package esendex.sdk.java.model.domain.impl;

import esendex.sdk.java.model.domain.response.OptOutResponse;

import java.util.Date;

public class OptOutResponseImpl implements OptOutResponse {

private String id;
private Date receivedAt;
private String accountReference;
private FromAddress from;

public OptOutResponseImpl() { }

public String getId() {
return id;
}

public Date getReceivedAt() { return receivedAt; }

public String getAccountReference() { return accountReference; }

public FromAddress getFrom() { return from; }

void setId(String id) {
this.id = id;
}

void setReceivedAt(Date receivedAt) {
this.receivedAt = receivedAt;
}

void setAccountReference(String accountReference) { this.accountReference = accountReference; }

void setFrom(FromAddress from) { this.from = from; }
}
Loading

0 comments on commit f21b739

Please sign in to comment.