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
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,7 @@ android {
}

dependencies {
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'commons-io:commons-io:2.4'
}
4 changes: 3 additions & 1 deletion lightningjavaclient.iml
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,10 @@
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 22 Platform" jdkType="Android SDK" />
<orderEntry type="jdk" jdkName="Android API 22 Platform (1)" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="gson-2.3.1" level="project" />
<orderEntry type="library" exported="" name="commons-io-2.4" level="project" />
<orderEntry type="library" exported="" name="retrofit-1.9.0" level="project" />
</component>
</module>
206 changes: 202 additions & 4 deletions src/main/java/net/lightningsdk/LightningJavaClient/Lightning.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,30 @@
import android.content.Context;
import android.content.SharedPreferences;

import com.google.gson.Gson;

import org.apache.commons.io.IOUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.InputStream;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.zip.GZIPInputStream;

import retrofit.Callback;
import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Response;

/**
* !!
*
Expand All @@ -23,6 +36,10 @@ public class Lightning {

private static volatile Lightning instance;

/*private Lightning(){

};

public static Lightning getInstance() {
Lightning localInstance = instance;
if (localInstance == null) {
Expand All @@ -34,7 +51,7 @@ public static Lightning getInstance() {
}
}
return localInstance;
}
}*/

public static final boolean DEBUG = false;

Expand Down Expand Up @@ -108,7 +125,7 @@ protected void handleJSONError(JSONObject response, OnQueryResultListener onQuer
* Convert a complex JSON object into a query string.
*/
public String JSONToQueryString(JSONObject parameters) {
String res = null;
String res;
try {
StringBuilder sb = new StringBuilder();
SubJSONToQueryString(sb, "", parameters, true);
Expand Down Expand Up @@ -147,7 +164,7 @@ else if (value instanceof JSONArray) {
if(sb.length() > 0){
sb.append('&');
}
sb.append(URLEncoder.encode(prefix, "UTF-8") + "=" + URLEncoder.encode(value.toString(), "UTF-8"));
sb.append(URLEncoder.encode(prefix, "UTF-8")).append("=").append(URLEncoder.encode(value.toString(), "UTF-8"));
}
} catch (Exception e) {
e.printStackTrace();
Expand Down Expand Up @@ -240,7 +257,7 @@ protected String getContentString(String method, String urlString, JSONObject pa

protected byte[] getContentBytes(String method, String urlString, JSONObject parameters, String requiredContentTypePrefix) {
HttpURLConnection connection = setupConnection(method, urlString, parameters);
byte[] bytes = null;
byte[] bytes;
if (connection == null) {
return null;
}
Expand Down Expand Up @@ -372,4 +389,185 @@ public byte[] GETImage(String url, JSONObject parameters, OnQueryResultListener
public interface OnQueryResultListener{
void onError(final String title, final String message);
}

private LightningMethods mMethods;
private Lightning(String baseUrl){//Context context){
//mContext = context.getApplicationContext();
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(baseUrl)//mContext.getString(R.string.base_url))
.setLogLevel(RestAdapter.LogLevel.BASIC)
.setRequestInterceptor(requestInterceptor)
.build();
mMethods = restAdapter.create(LightningMethods.class);
}

public static Lightning getInstance(String baseUrl) {
Lightning localInstance = instance;
if (localInstance == null) {
synchronized (Lightning.class) {
localInstance = instance;
if (localInstance == null) {
instance = localInstance = new Lightning(baseUrl);
}
}
}
return localInstance;
}

public static Lightning getInstance() {
return instance;
}

RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Cookie", "session=" + sessionKey);
}
};

public LightningMethods getMethods() {
return mMethods;
}

public Builder prepareRequest(String apiMethod){
return new Builder()
.putPath(apiMethod);
}

public class Builder implements Serializable {
Map<String, String> params;
String path;

public Builder() {
params = new HashMap<>();
}

public Builder putPath(String path){
this.path = path;
return this;
}

public Builder putParam(String paramName, String paramValue){
params.put(paramName, paramValue);
return this;
}
public Builder putParam(String paramName, int paramValue){
params.put(paramName, String.valueOf(paramValue));
return this;
}
public Builder putAll(Map<String, String> params){
this.params.putAll(params);
return this;
}
public void getString(final LightningListener<String> listener)
{
instance.getMethods().get(path, params, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
listener.loadComplete(StreamToString.getString(response));
}

@Override
public void failure(RetrofitError retrofitError) {
listener.loadError(retrofitError.getMessage());
}
});
}

public <T> void get(final LightningListener<T> listener){
Type type = listener.getClass().getGenericInterfaces()[0];
final Class cls = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
instance.getMethods().get(path, params, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
Gson gson = new Gson();
String json = StreamToString.getString(response);
try {
Object t = gson.fromJson(json, cls);
listener.loadComplete((T) t);
} catch (final Exception ex) {
ex.printStackTrace();
listener.loadError(ex.getMessage());
}
}

@Override
public void failure(RetrofitError retrofitError) {
listener.networkError(retrofitError.getMessage());
}
});
}

public void get(final JsonResult listener){
instance.getMethods().get(path, params, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
String json = StreamToString.getString(response);
listener.loadComplete(json);
}

@Override
public void failure(RetrofitError retrofitError) {
listener.loadError(retrofitError.getMessage());
}
});
}

