package com.apigee.sdk;
import android.content.Context;
import android.util.Log;
import com.apigee.sdk.apm.android.ApigeeMonitoringClient;
import com.apigee.sdk.apm.android.AppMon;
import com.apigee.sdk.apm.android.MonitoringOptions;
import com.apigee.sdk.data.client.ApigeeDataClient;
/**
* The ApigeeClient serves as the entry point for initializing the Apigee client SDK.
* See our SDK install guide for more information.
*
* @author ApigeeCorporation
* @see <a href="http://apigee.com/docs/app-services/content/installing-apigee-sdk-android">Apigee SDK install guide</a>
*/
public class ApigeeClient {
/**
* Default tag used for logging
*/
public static final String LOGGING_TAG = "APIGEE_CLIENT";
/**
* Most current version of the Apigee Android SDK
*/
public static final String SDK_VERSION = "2.0.14";
/**
* Platform type of this SDK
*/
public static final String SDK_TYPE = "Android";
private ApigeeDataClient dataClient;
private ApigeeMonitoringClient monitoringClient;
private AppIdentification appIdentification;
/**
* Instantiate client for a specific app.
*
* @param organizationId the organization id or name
* @param applicationId the application id or name
* @param context the Android context
*/
public ApigeeClient(String organizationId, String applicationId, Context context) {
this(organizationId,applicationId,null,null,context);
}
/**
* Instantiate client for a specific app, and specify options for App Monitoring.
*
* @param organizationId the organization id or name
* @param applicationId the application id or name
* @param monitoringOptions the options for application monitoring
* @param context the Android context
*/
public ApigeeClient(String organizationId, String applicationId, MonitoringOptions monitoringOptions, Context context) {
this(organizationId,applicationId,null,monitoringOptions,context);
}
/**
* Instantiate client for a specific app, and specify an alternative baseURL for requests.
*
* @param organizationId the organization id or name
* @param applicationId the application id or name
* @param baseURL the base URL to use for server communications
* @param context the Android context
*/
public ApigeeClient(String organizationId, String applicationId, String baseURL, Context context) {
this(organizationId,applicationId,baseURL,null,context);
}
/**
* Instantiate client for a specific app, with an alternative baseURL for requests and options for
* App Monitoring.
*
* @param organizationId the organization id or name
* @param applicationId the application id or name
* @param baseURL the base URL to use for server communications
* @param monitoringOptions the options for application monitoring
* @param context the Android context
*/
public ApigeeClient(String organizationId, String applicationId, String baseURL, MonitoringOptions monitoringOptions, Context context) {
appIdentification = new AppIdentification(organizationId,applicationId);
boolean urlSpecified = false;
if ((baseURL != null) && (baseURL.length() > 0)) {
urlSpecified = true;
appIdentification.setBaseURL(baseURL);
} else {
appIdentification.setBaseURL(ApigeeDataClient.PUBLIC_API_URL);
}
dataClient = new ApigeeDataClient(organizationId,applicationId,null,context);
Log.d(LOGGING_TAG,"dataClient created");
if (urlSpecified) {
dataClient.setApiUrl(baseURL);
}
if ((monitoringOptions != null) && monitoringOptions.getMonitoringEnabled()) {
monitoringClient = AppMon.initialize(appIdentification, dataClient, context, monitoringOptions);
if( monitoringClient != null ) {
Log.d(LOGGING_TAG,"monitoringClient created");
ApigeeDataClient.setLogger(monitoringClient.getLogger());
} else {
Log.d(LOGGING_TAG,"unable to create monitoringClient");
ApigeeDataClient.setLogger(new DefaultAndroidLog());
}
} else {
monitoringClient = AppMon.initialize(appIdentification, dataClient, context, monitoringOptions);
if( monitoringClient != null ) {
Log.d(LOGGING_TAG,"monitoringClient created");
ApigeeDataClient.setLogger(monitoringClient.getLogger());
} else {
Log.d(LOGGING_TAG,"unable to create monitoringClient");
ApigeeDataClient.setLogger(new DefaultAndroidLog());
}
}
}
/**
* Retrieve the instance of DataClient to use for data operations.
*
* @return DataClient object
*/
public ApigeeDataClient getDataClient() {
return dataClient;
}
/**
* Retrieve the instance of MonitoringClient to use for App Monitoring operations.
*
* @return MonitoringClient object
*/
public ApigeeMonitoringClient getMonitoringClient() {
return monitoringClient;
}
/**
* Retrieve the attributes that collectively identify the current application.
*
* @return AppIdentification object
*/
public AppIdentification getAppIdentification() {
return appIdentification;
}
}