001/*
002# Licensed Materials - Property of IBM
003# Copyright IBM Corp. 2016 
004 */
005package com.ibm.streamsx.iot;
006
007import java.io.IOException;
008import java.io.Serializable;
009import java.time.Instant;
010
011import com.ibm.json.java.JSONObject;
012import com.ibm.streamsx.topology.tuple.JSONAble;
013
014/**
015 * A device command.
016 */
017public class DeviceCmd implements JSONAble, Serializable {
018    private static final long serialVersionUID = 1L;
019
020    private final Device device;
021    private final String cmdId;
022    private final Instant ts;
023    private final JSONObject data;
024    
025    public DeviceCmd(Device device, String cmdId, Instant ts, JSONObject data) {
026        super();
027        this.device = device;
028        this.cmdId = cmdId;
029        this.ts = ts;
030        this.data = data;
031    }
032
033    public Device getDevice() {
034        return device;
035    }
036
037    public String getCmdId() {
038        return cmdId;
039    }
040    
041    public Instant getTs() {
042        return ts;
043    }
044
045    public JSONObject getData() {
046        return data;
047    }
048
049    @Override
050    public JSONObject toJSON() {
051        JSONObject json = getDevice().toJSON();
052        json.put("cmdId", getCmdId()); //$NON-NLS-1$
053        json.put("d", getData()); //$NON-NLS-1$
054        if (getTs() != null)
055            json.put("ts", getTs().toString()); //$NON-NLS-1$
056        return json;
057    }
058
059    @Override
060    public String toString() {
061        try {
062            return toJSON().serialize();
063        } catch (IOException e) {
064            throw new RuntimeException(e);
065        }
066    }
067}