public void post(final JsonResult listener){
instance.getMethods().post(path, params, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
String json = StreamToString.getString(response);
listener.loadComplete(json);
}

@Override
public void failure(RetrofitError retrofitError) {
listener.loadError(retrofitError.getMessage());
}
});
}

/*public void get(final ErrorListener errorListener){
getInstance().getMethods().get(path, params, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
errorListener.loadComplete();
}

@Override
public void failure(RetrofitError retrofitError) {
errorListener.loadError(retrofitError.getMessage());
}
});
}

public void get(){
getInstance().getMethods().get(path, params, new Callback<Response>() {
@Override
public void success(Response response, Response response2) {
}

@Override
public void failure(RetrofitError retrofitError) {
}
});
}*/
}

public interface LightningListener<T> extends Serializable{
void loadComplete(T t);
void loadError(String message);
void networkError(String message);
}

/*public interface ErrorListener{
void loadComplete();
void loadError(String message);
}*/

public interface JsonResult{
void loadComplete(String json);
void loadError(String message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package net.lightningsdk.LightningJavaClient;

import java.util.Map;

import retrofit.Callback;
import retrofit.client.Response;
import retrofit.http.FieldMap;
import retrofit.http.FormUrlEncoded;
import retrofit.http.GET;
import retrofit.http.POST;
import retrofit.http.Path;
import retrofit.http.QueryMap;

/**
* Created by Сергей on 28.08.2015.
*/
public interface LightningMethods {

@FormUrlEncoded
@POST("/{path}")
void post(@Path("path") String path, @FieldMap Map<String, String> parameters, Callback<Response> callback);

@GET("/{path}")
void get(@Path("path") String path, @QueryMap Map<String, String> parameters, Callback<Response> callback);

/* These are alternative implementation */
/*@GET("/mindpt/image")
void getImage(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@GET("/api/mindpt/image")
void getApiImage(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/api/mindpt/image")
void postApiImage(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/api/mindpt/slides")
void postApiSlides(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/api/mindpt/purchase/android")
void postPurchase(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@GET("/api/mindpt/permission")
void getPermissions(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/api/mindpt/coupon")
void postCoupon(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/api/user")
void postUser(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@GET("/api/mindpt/tags")
void getTags(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/api/mindpt/report")
void postReport(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@GET("/api/mindpt/sessions")
void getSessionsList(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@GET("/api/mindpt/session")
void getSession(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@GET("/api/mindpt/session/image")
void getSessionImage(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/api/mindpt/session")
void postSession(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@GET("/mindpt/customize")
void getCustomized(@QueryMap Map<String, String> parameters, Callback<Response> callback);

@FormUrlEncoded
@POST("/mindpt/customize")
void postCustomized(@FieldMap Map<String, String> parameters, Callback<Response> callback);

@GET("/api/mindpt/promo_products")
void getPromo(@QueryMap Map<String, String> parameters, Callback<Response> callback);*/
}
Loading