Skip to content
This repository was archived by the owner on Aug 23, 2024. It is now read-only.

Commit 2428c07

Browse files
author
Stan Wijckmans
committed
Merge branch 'release/1.0.0.2' into 'develop'
Release/1.0.0.2 See merge request !3
2 parents ca138d4 + 8575b9c commit 2428c07

25 files changed

+529
-297
lines changed

rest/build.gradle

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ android {
88
defaultConfig {
99
minSdkVersion 16
1010
targetSdkVersion 25
11-
versionCode 1
12-
versionName "1.0.0.0"
11+
versionCode 3
12+
versionName "1.0.1"
1313
}
1414

1515
lintOptions {
16-
abortOnError false
16+
disable 'InvalidPackage'
1717
}
1818
}
1919

2020
dependencies {
21-
compile 'be.stannieman:commonservices:1.0.0.3'
21+
compile 'be.stannieman:commonservices:1.0.1.0'
2222
compile 'com.android.volley:volley:1.0.0'
23-
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.6'
23+
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.7'
2424
}
2525

2626
task createJavaDoc(type: Javadoc) {
@@ -34,14 +34,20 @@ task createJavaDocJar(type: Jar, dependsOn: createJavaDoc) {
3434
from createJavaDoc.destinationDir
3535
}
3636

37+
task createSourcesJar(type: Jar) {
38+
from android.sourceSets.main.java.srcDirs
39+
classifier = 'sources'
40+
}
41+
3742
publishing {
3843
publications {
3944
aar(MavenPublication) {
4045
groupId 'be.stannieman'
4146
artifactId 'rest'
42-
version '1.0.0.0'
47+
version '1.0.1'
4348
artifact "$buildDir\\outputs\\aar\\signed-${project.getName()}-release.aar"
4449
artifact createJavaDocJar
50+
artifact createSourcesJar
4551

4652
//generate pom nodes for dependencies
4753
pom.withXml {

rest/src/main/java/stannieman/rest/BasicAuthRestClient.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import stannieman.rest.models.ErrorResponseDataBase;
1414
import stannieman.rest.models.RequestProperties;
1515
import stannieman.rest.models.RestResult;
16-
import stannieman.rest.models.SuccessResponseDataBase;
1716

1817
/**
1918
* A simple REST client that supports basic authentication.
@@ -24,73 +23,73 @@ public final class BasicAuthRestClient extends RestClientBase {
2423
private static final String BasicAuthHeaderValuePrefix = "Basic ";
2524
private final Map<String, String> authHeader;
2625

27-
BasicAuthRestClient(ObjectMapper objectMapper, RequestQueue requestQueue, Scheme schema, String host, int port, String apiBasePath, String endpointPath, long timeout, String userName, String password) {
26+
BasicAuthRestClient(ObjectMapper objectMapper, RequestQueue requestQueue, Scheme schema, String host, int port, String apiBasePath, String endpointPath, long timeout, String username, String password) {
2827
super(objectMapper, requestQueue, schema, host, port, apiBasePath, endpointPath, timeout);
29-
authHeader = getBasicAuthHeader(userName, password);
28+
authHeader = getBasicAuthHeader(username, password);
3029
}
3130

3231
@Override
33-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> get(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
32+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> get(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
3433
return doRequestWithAuthHeader(Request.Method.GET, requestProperties);
3534
}
3635

3736
@Override
38-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> post(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
37+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> post(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
3938
return doRequestWithAuthHeader(Request.Method.POST, requestProperties);
4039
}
4140

4241
@Override
43-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> put(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
42+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> put(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
4443
return doRequestWithAuthHeader(Request.Method.PUT, requestProperties);
4544
}
4645

4746
@Override
48-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> patch(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
47+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> patch(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
4948
return doRequestWithAuthHeader(Request.Method.PATCH, requestProperties);
5049
}
5150

5251
@Override
53-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> void getAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
52+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> void getAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
5453
doRequestWithAuthHeaderAsync(Request.Method.GET, requestProperties, requestResponseListener);
5554
}
5655

5756
@Override
58-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> void postAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
57+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> void postAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
5958
doRequestWithAuthHeaderAsync(Request.Method.POST, requestProperties, requestResponseListener);
6059
}
6160

6261
@Override
63-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> void putAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
62+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> void putAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
6463
doRequestWithAuthHeaderAsync(Request.Method.PUT, requestProperties, requestResponseListener);
6564
}
6665

6766
@Override
68-
public <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> void patchAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
67+
public <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> void patchAsync(RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
6968
doRequestWithAuthHeaderAsync(Request.Method.PATCH, requestProperties, requestResponseListener);
7069
}
7170

72-
private <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> doRequestWithAuthHeader(int method, RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
71+
private <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> doRequestWithAuthHeader(int method, RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties) {
7372
return doRequest(method, requestProperties, requestProperties.getQueryParameters(), getHeadersWithAuthHeader(requestProperties.getHeaders()));
7473
}
7574

76-
private <SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> void doRequestWithAuthHeaderAsync(int method, RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
75+
private <SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> void doRequestWithAuthHeaderAsync(int method, RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
7776
new DoRequestWithAuthHeaderAsyncTask<>(method, requestProperties, requestResponseListener).execute();
7877
}
7978

80-
private class DoRequestWithAuthHeaderAsyncTask<SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> extends DoRequestAsyncTaskBase<SuccessResponseDataType, ErrorResponseDataType> {
79+
private class DoRequestWithAuthHeaderAsyncTask<SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> extends DoRequestAsyncTaskBase<SuccessResponseDataType, ErrorResponseDataType> {
8180
DoRequestWithAuthHeaderAsyncTask(int method, RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties, IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener) {
8281
super(method, requestProperties, requestResponseListener);
8382
}
8483

8584
@Override
86-
protected ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> doInBackground(Void... voids) {
85+
protected IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> doInBackground(Void... voids) {
8786
return doRequestWithAuthHeader(method, requestProperties);
8887
}
8988
}
9089

91-
private Map<String, String> getBasicAuthHeader(String userName, String password) {
90+
private Map<String, String> getBasicAuthHeader(String username, String password) {
9291
Map<String, String> basicAuthHeader = new HashMap<>();
93-
basicAuthHeader.put(AuthHeaderKey, BasicAuthHeaderValuePrefix + Base64.encodeToString(String.format("%s:%s", userName, password).getBytes(), Base64.NO_WRAP));
92+
basicAuthHeader.put(AuthHeaderKey, BasicAuthHeaderValuePrefix + Base64.encodeToString(String.format("%s:%s", username, password).getBytes(), Base64.NO_WRAP));
9493
return basicAuthHeader;
9594
}
9695

rest/src/main/java/stannieman/rest/BasicAuthRestClientFactory.java

Lines changed: 23 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,70 +2,40 @@
22

33
import android.content.Context;
44

5-
import com.android.volley.RequestQueue;
6-
import com.android.volley.toolbox.Volley;
7-
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import stannieman.rest.models.BasicAuthRestClientFactoryConfig;
86

97
/**
108
* Factory that produces BasicAuthRestClients.
119
*/
12-
public final class BasicAuthRestClientFactory implements IRestClientFactory {
13-
private final ObjectMapper objectMapper;
14-
private final RequestQueue requestQueue;
15-
private final Scheme scheme;
16-
private final String host;
17-
private final int port;
18-
private final String apiBasePath;
19-
private final long timeout;
20-
21-
private final String userName;
22-
private final String password;
10+
public final class BasicAuthRestClientFactory extends RestClientFactoryBase implements IBasicAuthRestClientFactory {
11+
private String username;
12+
private String password;
2313

2414
/**
25-
* Constructor to create a factory with an existing object mapper and request queue.
26-
* It is recommended to have only one object mapper and request queue in your application,
27-
* so if you have more than one REST client factory you should to create them yourself
28-
* and use this constructor to use the existing instances.
29-
* @param objectMapper object mapper to map objects from and to JSON
30-
* @param requestQueue Volley RequestQueue for performing requests
31-
* @param scheme URI schema
32-
* @param host REST server host
33-
* @param port REST server port
34-
* @param apiBasePath base path of the REST api
35-
* @param timeout timeout for the requests
36-
* @param userName user name for basic authentication
37-
* @param password password for basic authentication
15+
* Constructor to create a factory.
16+
* @param context application context
3817
*/
39-
public BasicAuthRestClientFactory(ObjectMapper objectMapper, RequestQueue requestQueue, Scheme scheme, String host, int port, String apiBasePath, long timeout, String userName, String password) {
40-
this.objectMapper = objectMapper;
41-
this.requestQueue = requestQueue;
42-
this.scheme = scheme;
43-
this.host = host;
44-
this.port = port;
45-
this.apiBasePath = apiBasePath;
46-
this.timeout = timeout;
47-
48-
this.userName = userName;
49-
this.password = password;
18+
public BasicAuthRestClientFactory(Context context) {
19+
super(context);
5020
}
5121

52-
/**
53-
* Constructor to create a factory without an existing object mapper and request queue.
54-
* A new object mapper and request queue will be created for performing the REST calls.
55-
* @param scheme URI schema
56-
* @param host REST server host
57-
* @param port REST server port
58-
* @param apiBasePath base path of the REST api
59-
* @param timeout timeout for the requests
60-
* @param userName user name for basic authentication
61-
* @param password password for basic authentication
62-
*/
63-
public BasicAuthRestClientFactory(Context context, Scheme scheme, String host, int port, String apiBasePath, long timeout, String userName, String password) {
64-
this(new ObjectMapper(), Volley.newRequestQueue(context), scheme, host, port, apiBasePath, timeout, userName, password);
22+
@Override
23+
public IRestClient getRestClient(String endpointPath) {
24+
configLock.lock();
25+
IRestClient client = new BasicAuthRestClient(objectMapper, requestQueue, scheme, host, port, apiBasePath, endpointPath, timeout, username, password);
26+
configLock.unlock();
27+
28+
return client;
6529
}
6630

6731
@Override
68-
public IRestClient getRestClient(String endpointPath) {
69-
return new BasicAuthRestClient(objectMapper, requestQueue, scheme, host, port, apiBasePath, endpointPath, timeout, userName, password);
32+
public void loadConfig(BasicAuthRestClientFactoryConfig config) {
33+
configLock.lock();
34+
35+
super.loadConfig(config);
36+
username = config.getUsername();
37+
password = config.getPassword();
38+
39+
configLock.unlock();
7040
}
7141
}

rest/src/main/java/stannieman/rest/DoRequestAsyncTaskBase.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
import android.os.AsyncTask;
44

5-
import stannieman.commonservices.models.ServiceResult;
5+
import stannieman.commonservices.models.IHasDataAndSuccessState;
66
import stannieman.rest.models.ErrorResponseDataBase;
77
import stannieman.rest.models.RequestProperties;
88
import stannieman.rest.models.RestResult;
9-
import stannieman.rest.models.SuccessResponseDataBase;
109

11-
abstract class DoRequestAsyncTaskBase<SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> extends AsyncTask<Void, Void, ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>>> {
10+
abstract class DoRequestAsyncTaskBase<SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> extends AsyncTask<Void, Void, IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>>> {
1211
final int method;
1312
private final IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType> requestResponseListener;
1413
final RequestProperties<SuccessResponseDataType, ErrorResponseDataType> requestProperties;
@@ -20,7 +19,7 @@ abstract class DoRequestAsyncTaskBase<SuccessResponseDataType extends SuccessRes
2019
}
2120

2221
@Override
23-
protected void onPostExecute(ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> result) {
22+
protected void onPostExecute(IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> result) {
2423
requestResponseListener.onRequestResponse(result);
2524
}
2625
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package stannieman.rest;
2+
3+
import stannieman.rest.models.BasicAuthRestClientFactoryConfig;
4+
5+
public interface IBasicAuthRestClientFactory extends IRestClientFactory {
6+
void loadConfig(BasicAuthRestClientFactoryConfig config);
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package stannieman.rest;
2+
3+
import stannieman.rest.models.KeyAuthRestClientFactoryConfig;
4+
5+
public interface IKeyAuthRestClientFactory extends IRestClientFactory {
6+
void loadConfig(KeyAuthRestClientFactoryConfig config);
7+
}
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
package stannieman.rest;
22

3-
import stannieman.commonservices.models.ServiceResult;
3+
import stannieman.commonservices.models.IHasDataAndSuccessState;
44
import stannieman.rest.models.ErrorResponseDataBase;
5-
import stannieman.rest.models.SuccessResponseDataBase;
65
import stannieman.rest.models.RestResult;
76

87
/**
98
* Interface defining a listener for the response of a REST call.
109
* @param <SuccessResponseDataType> response data type for a successful request
1110
* @param <ErrorResponseDataType> response data type for an unsuccessful request
1211
*/
13-
public interface IRequestResponseListener<SuccessResponseDataType extends SuccessResponseDataBase, ErrorResponseDataType extends ErrorResponseDataBase> {
12+
public interface IRequestResponseListener<SuccessResponseDataType, ErrorResponseDataType extends ErrorResponseDataBase> {
1413
/**
1514
* Called after an asynchronous REST call is finishes.
16-
* @param result ServiceResult instance containing a RestResult instance which in turn contains the resulting info and data of the performed REST call
15+
* @param result IHasDataAndSuccessState instance containing a RestResult instance which in turn contains the resulting info and data of the performed REST call
1716
*/
18-
void onRequestResponse(ServiceResult<RestResult<SuccessResponseDataType, ErrorResponseDataType>> result);
17+
void onRequestResponse(IHasDataAndSuccessState<RestResult<SuccessResponseDataType, ErrorResponseDataType>> result);
1918
}

0 commit comments

Comments
 (0)