/*
DConnectServiceDiscoveryProfile.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.manager.profile;
import android.content.Intent;
import org.deviceconnect.android.event.EventError;
import org.deviceconnect.android.event.EventManager;
import org.deviceconnect.android.manager.DConnectMessageService;
import org.deviceconnect.android.manager.DevicePluginManager;
import org.deviceconnect.android.manager.request.ServiceDiscoveryRequest;
import org.deviceconnect.android.message.MessageUtils;
import org.deviceconnect.android.profile.ServiceDiscoveryProfile;
import org.deviceconnect.android.profile.api.DConnectApi;
import org.deviceconnect.android.profile.api.DeleteApi;
import org.deviceconnect.android.profile.api.GetApi;
import org.deviceconnect.android.profile.api.PutApi;
import org.deviceconnect.android.service.DConnectServiceProvider;
import org.deviceconnect.message.intent.message.IntentDConnectMessage;
/**
* Service Discovery プロファイル.
* @author NTT DOCOMO, INC.
*/
public class DConnectServiceDiscoveryProfile extends ServiceDiscoveryProfile {
/**
* タイムアウト時間を定義. (8秒)
*/
private static final int TIMEOUT = 8000;
/** デバイスプラグイン管理クラス. */
private DevicePluginManager mDevicePluginManager;
/**
* コンストラクタ.
* @param provider プロファイルプロバイダ
* @param mgr デバイスプラグイン管理クラス
*/
public DConnectServiceDiscoveryProfile(final DConnectServiceProvider provider,
final DevicePluginManager mgr) {
super(provider);
mDevicePluginManager = mgr;
addApi(mGetRequest);
addApi(mPutRequest);
addApi(mDeleteRequest);
}
private final DConnectApi mGetRequest = new GetApi() {
@Override
public boolean onRequest(final Intent request, final Intent response) {
ServiceDiscoveryRequest req = new ServiceDiscoveryRequest();
req.setContext(getContext());
req.setRequest(request);
req.setTimeout(TIMEOUT);
req.setDevicePluginManager(mDevicePluginManager);
((DConnectMessageService) getContext()).addRequest(req);
return false;
}
};
private final DConnectApi mPutRequest = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_SERVICE_CHANGE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, IntentDConnectMessage.RESULT_OK);
} else {
MessageUtils.setInvalidRequestParameterError(response);
}
return true;
}
};
private final DConnectApi mDeleteRequest = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_SERVICE_CHANGE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, IntentDConnectMessage.RESULT_OK);
} else {
MessageUtils.setInvalidRequestParameterError(response);
}
return true;
}
};
}