package com.dataart.android.devicehive.device.commands;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import com.dataart.android.devicehive.DeviceData;
import com.dataart.android.devicehive.network.DeviceHiveResultReceiver;
import com.google.gson.Gson;
/**
* Register a new device which parameters are described by given
* {@link DeviceData} instance.
*
*/
public class RegisterDeviceCommand extends DeviceCommand {
private final static String NAMESPACE = RegisterDeviceCommand.class
.getName();
private static final String DEVICE_DATA_KEY = NAMESPACE
.concat(".DEVICE_DATA_KEY");
private final DeviceData deviceData;
/**
* Construct a new command with given {@link DeviceData}.
*
* @param deviceData
* {@link DeviceData} instance.
*/
public RegisterDeviceCommand(DeviceData deviceData) {
super(deviceData.getId(), deviceData.getKey());
this.deviceData = deviceData;
}
@Override
protected RequestType getRequestType() {
return RequestType.PUT;
}
@Override
protected String getRequestPath() {
return String.format("device/%s", getEncodedDeviceId());
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(deviceData, 0);
}
public static Parcelable.Creator<RegisterDeviceCommand> CREATOR = new Parcelable.Creator<RegisterDeviceCommand>() {
@Override
public RegisterDeviceCommand[] newArray(int size) {
return new RegisterDeviceCommand[size];
}
@Override
public RegisterDeviceCommand createFromParcel(Parcel source) {
return new RegisterDeviceCommand(
(DeviceData) source.readParcelable(CLASS_LOADER));
}
};
@Override
protected String toJson(Gson gson) {
return gson.toJson(deviceData);
}
@Override
protected int fromJson(final String response, final Gson gson,
final Bundle resultData) {
final DeviceData deviceData = gson.fromJson(response, DeviceData.class);
resultData.putParcelable(DEVICE_DATA_KEY, deviceData);
return DeviceHiveResultReceiver.MSG_HANDLED_RESPONSE;
}
public final static DeviceData getDeviceData(Bundle resultData) {
return resultData.getParcelable(DEVICE_DATA_KEY);
}
}