/*
SpheroLightProfile.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.irkit.profile;
import android.content.Intent;
import android.os.Bundle;
import org.deviceconnect.android.deviceplugin.irkit.data.IRKitDBHelper;
import org.deviceconnect.android.deviceplugin.irkit.data.VirtualProfileData;
import org.deviceconnect.android.deviceplugin.irkit.service.VirtualService;
import org.deviceconnect.android.message.MessageUtils;
import org.deviceconnect.android.profile.LightProfile;
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.PostApi;
import org.deviceconnect.message.DConnectMessage;
import java.util.List;
/**
* 仮想デバイスのLightプロファイル.
* @author NTT DOCOMO, INC.
*/
public class IRKitLightProfile extends LightProfile {
/**
* ライトのID.
*/
private static final String LIGHT_ID = "1";
/**
* ライトの名前.
*/
private static final String LIGHT_NAME = "照明";
public IRKitLightProfile() {
addApi(mGetLightApi);
addApi(mPostLightApi);
addApi(mDeleteLightApi);
}
private final DConnectApi mGetLightApi = new GetApi() {
@Override
public boolean onRequest(final Intent request, final Intent response) {
IRKitDBHelper helper = new IRKitDBHelper(getContext());
List<VirtualProfileData> requests =
helper.getVirtualProfiles(getServiceID(request), "Light");
if (requests.size() == 0) {
MessageUtils.setNotSupportAttributeError(response);
return true;
}
Bundle[] lights = new Bundle[1];
lights[0] = new Bundle();
lights[0].putString(PARAM_LIGHT_ID, LIGHT_ID);
lights[0].putString(PARAM_NAME, LIGHT_NAME);
lights[0].putBoolean(PARAM_ON, false);
response.putExtra(PARAM_LIGHTS, lights);
setResult(response, DConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mPostLightApi = new PostApi() {
@Override
public boolean onRequest(final Intent request, final Intent response) {
return sendLightRequest(getServiceID(request), getLightId(request), "POST", response);
}
};
private final DConnectApi mDeleteLightApi = new DeleteApi() {
@Override
public boolean onRequest(final Intent request, final Intent response) {
return sendLightRequest(getServiceID(request), getLightId(request), "DELETE", response);
}
};
/**
* ライト用の赤外線を送信する.
* @param serviceId サービスID
* @param lightId ライトID
* @param method HTTP Method
* @param response レスポンス
* @return true:同期 false:非同期
*/
private boolean sendLightRequest(final String serviceId, final String lightId,
final String method, final Intent response) {
IRKitDBHelper helper = new IRKitDBHelper(getContext());
List<VirtualProfileData> requests = helper.getVirtualProfiles(serviceId, "Light");
if (requests.size() == 0) {
MessageUtils.setNotSupportAttributeError(response);
return true;
}
if (lightId != null && !LIGHT_ID.equals(lightId)) {
MessageUtils.setInvalidRequestParameterError(response, "Invalid lightId.");
return true;
}
for (VirtualProfileData req : requests) {
String uri = req.getUri();
if (req.getUri().equalsIgnoreCase(uri)
&& req.getMethod().equals(method)
&& req.getIr() != null) {
return ((VirtualService) getService()).sendIR(req.getIr(), response);
} else {
MessageUtils.setInvalidRequestParameterError(response, "IR is not registered for that request");
}
}
return true;
}
}