package com.dataart.android.devicehive.client.commands; 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.DeviceClass; import com.dataart.android.devicehive.EquipmentData; import com.dataart.android.devicehive.network.DeviceHiveResultReceiver; import com.google.gson.Gson; /** * Command which retrieves equipment for {@link DeviceClass}. As a result * returns list of {@link EquipmentData}. */ public class GetDeviceClassEquipmentCommand extends DeviceClientCommand { private final static String NAMESPACE = GetDeviceClassEquipmentCommand.class .getName(); private static final String DEVICE_CLASS_KEY = NAMESPACE .concat(".DEVICE_CLASS_KEY"); private static final String EQUIPMENT_KEY = NAMESPACE .concat(".EQUIPMENT_KEY"); private final int deviceClassId; /** * Construct a new command with given {@link DeviceClass}. * * @param deviceClassId * {@link DeviceClass} identifier. */ public GetDeviceClassEquipmentCommand(int deviceClassId) { this.deviceClassId = deviceClassId; } @Override protected RequestType getRequestType() { return RequestType.GET; } @Override protected String getRequestPath() { return String.format("device/class/%d", deviceClassId); } @Override protected String toJson(Gson gson) { return null; } private class DeviceClassEquipment extends DeviceClass { ArrayList<EquipmentData> equipment; DeviceClassEquipment(int id, String name, String version, boolean isPermanent, int offlineTimeout) { super(id, name, version, isPermanent, offlineTimeout); } } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(deviceClassId); } public static Parcelable.Creator<GetDeviceClassEquipmentCommand> CREATOR = new Parcelable.Creator<GetDeviceClassEquipmentCommand>() { @Override public GetDeviceClassEquipmentCommand[] newArray(int size) { return new GetDeviceClassEquipmentCommand[size]; } @Override public GetDeviceClassEquipmentCommand createFromParcel(Parcel source) { return new GetDeviceClassEquipmentCommand( source.readInt()); } }; @Override protected int fromJson(final String response, final Gson gson, final Bundle resultData) { final DeviceClassEquipment deviceClassEquipment = gson.fromJson( response, DeviceClassEquipment.class); resultData.putParcelable(DEVICE_CLASS_KEY, deviceClassEquipment); resultData.putParcelableArrayList(EQUIPMENT_KEY, deviceClassEquipment.equipment); return DeviceHiveResultReceiver.MSG_HANDLED_RESPONSE; } public final static DeviceClass getDeviceClass(Bundle resultData) { return resultData.getParcelable(DEVICE_CLASS_KEY); } /** * Get a list of {@link EquipmentData} which belong to target * {@link DeviceClass} object. * * @param resultData * {@link Bundle} object containing required response data. * @return A list of {@link EquipmentData} which belong to target * {@link DeviceClass} object. */ public final static List<EquipmentData> getEquipment(Bundle resultData) { return resultData.getParcelableArrayList(EQUIPMENT_KEY); } }