diff --git a/build.gradle b/build.gradle index d959962..76c4732 100644 --- a/build.gradle +++ b/build.gradle @@ -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' } diff --git a/lightningjavaclient.iml b/lightningjavaclient.iml index cd68ae7..3e067d2 100644 --- a/lightningjavaclient.iml +++ b/lightningjavaclient.iml @@ -87,8 +87,10 @@ - + + + \ No newline at end of file diff --git a/src/main/java/net/lightningsdk/LightningJavaClient/Lightning.java b/src/main/java/net/lightningsdk/LightningJavaClient/Lightning.java index d687601..4109a16 100644 --- a/src/main/java/net/lightningsdk/LightningJavaClient/Lightning.java +++ b/src/main/java/net/lightningsdk/LightningJavaClient/Lightning.java @@ -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; + /** * !! * @@ -23,6 +36,10 @@ public class Lightning { private static volatile Lightning instance; + /*private Lightning(){ + + }; + public static Lightning getInstance() { Lightning localInstance = instance; if (localInstance == null) { @@ -34,7 +51,7 @@ public static Lightning getInstance() { } } return localInstance; - } + }*/ public static final boolean DEBUG = false; @@ -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); @@ -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(); @@ -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; } @@ -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 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 params){ + this.params.putAll(params); + return this; + } + public void getString(final LightningListener listener) + { + instance.getMethods().get(path, params, new Callback() { + @Override + public void success(Response response, Response response2) { + listener.loadComplete(StreamToString.getString(response)); + } + + @Override + public void failure(RetrofitError retrofitError) { + listener.loadError(retrofitError.getMessage()); + } + }); + } + + public void get(final LightningListener listener){ + Type type = listener.getClass().getGenericInterfaces()[0]; + final Class cls = (Class) ((ParameterizedType) type).getActualTypeArguments()[0]; + instance.getMethods().get(path, params, new Callback() { + @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() { + @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() { + @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() { + @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() { + @Override + public void success(Response response, Response response2) { + } + + @Override + public void failure(RetrofitError retrofitError) { + } + }); + }*/ + } + + public interface LightningListener 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); + } } diff --git a/src/main/java/net/lightningsdk/LightningJavaClient/LightningMethods.java b/src/main/java/net/lightningsdk/LightningJavaClient/LightningMethods.java new file mode 100644 index 0000000..b43237a --- /dev/null +++ b/src/main/java/net/lightningsdk/LightningJavaClient/LightningMethods.java @@ -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 parameters, Callback callback); + + @GET("/{path}") + void get(@Path("path") String path, @QueryMap Map parameters, Callback callback); + + /* These are alternative implementation */ + /*@GET("/mindpt/image") + void getImage(@QueryMap Map parameters, Callback callback); + + @GET("/api/mindpt/image") + void getApiImage(@QueryMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/api/mindpt/image") + void postApiImage(@FieldMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/api/mindpt/slides") + void postApiSlides(@FieldMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/api/mindpt/purchase/android") + void postPurchase(@FieldMap Map parameters, Callback callback); + + @GET("/api/mindpt/permission") + void getPermissions(@QueryMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/api/mindpt/coupon") + void postCoupon(@FieldMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/api/user") + void postUser(@FieldMap Map parameters, Callback callback); + + @GET("/api/mindpt/tags") + void getTags(@QueryMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/api/mindpt/report") + void postReport(@FieldMap Map parameters, Callback callback); + + @GET("/api/mindpt/sessions") + void getSessionsList(@QueryMap Map parameters, Callback callback); + + @GET("/api/mindpt/session") + void getSession(@QueryMap Map parameters, Callback callback); + + @GET("/api/mindpt/session/image") + void getSessionImage(@QueryMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/api/mindpt/session") + void postSession(@FieldMap Map parameters, Callback callback); + + @GET("/mindpt/customize") + void getCustomized(@QueryMap Map parameters, Callback callback); + + @FormUrlEncoded + @POST("/mindpt/customize") + void postCustomized(@FieldMap Map parameters, Callback callback); + + @GET("/api/mindpt/promo_products") + void getPromo(@QueryMap Map parameters, Callback callback);*/ +} diff --git a/src/main/java/net/lightningsdk/LightningJavaClient/StreamToString.java b/src/main/java/net/lightningsdk/LightningJavaClient/StreamToString.java new file mode 100644 index 0000000..0c406a4 --- /dev/null +++ b/src/main/java/net/lightningsdk/LightningJavaClient/StreamToString.java @@ -0,0 +1,36 @@ +package net.lightningsdk.LightningJavaClient; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import retrofit.client.Response; + +/** + * Created by Сергей on 28.08.2015. + */ +public class StreamToString { + public static String getString(Response response){ + BufferedReader reader; + StringBuilder sb = new StringBuilder(); + try { + + reader = new BufferedReader(new InputStreamReader(response.getBody().in())); + + String line; + + try { + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + + return sb.toString(); + } +} diff --git a/src/main/java/net/lightningsdk/LightningJavaClient/User.java b/src/main/java/net/lightningsdk/LightningJavaClient/User.java index 69415fa..f7b9610 100644 --- a/src/main/java/net/lightningsdk/LightningJavaClient/User.java +++ b/src/main/java/net/lightningsdk/LightningJavaClient/User.java @@ -12,7 +12,7 @@ * @author Daniel Behrman macdabby@gmail.com, Sergey Mitrofanov goretz.m@gmail.com */ public class User { - protected JSONObject data; + /*protected JSONObject data; public User() { this.load(); @@ -24,7 +24,7 @@ public User() { * @param email * @param password * @return - */ + * public static User logIn (String email, String password) { User user = new User(); if (user.isLoggedIn()) { @@ -43,7 +43,7 @@ public static User logIn (String email, String password) { * @param email * @param password * @return - */ + * protected Boolean _logIn (String email, String password) { Boolean success = false; try { @@ -138,4 +138,4 @@ public void save() { // [defaults setObject:self.data forKey:@"Lightning.User"]; // [defaults synchronize]; } -} +*/} diff --git a/version.gradle b/version.gradle deleted file mode 100644 index 539ae63..0000000 --- a/version.gradle +++ /dev/null @@ -1 +0,0 @@ -version='1.0.0'