Java tutorial
/* * This Source Code Form is subject to the terms of the Mozilla Public License, * v. 2.0. If a copy of the MPL was not distributed with this file, You can * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. * * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS * graphic logo is a trademark of OpenMRS Inc. */ package org.openmrs.mobile.api; import android.util.Base64; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.openmrs.mobile.application.OpenMRS; import org.openmrs.mobile.models.Observation; import org.openmrs.mobile.models.Resource; import org.openmrs.mobile.utilities.ApplicationConstants; import org.openmrs.mobile.utilities.ObservationDeserializer; import org.openmrs.mobile.utilities.ResourceSerializer; import java.io.IOException; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RestServiceBuilder { protected static final OpenMRS mOpenMRS = OpenMRS.getInstance(); private static String API_BASE_URL = mOpenMRS.getServerUrl() + ApplicationConstants.API.REST_ENDPOINT; private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); private static Retrofit.Builder builder; static { builder = new Retrofit.Builder().baseUrl(API_BASE_URL).addConverterFactory(buildGsonConverter()) .client((httpClient).build()); } public static <S> S createService(Class<S> serviceClass, String username, String password) { if (username != null && password != null) { String credentials = username + ":" + password; final String basic = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); httpClient.addInterceptor(new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request original = chain.request(); Request.Builder requestBuilder = original.newBuilder().header("Authorization", basic) .header("Accept", "application/json").method(original.method(), original.body()); Request request = requestBuilder.build(); return chain.proceed(request); } }); HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); httpClient.addInterceptor(logging); } OkHttpClient client = httpClient.build(); Retrofit retrofit = builder.client(client).build(); return retrofit.create(serviceClass); } public static <S> S createService(Class<S> serviceClass) { String username = mOpenMRS.getUsername(); String password = mOpenMRS.getPassword(); return createService(serviceClass, username, password); } private static GsonConverterFactory buildGsonConverter() { GsonBuilder gsonBuilder = new GsonBuilder(); Gson myGson = gsonBuilder.excludeFieldsWithoutExposeAnnotation() .registerTypeHierarchyAdapter(Resource.class, new ResourceSerializer()) .registerTypeHierarchyAdapter(Observation.class, new ObservationDeserializer()).create(); return GsonConverterFactory.create(myGson); } public static void changeBaseUrl(String newServerUrl) { API_BASE_URL = newServerUrl + ApplicationConstants.API.REST_ENDPOINT; builder = new Retrofit.Builder().baseUrl(API_BASE_URL).addConverterFactory(buildGsonConverter()); } }