/*
MessageUtils.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.message;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import org.deviceconnect.android.BuildConfig;
import org.deviceconnect.message.DConnectMessage;
import org.deviceconnect.message.DConnectMessage.ErrorCode;
import org.deviceconnect.message.intent.message.IntentDConnectMessage;
import java.util.logging.Logger;
/**
* Device Connect メッセージユーティリティクラス.
* @author NTT DOCOMO, INC.
*/
public final class MessageUtils {
/**
* ロガー.
*/
private static Logger sLogger = Logger.getLogger("org.deviceconnect.dplugin");
/**
* コンストラクタ.
*/
private MessageUtils() {
}
/**
* actionにEventを設定したIntentを生成する.
*
* @return イベントメッセージ用のIntent
*/
public static Intent createEventIntent() {
Intent intent = new Intent(IntentDConnectMessage.ACTION_EVENT);
return intent;
}
/**
* レスポンスインテントを生成する.
*
* @param request リクエストパラメータ
* @return レスポンスインテント
*/
public static Intent createResponseIntent(final Intent request) {
return createResponseIntent(request.getExtras(), null);
}
/**
* レスポンスインテントを生成する.
*
* @param request リクエストパラメータ
* @param response レスポンスパラメータ
* @return レスポンスインテント
*/
public static Intent createResponseIntent(final Bundle request, final Bundle response) {
Intent intent;
if (request == null) {
sLogger.warning("could not create response intent, request is null.");
throw new NullPointerException("request is null.");
}
intent = new Intent(IntentDConnectMessage.ACTION_RESPONSE);
intent.putExtra(DConnectMessage.EXTRA_RESULT, DConnectMessage.RESULT_ERROR);
if (response != null) {
intent.putExtras(response);
}
ComponentName receiver = request.getParcelable(DConnectMessage.EXTRA_RECEIVER);
if (receiver != null) {
intent.setComponent(receiver);
} else {
sLogger.warning("request does not have receiver.");
}
int requestCode = request.getInt(DConnectMessage.EXTRA_REQUEST_CODE, Integer.MIN_VALUE);
if (requestCode != Integer.MIN_VALUE) {
intent.putExtra(DConnectMessage.EXTRA_REQUEST_CODE, requestCode);
}
if (BuildConfig.DEBUG) {
intent.putExtra("debug", "DevicePlugin");
}
return intent;
}
/**
* リクエストからサービスIDを取得する.
*
* @param request リクエストパラメータ
* @return サービスID
*/
public static String getServiceID(final Intent request) {
String serviceId = request.getExtras().getString(DConnectMessage.EXTRA_SERVICE_ID);
return serviceId;
}
/**
* リクエストからプロファイル名を取得する.
*
* @param request リクエストパラメータ
* @return プロファイル名
*/
public static String getProfile(final Intent request) {
String profile = request.getExtras().getString(DConnectMessage.EXTRA_PROFILE);
return profile;
}
/**
* リクエストからインターフェース名を取得する.
*
* @param request リクエストパラメータ
* @return インターフェース名
*/
public static String getInterface(final Intent request) {
String inter = request.getExtras().getString(DConnectMessage.EXTRA_INTERFACE);
return inter;
}
/**
* リクエストから属性名を取得する.
*
* @param request リクエストパラメータ
* @return 属性名
*/
public static String getAttribute(final Intent request) {
String attribute = request.getExtras().getString(DConnectMessage.EXTRA_ATTRIBUTE);
return attribute;
}
/**
* レスポンスにエラーを設定する.
*
* @param response レスポンスパラメータ
* @param error エラーコード
* @param message エラーメッセージ
*/
private static void setError(final Intent response, final ErrorCode error, final String message) {
response.putExtra(DConnectMessage.EXTRA_RESULT, DConnectMessage.RESULT_ERROR);
response.putExtra(DConnectMessage.EXTRA_ERROR_CODE, error.getCode());
response.putExtra(DConnectMessage.EXTRA_ERROR_MESSAGE, (message == null ? error.toString() : message));
}
/**
* レスポンスにエラーを設定する.
*
* @param response レスポンスパラメータ
* @param error エラーコード
*/
private static void setError(final Intent response, final ErrorCode error) {
setError(response, error, null);
}
/**
* レスポンスにエラーを設定する.
*
* @param response エラーを設定するレスポンスパラメータ
* @param errorCode エラーコード
* @param message エラーメッセージ
*/
public static void setError(final Intent response, final int errorCode, final String message) {
response.putExtra(DConnectMessage.EXTRA_RESULT, DConnectMessage.RESULT_ERROR);
response.putExtra(DConnectMessage.EXTRA_ERROR_CODE, errorCode);
response.putExtra(DConnectMessage.EXTRA_ERROR_MESSAGE, message);
}
/**
* レスポンスのエラーコードに 原因不明のエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setUnknownError(final Intent response) {
setError(response, ErrorCode.UNKNOWN);
}
/**
* レスポンスのエラーコードに 原因不明のエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setUnknownError(final Intent response, final String message) {
setError(response, ErrorCode.UNKNOWN, message);
}
/**
* レスポンスのエラーコードに 未サポートプロファイルエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setNotSupportProfileError(final Intent response) {
setError(response, ErrorCode.NOT_SUPPORT_PROFILE);
}
/**
* レスポンスのエラーコードに 未サポートプロファイルエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setNotSupportProfileError(final Intent response, final String message) {
setError(response, ErrorCode.NOT_SUPPORT_PROFILE, message);
}
/**
* レスポンスのエラーコードに 未サポート属性・インターフェースエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setNotSupportAttributeError(final Intent response) {
setError(response, ErrorCode.NOT_SUPPORT_ATTRIBUTE);
}
/**
* レスポンスのエラーコードに 未サポート属性・インターフェースエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setNotSupportAttributeError(final Intent response, final String message) {
setError(response, ErrorCode.NOT_SUPPORT_ATTRIBUTE, message);
}
/**
* レスポンスのエラーコードに 未サポートプアクションエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setNotSupportActionError(final Intent response) {
setError(response, ErrorCode.NOT_SUPPORT_ACTION);
}
/**
* レスポンスのエラーコードに 未サポートアクションエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setNotSupportActionError(final Intent response, final String message) {
setError(response, ErrorCode.NOT_SUPPORT_ACTION, message);
}
/**
* レスポンスのエラーコードに サービスIDが設定されていない を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setEmptyServiceIdError(final Intent response) {
setError(response, ErrorCode.EMPTY_SERVICE_ID);
}
/**
* レスポンスのエラーコードに サービスIDが設定されていない を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setEmptyServiceIdError(final Intent response, final String message) {
setError(response, ErrorCode.EMPTY_SERVICE_ID, message);
}
/**
* レスポンスのエラーコードに サービス発見失敗 を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setNotFoundServiceError(final Intent response) {
setError(response, ErrorCode.NOT_FOUND_SERVICE);
}
/**
* レスポンスのエラーコードに サービス発見失敗 を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setNotFoundServiceError(final Intent response, final String message) {
setError(response, ErrorCode.NOT_FOUND_SERVICE, message);
}
/**
* レスポンスのエラーコードに タイムアウトエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setTimeoutError(final Intent response) {
setError(response, ErrorCode.TIMEOUT);
}
/**
* レスポンスのエラーコードに タイムアウトエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setTimeoutError(final Intent response, final String message) {
setError(response, ErrorCode.TIMEOUT, message);
}
/**
* レスポンスのエラーコードに 未知のインターフェース、属性へのアクセスエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setUnknownAttributeError(final Intent response) {
setError(response, ErrorCode.UNKNOWN_ATTRIBUTE);
}
/**
* レスポンスのエラーコードに 未知のインターフェース、属性へのアクセスエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setUnknownAttributeError(final Intent response, final String message) {
setError(response, ErrorCode.UNKNOWN_ATTRIBUTE, message);
}
/**
* レスポンスのエラーコードに バッテリー低下エラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setLowBatteryError(final Intent response) {
setError(response, ErrorCode.LOW_BATTERY);
}
/**
* レスポンスのエラーコードに バッテリー低下エラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setLowBatteryError(final Intent response, final String message) {
setError(response, ErrorCode.LOW_BATTERY, message);
}
/**
* レスポンスのエラーコードに 不正なパラメータエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setInvalidRequestParameterError(final Intent response) {
setError(response, ErrorCode.INVALID_REQUEST_PARAMETER);
}
/**
* レスポンスのエラーコードに 不正なパラメータエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setInvalidRequestParameterError(final Intent response, final String message) {
setError(response, ErrorCode.INVALID_REQUEST_PARAMETER, message);
}
/**
* レスポンスのエラーコードに 認証エラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setAuthorizationError(final Intent response) {
setError(response, ErrorCode.AUTHORIZATION);
}
/**
* レスポンスのエラーコードに 認証エラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setAuthorizationError(final Intent response, final String message) {
setError(response, ErrorCode.AUTHORIZATION, message);
}
/**
* レスポンスのエラーコードに アクセストークン有効期限切れエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setExpiredAccessTokenError(final Intent response) {
setError(response, ErrorCode.EXPIRED_ACCESS_TOKEN);
}
/**
* レスポンスのエラーコードに アクセストークン有効期限切れエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setExpiredAccessTokenError(final Intent response, final String message) {
setError(response, ErrorCode.EXPIRED_ACCESS_TOKEN, message);
}
/**
* レスポンスのエラーコードに アクセストークン有効期限切れエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setEmptyAccessTokenError(final Intent response) {
setError(response, ErrorCode.EMPTY_ACCESS_TOKEN);
}
/**
* レスポンスのエラーコードに アクセストークン有効期限切れエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setEmptyAccessTokenError(final Intent response, final String message) {
setError(response, ErrorCode.EMPTY_ACCESS_TOKEN, message);
}
/**
* レスポンスのエラーコードに スコープ外エラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setScopeError(final Intent response) {
setError(response, ErrorCode.SCOPE);
}
/**
* レスポンスのエラーコードに スコープ外エラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setScopeError(final Intent response, final String message) {
setError(response, ErrorCode.SCOPE, message);
}
/**
* 認証時にクライアントIDが発見できなかった場合のエラーコードを設定する.
* @param response レスポンスパラメータ
*/
public static void setNotFoundClientId(final Intent response) {
setError(response, ErrorCode.NOT_FOUND_CLIENT_ID);
}
/**
* 認証時にクライアントIDが発見できなかった場合のエラーコードとエラーメッセージを設定する.
* @param response レスポンスパラメータ
* @param message メッセージ
*/
public static void setNotFoundClientId(final Intent response, final String message) {
setError(response, ErrorCode.NOT_FOUND_CLIENT_ID, message);
}
/**
* レスポンスのエラーコードに デバイス状態異常エラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setIllegalDeviceStateError(final Intent response) {
setError(response, ErrorCode.ILLEGAL_DEVICE_STATE);
}
/**
* レスポンスのエラーコードに デバイス状態異常エラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setIllegalDeviceStateError(final Intent response, final String message) {
setError(response, ErrorCode.ILLEGAL_DEVICE_STATE, message);
}
/**
* レスポンスのエラーコードに サーバー状態異常エラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setIllegalServerStateError(final Intent response) {
setError(response, ErrorCode.ILLEGAL_SERVER_STATE);
}
/**
* レスポンスのエラーコードに サーバー状態異常エラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setIllegalServerStateError(final Intent response, final String message) {
setError(response, ErrorCode.ILLEGAL_SERVER_STATE, message);
}
/**
* レスポンスのエラーコードに 不正オリジンエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setInvalidOriginError(final Intent response) {
setError(response, ErrorCode.INVALID_ORIGIN);
}
/**
* レスポンスのエラーコードに 不正オリジンエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setInvalidOriginError(final Intent response, final String message) {
setError(response, ErrorCode.INVALID_ORIGIN, message);
}
/**
* レスポンスのエラーコードに 不正URLエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setInvalidURLError(final Intent response) {
setError(response, ErrorCode.INVALID_URL);
}
/**
* レスポンスのエラーコードに 不正URLエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setInvalidURLError(final Intent response, final String message) {
setError(response, ErrorCode.INVALID_URL, message);
}
/**
* レスポンスのエラーコードに 不正Profileエラー を設定する.
*
* @param response レスポンスパラメータ
*/
public static void setInvalidProfileError(final Intent response) {
setError(response, ErrorCode.INVALID_PROFILE);
}
/**
* レスポンスのエラーコードに 不正Profileエラー を設定し、指定されたエラーメッセージを設定する.
*
* @param response レスポンスパラメータ
* @param message エラーメッセージ
*/
public static void setInvalidProfileError(final Intent response, final String message) {
setError(response, ErrorCode.INVALID_PROFILE, message);
}
}