Skip to content

Instantly share code, notes, and snippets.

@jlmalone
Last active October 15, 2016 09:43
Show Gist options
  • Save jlmalone/8074fb9eaeb60694874f5506ed539b04 to your computer and use it in GitHub Desktop.
Save jlmalone/8074fb9eaeb60694874f5506ed539b04 to your computer and use it in GitHub Desktop.
package com.example.retrofit;
import java.lang.annotation.Annotation;
import at.rags.morpheus.Morpheus;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.ResponseBody;
import retrofit.Converter;
import java.lang.reflect.Type;
/**
* Created by josephmalone on 16-08-17.
*/
public class MorpheusJSONAPIConverterFactory extends Converter.Factory
{
private final Morpheus morpheus;
/**
* Create an instance using {@code gson} for conversion. Encoding to JSON and
* decoding from JSON (when no charset is specified by a header) will use UTF-8.
*/
public static MorpheusJSONAPIConverterFactory create(Morpheus morpheus)
{
return new MorpheusJSONAPIConverterFactory(morpheus);
}
public MorpheusJSONAPIConverterFactory(Morpheus morpheus)
{
if (morpheus == null)
{
throw new NullPointerException("gson == null");
}
this.morpheus = morpheus;
}
@Override
public Converter<ResponseBody, ?> fromResponseBody(Type type, Annotation[] annotations)
{
return new MorpheusJSONAPIResponseBodyConverter(morpheus);
}
@Override
public Converter<?, RequestBody> toRequestBody(Type type, Annotation[] annotations)
{
Gson gson = new Gson();
TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
return new GsonRequestBodyConverter<>(gson, adapter);
}
}
package com.example.retrofit;
import at.rags.morpheus.JsonApiObject;
import at.rags.morpheus.Morpheus;
import at.rags.morpheus.Resource;
import com.crittercism.app.Crittercism;
import com.example.logging.Logger;
import com.example.retrofit.model.morpheus.Posts;
import com.example.util.ArrayUtil;
import com.squareup.okhttp.ResponseBody;
import retrofit.Converter;
import java.io.IOException;
import java.util.ArrayList;
/**
* Created by josephmalone on 16-08-17.
*/
public class MorpheusJSONAPIResponseBodyConverter<T> implements Converter<ResponseBody, T>
{
private static final String TAG =MorpheusJSONAPIResponseBodyConverter.class.getSimpleName() ;
private Morpheus morpheus;
public MorpheusJSONAPIResponseBodyConverter(Morpheus morpheus)
{
this.morpheus = morpheus;
}
@Override
public T convert(ResponseBody value) throws IOException
{
try
{
String s = value.string();
JsonApiObject jo = morpheus.parse(s);
ArrayList<Posts> postsAr = new ArrayList<>();
try
{
for (Resource r : jo.getResources())
{
try
{
if (r instanceof Posts)
{
Posts p = (Posts) r;
postsAr.add(p);
}
}catch (Exception exe)
{
Logger.v(TAG, "parsing exception on a post");
}
}
Logger.v(TAG, "Posts Size: rrr" + postsAr.size());
if (!ArrayUtil.isNullOrEmpty(postsAr))
{
return (T)postsAr;
}
}
catch (Exception b)
{
Logger.v(TAG, "exception "+b.getMessage());
}
try
{
return (T) jo.getResource();
}
catch (ClassCastException | NullPointerException cce)
{
Logger.v(TAG, "exception in resource cast "+cce.getMessage());
}
try
{
return (T) jo.getResources();
}
catch (ClassCastException | NullPointerException cce)
{
Logger.v(TAG, " cast from resources exception "+cce.getMessage());
}
}
catch (Exception e)
{
Logger.v(TAG,"Exception caught "+e.getMessage());
Crittercism.logHandledException(e);
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment