net.solarnetwork.node.hw.currentcost.CCDatum.java Source code

Java tutorial

Introduction

Here is the source code for net.solarnetwork.node.hw.currentcost.CCDatum.java

Source

/* ==================================================================
 * CCDatum.java - Apr 23, 2013 3:30:30 PM
 * 
 * Copyright 2007-2013 SolarNetwork.net Dev Team
 * 
 * This program is free software; you can redistribute it and/or 
 * modify it under the terms of the GNU General Public License as 
 * published by the Free Software Foundation; either version 2 of 
 * the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 
 * 02111-1307 USA
 * ==================================================================
 */

package net.solarnetwork.node.hw.currentcost;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.joda.time.LocalTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

/**
 * A CurrentCost datum.
 * 
 * @author matt
 * @version 1.2
 */
public class CCDatum implements Comparable<CCDatum> {

    private final long created;
    private String deviceAddress;
    private String deviceName;
    private String deviceType;
    private String deviceSoftwareVersion;
    private Integer daysSinceBegin;
    private LocalTime time;
    private Integer channel1Watts;
    private Integer channel2Watts;
    private Integer channel3Watts;
    private Float temperature;

    /**
     * Default constructor.
     */
    public CCDatum() {
        super();
        created = System.currentTimeMillis();
    }

    @Override
    public String toString() {
        return "CCDatum{" + getStatusMessage() + "}";
    }

    /**
     * Secondary setter to set the time, to support both v1 and v2 message
     * format mapping.
     * 
     * @param time
     *        the time
     */
    public void setLocalTime(String timeString) {
        LocalTime t = null;
        if (timeString != null && timeString.length() > 5) {
            // the XPath mapping can result in a time like ::14:14:27, due to supporting old/new XML
            if (timeString.startsWith(":")) {
                timeString = timeString.replaceAll("^:+", "");
            }
            DateTimeFormatter dtf = DateTimeFormat.forPattern("HH:mm:ss");
            t = dtf.parseLocalTime(timeString);
        }
        this.time = t;
    }

    /**
     * Get a status message of this datum, including the address, amp readings,
     * and creation date.
     * 
     * @return a status message
     */
    public String getStatusMessage() {
        return (deviceAddress + ": 1 = " + (channel1Watts == null ? "N/A" : channel1Watts) + ", 2 = "
                + (channel2Watts == null ? "N/A" : channel2Watts) + ", 3 = "
                + (channel3Watts == null ? "N/A" : channel3Watts) + (time == null ? "" : "; " + time) + "; "
                + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date(created)));
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((deviceAddress == null) ? 0 : deviceAddress.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CCDatum other = (CCDatum) obj;
        if (deviceAddress == null) {
            if (other.deviceAddress != null)
                return false;
        } else if (!deviceAddress.equals(other.deviceAddress))
            return false;
        return true;
    }

    @Override
    public int compareTo(CCDatum o) {
        if (o == null) {
            return 1;
        }
        if (deviceAddress == null) {
            return -1;
        }
        if (o.deviceAddress == null) {
            return 1;
        }
        return deviceAddress.compareTo(o.deviceAddress);
    }

    public String getDeviceAddress() {
        return deviceAddress;
    }

    public void setDeviceAddress(String deviceAddress) {
        this.deviceAddress = deviceAddress;
    }

    public String getDeviceName() {
        return deviceName;
    }

    public void setDeviceName(String deviceName) {
        this.deviceName = deviceName;
    }

    public String getDeviceType() {
        return deviceType;
    }

    public void setDeviceType(String deviceType) {
        this.deviceType = deviceType;
    }

    public String getDeviceSoftwareVersion() {
        return deviceSoftwareVersion;
    }

    public void setDeviceSoftwareVersion(String deviceSoftwareVersion) {
        this.deviceSoftwareVersion = deviceSoftwareVersion;
    }

    public Integer getDaysSinceBegin() {
        return daysSinceBegin;
    }

    public void setDaysSinceBegin(Integer daysSinceBegin) {
        this.daysSinceBegin = daysSinceBegin;
    }

    public LocalTime getTime() {
        return time;
    }

    public void setTime(LocalTime time) {
        this.time = time;
    }

    public Integer getChannel1Watts() {
        return channel1Watts;
    }

    public void setChannel1Watts(Integer channel1Watts) {
        this.channel1Watts = channel1Watts;
    }

    public Integer getChannel2Watts() {
        return channel2Watts;
    }

    public void setChannel2Watts(Integer channel2Watts) {
        this.channel2Watts = channel2Watts;
    }

    public Integer getChannel3Watts() {
        return channel3Watts;
    }

    public void setChannel3Watts(Integer channel3Watts) {
        this.channel3Watts = channel3Watts;
    }

    public Float getTemperature() {
        return temperature;
    }

    public void setTemperature(Float temperature) {
        this.temperature = temperature;
    }

    public long getCreated() {
        return created;
    }

}