package com.hokolinks.model;
import android.content.Context;
import com.hokolinks.utils.networking.Networking;
import com.hokolinks.utils.networking.async.HttpRequest;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public abstract class Route {
private String mRoute;
Route(String route) {
mRoute = route;
}
public String getRoute() {
return mRoute;
}
/**
* Splits the route format into components.
*
* @return A List of Route components.
*/
public List<String> getComponents() {
if (mRoute == null)
return null;
return new ArrayList<>(Arrays.asList(mRoute.split("/")));
}
public abstract void execute(Deeplink deeplink);
/**
* This function serves the purpose of communicating to the Hoko backend service that a given
* route is available on this application.
*
* @param token The Hoko API Token.
*/
public void post(String token, Context context) {
Networking.getNetworking().addRequest(
new HttpRequest(HttpRequest.HokoNetworkOperationType.POST, "routes", token,
getJSON(context).toString()));
}
/**
* Converts all the Route information into a JSONObject to be sent to the Hoko backend
* service.
*
* @return The JSONObject representation of Route.
*/
public JSONObject getJSON(Context context) {
try {
JSONObject root = new JSONObject();
JSONObject route = new JSONObject();
route.put("build", App.getVersionCode(context));
route.put("device", Device.getVendor() + " " + Device.getModel());
route.put("path", mRoute);
route.put("version", App.getVersion(context));
root.put("route", route);
return root;
} catch (JSONException e) {
return new JSONObject();
}
}
}