package com.dataart.android.devicehive.client.commands;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import com.dataart.android.devicehive.DeviceData;
import com.dataart.android.devicehive.EquipmentState;
import com.dataart.android.devicehive.network.DeviceHiveResultReceiver;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
/**
* Get state information for equipment of given {@link DeviceData}. As a result
* returns list of {@link EquipmentState} objects.
*/
public class GetDeviceEquipmentStateCommand extends DeviceClientCommand {
private final static String NAMESPACE = GetDeviceEquipmentStateCommand.class
.getName();
private static final String DEVICE_KEY = NAMESPACE.concat(".DEVICE_KEY");
private static final String EQUIPMENT_STATE_KEY = NAMESPACE
.concat(".EQUIPMENT_STATE_KEY");
private final String deviceId;
/**
* Construct a new command with given device identifier.
*
* @param deviceId
* Device identifier.
*/
public GetDeviceEquipmentStateCommand(String deviceId) {
this.deviceId = deviceId;
}
@Override
protected RequestType getRequestType() {
return RequestType.GET;
}
@Override
protected String getRequestPath() {
return String.format("device/%s/equipment", encodedString(deviceId));
}
@Override
protected String toJson(Gson gson) {
return null;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(deviceId);
}
public static Parcelable.Creator<GetDeviceEquipmentStateCommand> CREATOR = new Parcelable.Creator<GetDeviceEquipmentStateCommand>() {
@Override
public GetDeviceEquipmentStateCommand[] newArray(int size) {
return new GetDeviceEquipmentStateCommand[size];
}
@Override
public GetDeviceEquipmentStateCommand createFromParcel(Parcel source) {
return new GetDeviceEquipmentStateCommand(source.readString());
}
};
@Override
protected int fromJson(final String response, final Gson gson,
final Bundle resultData) {
Type listType = new TypeToken<ArrayList<EquipmentState>>() {
}.getType();
final ArrayList<EquipmentState> equipmentStates = gson.fromJson(
response, listType);
resultData.putString(DEVICE_KEY, deviceId);
resultData.putParcelableArrayList(EQUIPMENT_STATE_KEY, equipmentStates);
return DeviceHiveResultReceiver.MSG_HANDLED_RESPONSE;
}
/**
* Get target device identifier.
*
* @param resultData
* {@link Bundle} object containing required response data.
* @return Device identifier.
*/
public final static String getDeviceId(Bundle resultData) {
return resultData.getParcelable(DEVICE_KEY);
}
/**
* Get a list of {@link EquipmentState} which determine current state of
* device equipment.
*
* @param resultData
* {@link Bundle} object containing required response data.
* @return A list of {@link EquipmentState} which determine current state of
* device equipment.
*/
public final static List<EquipmentState> getEquipmentState(Bundle resultData) {
return resultData.getParcelableArrayList(EQUIPMENT_STATE_KEY);
}
}